首页 > 代码库 > java反射与动态代理

java反射与动态代理

一直分不清的两个东西,今天记录一下,java反射与动态代理

java反射:1、在运行时分析类的能力

     2、在运行是查看对象

   3、实现数组的操作代码

   4、利用Method对象

 在java.lang.reflect包中有三个类Field、Method、Constructor分别用于描述类的域、方法和构造器,这三个类都有一个叫做getName的方法,用来返回相应的名称。

Field类有一个getType方法,用于返回描述域所数类型的Class类型对象。Method和Contructor类包含有能够报告参数类型的方法,Method类型还可以报告返回类型

这是三个类还有一个叫做getModifiers的方法,它将返回一个整型数值,用不同的位开关设置描述public和static这些修饰的使用状况。

另外,还可以利用java.lang.reflect包中的Modifier类的静态方法分析getModifiers返回的整型数值。例如Modifire.isPublic,isPrivate,isFinal等等

class类中的getFields,getMethods和getConstructors方法将分别返回类支持的public域,方法和构造器数组,其中包括超类的共有成员。Class类的getDeclareFields

getDeclareMethods和getDeclaredConstructors方法分别返回类中声明的全部与,方法和构造器数组,其中包括私有和受保护的成员,但不包括超类的成员,以下java代码是用了反射的一小段代码

	Class<Test> c=Test.class;
		Test t=c.newInstance();
		t.setId(1);
		Field f=c.getDeclaredField("id");
		f.setAccessible(true);
		System.out.println(f.get(t));
		f.setAccessible(false);
		Method m=c.getMethod("getId");
		Object o=m.invoke(t);
		System.out.print(o);

动态代理:代理模式 ,这是一种设计模式 而java反射是java语言分析类结构,动态执行java程序的本身具有的一种能力,和模式没关系
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 

当然两者结合起来可以干很多事,比如面向aop编程,Spring的aop就是这么干的,这里不多说,并且很多框架都用了反射,在执行某个方法,获取参数时就会用到,反射是获取不到方法执行的参数的

资料引用:java核心技术第一版


java反射与动态代理