码迷,mamicode.com
首页 > 编程语言 > 详细

java 反射机制:运行时的类信息(为框架服务的Bug存在)

时间:2015-02-24 22:15:37      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:


  • 反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

  • 换一种引出反射的说法是:当通过反射与一个未知的类型的对象打交道是,JVM只是简单地检查这个类,看它是属于哪个特定的类(就想RTTI那样)。在用它做其他事情之前必须先加载那个类的Class对象。因此,那个类的.class文件对于JVM来说必须是可获取的;那么在本地机器上,要么通过网络获得。所以RTTI反射之间真正的区别只在于,对于RTTI来说,编译器再编译的时候打开和检查.class文件。(换句话说,我们可以用“普通”方式调用对象的所有方法)而对于反射机制来说,.class文件在编译时时不可获得的,所以在运行时打开和检查.class文件。

  • 举个项目例子来说: 
    我们在项目运行开始后,如果我们需要更改这个项目的某个地方的Dao的时候,根据我们设计模式的OCP原则:对增加开放,对修改关闭,所以我们是不会轻易的去修改代码的,因为我们一般都会用一个配置文件来设置我们项目需要的哪种Dao,如:

    factory = shop.dao.PropertiesFactory 
    userDao = shop.dao.UserDao 
    addressDao = shop.dao.AddressDao

所以我们以后就能在这里修改我们需要的,并不需要去项目中修改代码,但问题来了,我们如果通过String来获得我们需要的类呢,这就是反射的起因之一。

            Properties prop = PropertiesUtil.getDaoProp();
            String fs = prop.getProperty("factory");
            Class clz = Class.forName(fs);
            String mn = "getInstance";
            Method m = clz.getMethod(mn);
            f = (IFactoryDao)m.invoke(clz);

这段代码中我们可以看到:Class clz = Class.forName(fs);我们通过Class.forName()方法便能得到一个类(其他看不懂可以看接下来我贴的中文sdk文档链接学习)。这样我们便能做到动态的获得一个类了,这也就是反射机制的好处之一。

  • 反射机制其实还能做到好多,在框架的学习中也是有很大的用处的。接下来就是硬菜了,个人感觉看文档,绝对是有着很大的好处的。在java中Class类java.lang.reflect类库一起对反射的概念进行了支持 
    Class类 
    java.lang.reflect 
    一个例子让你了解Java反射机制

java 反射机制:运行时的类信息(为框架服务的Bug存在)

标签:

原文地址:http://blog.csdn.net/u011345136/article/details/43926929

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!