javaEE(单元测试、反射、动态代理、xml)
单元测试
- 最小的功能单元编写测试代码,java针对方法,检查方法的正确性
 
JUnit单元测试框架
@Test注解
public class A {
    @Test
    public void a(){
        .....
    }
}
- 必须导入jar包
 - 定义的测试方法必须是无参数无返回值的,且公开的方法
 - 测试的方法要用@Test注解
 
注解
- @Test
 - @Before 实例方法,每个测试方法之前执行
 - @After 实例方法,每个测试方法之前执行
 - @BeforeClass 静态方法,所有测试方法之前执行一次
 - @AfterClass静态方法,在所有测试方法之后执行一次
 
初始化资源
释放资源
反射
是指对于任何一个Clss类,在运行是都可以直接得到这个类的全部成分
- 类构造对象:Constructor
 - 类的成员变量对象:Filed
 - 类的成员方法对象:Method
 - 动态获取类的信息以及动态的调取类中的成分的能力称为java语言的反射机制
 
Class c = A.class;
获得类对象
Class类中的静态方法:
- forName(String className)
 - 类名.class
 - 对象.getClass()
 
main(){
    Class c =Class.forName("com.hjz.entity.Student");
    Class c =Student.class;
    Student s =new Student();
    Class c = s.getClass();
}
获得构造器对象:
1.获得Class类对象
2.获得构造器对象
- Constructor<?> getConstructors()返回所有的构造器数组(只拿public)
 - Constructor<?> getDeclredConstructors()返回所有的构造器数组,有就能拿到
 - Constructor getConstructors( Class<?>... paramerTypes)返回单个构造器
 - Constructor getDeclredConstructors( Class<?>... paramerTypes)
 
main(){
    Class c =Student.class;
    Constructor[] cs = c.getConstructors();
    Constructor[] cs = c.getDeclredConstructors(String.class,int.class);//有一个构造方法是啥用啥
}
创建对象:
- T newInstance(Object...initargs) 指定的构造器创建对象
 - public void setAccesible(boolean flag) 设置为true 表示取消访问检查,进行暴力反射
 
main(){
    Class c =Student.class;
    Constructor cs = c.getDeclredConstructors();//有一个构造方法是啥用啥
    //反射会破坏封装性
    cs.setAccesible(true);//是私有的
    Student s = (Student)cs.new newInstance();
}
获得成员变量对象:
1.获得Class类对象
2.获得成员变量对象
- Filed[] getDeclredFileds()
 - Filed getDeclredFiled(String name)
 
方法:
- getType()
 
main(){
    Field agef =c.getDeclredFiled("age");
 	agef.setAccessible(true);
    Student s =new Student();
    agef.set(s.18);
    int age = (int) agef.get(s);
}
获得方法对象
- Method[] getMothod()
 - Method getDeclredConstructor( ,String name,Class<?>... paramerTypes)
 
....和之前的一样
反射的作用
- 反射是在运行时使用的技术,此时集合泛型就不能产生约束了,此时是可以为集合存入其他任何类型的元素的
 
ArrayList<Integer> list =new ArrayList<>();
实际跑起来都是Arraylist的类型了,不用管Integer了
- 反射的通用框架
 
1.定义一个方法可以接受任意的对象
2.每次收到一个对象后,解析这个对象的全部成员变量
3.这个对象是任意的
4.遍历这个成员变量,提取成员变量的具体的值
5.把名称和值放到成员变量对应的文件里面
注解
JDK5 引入的标注
- 对java的类、方法、对象有特殊处理
 
自定义注解
public @interface 注解名称{
    public属性名称 属性名()default 默认值;
}
例子:
public @interface MyBook{
    String name();
    String[] authors();
    double price();
}
public class a{
    @MyBook(name="java",autors={"黑马","我的"},price=200)
    public void ss(){
    }
}
只有一个value属性可以写可以不写
元注解
注解上的注解
@Target:约束自定义注解只能在哪使用
发现ElementType是个枚举。属性作用如下:
TYPE:接口、类、枚举
FIELD:字段、枚举的常量
METHOD:方法
PARAMETER:方法参数
CONSTRUCTOR:构造函数
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解
PACKAGE:包@Retention:申明注解的生命周期
按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyBook{
    String name();
    String[] authors();
    double price();
}
注解解析
- Annotation:注解的顶级接口,注解都是Annotation的类型对象
 - AnnotatedElement:给接口定义了注解解析相关的解析方法
 
动态代理(重点)
代理为对象的行为实现一些辅助操作:
有时间看吧
xml
xml解析---xpath解析技术
可扩展标记语言
数据表示格式
<?xml version="1.0" encoding="utf-8">
<--注释有且仅有一个-->
- <小于
 - >大于
 - & 和
 - &apos 单引号
 - " 引号
 
文档约束
- DTD
 - schema
 
解析数据技术:Dom4J框架底层技术
- SAX解析
 - DOM解析
 
数据检索技术XPath
- Dom4J需要进行全文检索,然后寻找资源
 - Xpath技术适合数据检索
 
完结了我草终于2022.05.07
javaEE(单元测试、反射、动态代理、xml)的更多相关文章
- 【译】11. Java反射——动态代理
		
原文地址:http://tutorials.jenkov.com/java-reflection/dynamic-proxies.html 博主最近比较忙,争取每周翻译四篇.等不急的请移步原文网页. ...
 - java 反射 动态代理
		
在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...
 - 【Java核心技术】类型信息(Class对象 反射 动态代理)
		
1 Class对象 理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息.Class对象就是用来创建所有“常规”对象的,J ...
 - 深入理解Java反射+动态代理
		
答: 反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...
 - java---解析XML文件,通过反射动态将XML内容封装到一个类中
		
本博客讲的XML解析,使用的是dom4j. 首先建立一个maven项目,在dom.xml中引入相应的dom4j的版本.作者下载的是热度很高的1.6.1版本.maven的使用在这里不做详细讲解. 引入成 ...
 - 【对线面试官】Java 反射&&动态代理
		
// 抽象类,定义泛型<T> public abstract class BaseDao<T> { public BaseDao(){ Class clazz = this.g ...
 - 静态代理和利用反射形成的动态代理(JDK动态代理)
		
代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...
 - JDK动态代理+反射实现动态修改注解属性值
		
这是最近朋友的一个需求,正好闲来无聊有些时间,跟着研究一下,如有不正确的地方,欢迎大家指正~ 一.准备自定义注解 注:如何实现自定义注解,请移步百度. 二.实现 1.实现方式1:通过反射+动态代理动态 ...
 - 七 MyBatis整合Spring,DAO开发(传统DAO&动态代理DAO)
		
整合思路: 1.SQLSessionFactory对象应该放到Spring中作为单例存在 2.传统dao开发方式中,应该从Spring容器中获得SqlSession对象 3.Mapper代理行驶中,应 ...
 - JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明
		
1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...
 
随机推荐
- c++题目:吃西瓜
			
吃西瓜 [问题描述] 老胡买了是长方体形的西瓜来犒劳大家.... 这块西瓜长m厘米,宽n厘米,高h厘米.他发现如果把这块西瓜平均地分成m*n*h块1立方厘米的小正方体,那么每一小块都会有一个营养值(可 ...
 - C温故补缺(十二):预编译器与头文件
			
预编译器 预编译器就是之前学的预编译指令的执行者 gcc -E test.c -o test.i 生成预编译文件就是翻译#指令 比如#include<stdio.h>就是把整个stdio. ...
 - python3中的常见知识点2
			
python3中的常见知识点2 列表与栈和队列 map()函数 python列表遍历的4种方式 参考链接 列表栈和队列 1.列表作为栈使用 栈:先进后出,First In Last Out 使用 ap ...
 - 几种数据库jar包获取方式
			
摘要:以下提供的都是各个数据库较为官方的jar包获取方式. 本文分享自华为云社区<JDBC连接相关jar包获取及上传管理中心白名单处理>,作者:HuaWei XYe. jar包获取 以下提 ...
 - Linux基础第五章 进程控制
			
5.2 fork fork函数实现进程复制,类似于动物界的单性繁殖,fork函数直接创建一个子进程.这是Linux创建进程最常用的方法.在这一小节中,子进程概念指fork产生的进程,父进程指主动调用f ...
 - 手动解析word Table模块内容
			
最近来了一个需求, 需要手动解析word ( 好处就是不需要安装office 以及不会有office解析的线程残留),然后就是可以自定义解析规则,比较方便 比如解析这个word里面的内容: 标题,表格 ...
 - pyCharm中下载包的速度慢的解决方案
			
1.解决方案 使用阿里镜像 2.具体步骤 1.在项目里面新建一个xxx.py文件 2.然后将下面的代码复制进xxx.py文件 import os ini = "[global]\nindex ...
 - electron中使用adm-zip将多个excel文件压缩进文件夹,使用XLSX以及XLSXStyle生成带样式excel文件
			
需求:electron环境下想要实现根据多个表生成多个Excel文件,打包存入文件夹内并压缩下载到本地.(实际场景描述:界面中有软件工程一班学生信息.软件工程二班学生信息.软件工程三班学生信息,上方有 ...
 - 2022年8月20,第一组,周鹏,从1到m中随机取n个数,n<=m,显示出所有取法
			
static Random a1 =new Random(); static int m = a1.nextInt(20)+1;//随机取一个1到20的值 static int n = a1.next ...
 - MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建
			
前言: 前面的四个章节我们主要讲解了MongoDB的相关基础知识,接下来我们就开始进入使用.NET7操作MongoDB开发一个ToDoList系统实战教程. MongoDB从入门到实战的相关教程 Mo ...