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了,怎么考虑的?!
Global site tag (gtag.js) - Google Analytics