您的位置:首页 > 编程语言 > Java开发

java反射与动态代理

2014-09-27 23:24 423 查看
一直分不清的两个东西,今天记录一下,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核心技术第一版

转载之后请注明出处:/article/10267383.html
飞天博客

谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: