Java 如何通过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 } 当我检查代码时,

我正在使用spring和cglib,我有这些类:

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
    }
}