随笔 - 3, 文章 - 152, 评论 - 17, 引用 - 0
数据加载中……

Java反射简述

Java中反射Reflection就是对类信息的元数据的描述与操作,首先是对加载的类的信息的获得,其次是实例化和操作对象。

类信息有java.lang.Class提供描述。Class对象由三种方法获得,第一是调用对象的getClass()方法;第二是直接使用类的.class形式;第三是直接使用Class.forName(String)的形式;

和反射打交道使用较多的类是java.lang.reflect.MethodFieldConstructor分别对应方法调用、属性与属性修改、构造函数使用三个方面,具体api查看文档;数组类型比较特殊具体参考java.lang.reflect.Array

关于反射的两个误解:反射代码速度很慢;反射代码都是复杂的;

――――如果使用得当,反射不会降低性能,正确的使用反射实际上应该改进代码的可维护性。反射的直接使用应该仅局限于基础机构类,不应该被分散到应用对象中。Rod Johnson

反射的api学习不是关键,关键是掌握其本质,并能够在实际中合适的使用它。掌握反射是一个认真的java程序员该做到的。实际中已用到的反射的例子:strutsformbean从请求中自动填充、apacheBeanUtil包;strutsDispatchAction根据参数传递的方法名字动态调用本实例的具体方法;工厂模式中根据参数传递的类名来动态加载并实例化一个产品。

 

       动态代理

jdk1.3提供的一种在运行时实现特定接口并生成相应代理实现,从而可以截取对该接口实现的调用。截取对每个实现方法的调用对处理提供了很大的空间,你可以在方法调用前后进行相关的处理,同时还可以随意调用非实现对象的方法。这种截取适用于资源的获得和释放、记录日志、获取性能信息等情况。动态代理是一种Aspect Oriented Programming (AOP)的实现,同时经常在容器和服务器级别使用。

实际使用动态代理的例子:代理Connection来自动关闭该连接打开的Statement;在业务方法前后添加日志记录。

posted on 2005-07-19 09:18 阅读(246) 评论(0)  编辑  收藏 所属分类: Reflection


只有注册用户登录后才能发表评论。


网站导航: