A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 房建斌 中级黑马   /  2014-3-9 14:01  /  1242 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  哪位知道反射和内省到底异同是什么,都用在什么地方呢。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

1 个回复

倒序浏览
一:反射
      1.什么是反射
             反射就是在运行状态把Java 类中的各种成分映射成相应相应的Java 类,可以动态得获取所有的属性以及动态调用任意一个方法。
             1).一段java代码在程序的运行期间会经历三个阶段:source-->class-->runtime
             2).Class对象
                    在java中用一个Class对象来表示一个java类的class阶段
                    Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。
2.反射怎么用
          1).获得java类的各个组成部分,首先需要获得代表java类的Class对象
               获得Class对象有以下三种方式:
                    Class.forname(className)            用于做类加载
                    obj.getClass()                              用于获得对象的类型
                    类名.class                                    用于获得指定的类型,传参用

二:内省
     1.什么是内省
          通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性,Beantils工具基于此来实现。
      2.内省怎么用
          1).操作一个属性
               Object obj = new Object();
               PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class);     //声明属性描述对象,一次只可描述一个属性
               Method m = pd.getWriterMethod();//获取setter方法
               m.invoke(obj,value);
               Method m = pd.getReaderMethod();//获取getter方法
               Object value = m.invoke(obj);
             2).操作多个属性
               BeanInfo bi = Instospector.getBeanInfo(beanClass);//获取Bean描述对象
               PropertyDescriptor[] pds = bi.getPropertyDescriptors();//获取属性描述对象数组
               拿到属性描述对象数组之后再循环数组,剩余的操作就跟"操作一个属性"相同了。
三:两者区别
         反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。
     
四:应用
          框架就是将开发中大量重复的代码其中起来写个通用的程序,框架是给将来的程序使用的,需要现在的类调用将来的,所以框架要运行是依赖于将来的类实现的。
          我们只需要针对接口进行调用,将来的类实现接口,那么方法就固定了。但是将来写的类的类名我们无从得知,这时就需要调用者通过配置文件告诉框架具体的类名。

          将java的反射以及内省机制应用到程序设计中可以大大提高程序的智能化和可扩展性。有很多项目都是使用这两种技术实现其核心功能的。例如BeanUtils,Struts等。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马