我试图理解hibernate是如何工作的,因为如何将@Entity放在一个类上使它成为一个持久的类?即
@Entity
class A{
private int b;
public int getB(){
return b;
}
public void setB(int b){
this.b = b;
}
}
behaves like below written class at runtime
class A{
private int b;
public int getB(){
return (SQL code to fetch b from DB)
}
public void setB(int b){
(SQL code to set b in DB)(b);
}
}
如果我们说它正在使用反射,那么它是如何更改方法内的代码的呢?
1 回答
Hibernate代理/运行时编织你的类 . 当其他类调用您的类的方法时,它不会直接调用它,但它会调用代理 . 然后,此代理包含涉及持久性上下文操作的逻辑 .
如果你想深入研究这个主题(不一定是hibernate使用的那些),请查看cglib或aspectj等库 .