Java 如何通过cglib增强对象
我正在使用spring和cglib,我有这些类:Java 如何通过cglib增强对象,java,spring,jakarta-ee,cglib,Java,Spring,Jakarta Ee,Cglib,我正在使用spring和cglib,我有这些类: public class A { . . private Souscripteur souscripteur; private List<B> contrat; // getter and setter } public class B { . . private Souscripteur souscripteur; //getter and setter } 当我检查代码时,
public class A {
.
.
private Souscripteur souscripteur;
private List<B> contrat;
// getter and setter
}
public class B {
.
.
private Souscripteur souscripteur;
//getter and setter
}
当我检查代码时,增强的对象是PersonnePhysique,但是如果(b.getSouscriteur()instanceof PersonnePhysique)返回false
我的班级人员体质是这样的:
public class PersonnePhysique extends Souscriteur {
//
}
Hibernate根据声明的预期类型(
Souscripteur
)生成代理,因此您将得到一个延迟加载的代理,扩展Souscripteur
——因此,在instanceof
意义上没有PersonnePhysique
您必须避免在这里测试具体类型,而是在实体上调用多态方法(顺便说一句,这更面向对象)
如果您正在调用方法doSomething()
,那么您的用例将变成:
b.getSouscriteur().doSomething()
通过以下实现:
public class Souscripteur {
public void doSomething() {
// do nothing
}
}
public class PersonnePhysique extends Souscripteur {
@Override
public void doSomething() {
// do something here
}
}
你的问题到底是什么?是否正在实例化PersonPhysique对象(看起来不是)?为什么您期望不同的行为?增强的对象是PersonPhysique,但是如果(b.getSouscriteur()PersonPhysique的instanceof)返回false,请注意输入错误:
Souscri[p]teur
。。。
public class Souscripteur {
public void doSomething() {
// do nothing
}
}
public class PersonnePhysique extends Souscripteur {
@Override
public void doSomething() {
// do something here
}
}