黑马程序员技术交流社区
标题:
什么暴力反射,概念,举个例!
[打印本页]
作者:
还记得梦想吗
时间:
2014-2-19 19:45
标题:
什么暴力反射,概念,举个例!
什么暴力反射,概念,举个例!求详细!
作者:
joure
时间:
2014-2-19 20:07
暴力反射就是绕过编译器,来操作该类中的private私有字段,普通反射是无法直接获取私有字段的
举一个Field 类反射的例子
普通反射
示例: Field field = obj.getClass().getField("变量名")
field.get(obj) //通过反射获取对象的变量值
步骤: 1)获取class字节码 2)获取指定的Field对象 3)获取变量值
"暴力反射"
get方法只能获取声明为 public 的变量,对于私有变量,可以通过getDeclaredField()方法获取 private 变量
获取对象后要通过 setAccessible(true)方法将该域设置为可访问
示例: Field field = obj.getClass().getDeclaredField(); //1)2)获取私有file对象
field.setAccessible(true); //3)将private变量设置为可访问;继承自父类 AccessibleObject 的方法
field.get(obj); //4)获取变量值
作者:
joure
时间:
2014-2-19 20:09
使用暴力反射还可以破解单例模式
单例模式的单例并不是绝对安全的,仍可以通过反射来破解
通过 Constructor<?>[] getDeclaredConstructors() 获取这个方法获得所有构造器,然后可以得到私有的构造器,
使用 cons.setAccessible(true) 突破私有构造。然后可以创建无限个单例实例
作者:
一年_Hei
时间:
2014-2-19 20:20
就是名字牛,就是为了访问私有的对象。用setAccessible(true)方法就好了
作者:
山治0712
时间:
2014-2-19 20:58
就是把类类里面一些私有的属性及方法都反射出来叫暴力
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2