黑马程序员技术交流社区
标题:
看了反射和内省的视频,写了setProperty两个方法<已解决>
[打印本页]
作者:
刘春发
时间:
2012-6-12 22:43
标题:
看了反射和内省的视频,写了setProperty两个方法<已解决>
本帖最后由 刘春发 于 2012-6-14 22:26 编辑
public Object setProperty(Object obj,String propertyName,Object value) throws IntrospectionException,
IllegalArgumentException, IllegalAccessException, InvocationTargetException{
PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());
Method method = pd.getWriteMethod();
method.invoke(obj, value);
return obj;
}//这个是内省?
public Object setProperty2(Object obj,String propertyName,Object value) throws IllegalArgumentException,
IllegalAccessException, SecurityException, NoSuchFieldException {
Field field = obj.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
field.set(obj, value);
return obj;
}//这个是反射?
还是有点糊涂,内省和反射的作用到底是什么?
作者:
潘东升
时间:
2012-6-12 23:02
反射作用:实现了动态访问java类的方法,可以获取和设置类的属性,可以通过类的实例对象调用方法,可以创建类的实例。
内省:获取javabean类的属性信息,并可以对属性设值。内省是在反射的基础上完成的,所以内省能做的只通过反射也能做。
作者:
sbeeqnui1987
时间:
2012-6-12 23:25
反射其实就是程序能够自检查自身信息。就像程序会照镜子反光看自己。
在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。
这样可以写出很灵活的程序。
比如要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy,
就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,
再判断属性名是否相同即可。当然应用还有很多。
反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。
hibernate的延迟载入,spring的AOP都是这么实现的
反射给Java带来了一些动态性。不过虽然很好,但毕竟还是有一定局限性的。另外ASM,cglib使用还是不放便。因此一些纯动态语言现在是一个重要发展趋势,比如ruby,python等,程序很容易动态生成。
作者:
梁清平
时间:
2012-6-13 11:54
上面两段代码应该是张孝祥老师java高新中举的例子吧。。
只能说这两个例子分别用了反射和内省。。楼主不要认为这就是什么什么。。
首先搞清楚这两个概念:
反射:简单的说就是将java类中的各个部分映射成对应的java类。
好吧。。当你看到这个概念的时候理解不了什么意思太正常了。。
只要对这个概念有个初步的印象就往下学吧。。当你把关于反射的被频全看完了。。可能还是没搞清楚,,实际上这也很
正常。。再看一遍绝对有不同的理解。。。在这里我只跟你说:为什么要出现反射呢?为了定义框架,,为什么定义框架
要用到反射呢?因为在定义框架的时候我们还不知道用我们框架实战中出现的类名、方法名等等。。就象你定义个方法在
在不知道参数里可以写个Object一个意思。。剩下的自已去理解吧。
内省 就是API对JavaBean进行一系列操作提供的标准方法。
简单说。。实际上就是在符合JavaBean的基础上做出来的一套方法。。前提是这些个类需要符合javaBean。
张老师讲的视频有时候看两遍也不一定能搞懂。。多看就明白是什么意思了。。我觉得如果让毕老师来讲这部分课可能就好懂多了。。。各有千秋吧。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2