我們知道,Java應用程序不能訪問持久化類的private方法,但Hibernate沒有這個限制,它能夠訪問各種級別的方法,如private, default, protected, public. Hibernate是如何實現該功能的呢?答案是利用JAVA的反射機制,如下:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo {
public static void main(String[] args) throws Exception {
Method method = PackageClazz.class.getDeclaredMethod("privilegedMethod", new Class[]{String.class,String.class});
method.setAccessible(true);
method.invoke(new PackageClazz(), "452345234","q31234132");
}
}
class PackageClazz {
private void privilegedMethod(String invokerName,String adb) {
System.out.println("---"+invokerName+"----"+adb);
}
}
輸出結果爲:---452345234----q31234132
我們看到,利用java的反射機制,即使是private方法,也可以被調用使用.不過我到產生一個疑問--即然private方法都可以被調用,那麼封裝又有何意義?
下一章節,會詳細講解關於java的反射機制