Hibernate如何实现对private方法的访问
njyu
2009-06-08
Hibernate如何实现对private方法的访问,知道是用反射,但具体实现搞不清,麻烦知道的解释一下!
|
|
tenderuser
2009-06-09
先获得method对象,然后 调用 method.setAccessible(true)就ok了
|
|
pansonphy
2009-07-28
试试这样:
String clzname = "classname"; Class clz = Class.forName(clzname); Object obj = clz.newInstance(); Method[] mthds = clz.getDeclaredMethods(); for (int i = 0; i < mthds.length; i++) { if ("run".equals(mthds[i].getName())) { // 打开访问权 mthds[i].setAccessible(true); // 方法对象.invoke(类的实例,方法的参数); // 参数是用new Object[]{}; mthds[i].invoke(obj, null); } } |
|
amigobot
2009-08-08
mthds[i].setAccessible(true); 要改吗? 很久以前试过, 没记得有这一句。
|
|
w2gavin
2009-08-26
应该是用反射取得get和set方法吧,一个pojo的属性可以是private的,但是方法不可能是private的吧;所以个人觉得对一般的get和set方法进行setAccessible(true)有点多余,但是谨慎点总是好的
|
|
younglibin
2009-09-14
njyu 写道 Hibernate如何实现对private方法的访问,知道是用反射,但具体实现搞不清,麻烦知道的解释一下!
在hibernate中用private 的目的就是 简单的控制权限,使属性 处于不可改状态! 只能使用get获得! 至于楼上说的 set 方法! 不知道有那个必要没! 既然要用 set 那就写成 public 的了,不用private ! |
|
duantonghai
2009-12-25
hibernate用的好像是cglib去增强字节码的,直接修改字节码的,有可能是用cglib去访问私有方法的
|
|
shupili141005
2010-02-01
但是它不能将私有变量赋值,否则违反了java的封装
谁告诉你它不能将私有变量赋值?? setAccessible public void setAccessible(boolean flag) throws SecurityException将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。 我也学习了,Good lucky for you! http://www.iteye.com/problems/20476 |
|
bwkbwl
2010-03-02
学习中inginging
|
|
TheMatrix
2010-03-08
既然要被外部访问就别private了,怎么考虑的?!
|