首页 > 代码库 > 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反射与动态代理