我如何通过cglib获得增强的对象

时间:2015-01-05 13:42:24

标签: java spring java-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
}

并且A类和B类具有相同的souscripteur,所以当我加载A类并尝试加载B类时,我得到了B类EnhancerByCGLIB的Souscripteur。

为此,当我尝试这样做时:

if(b.getSouscriteur() instanceof PersonnePhysique) {
//do something
} else {
//do nothing
}

当我检查代码时,增强的对象是PersonnePhysique,但是如果(b.getSouscriteur()instanceof PersonnePhysique)返回false

我的班级PersonnePhysique是这样的:

public class PersonnePhysique extends Souscriteur {
//
}

1 个答案:

答案 0 :(得分:0)

Hibernate根据声明的预期类型(Souscripteur)生成代理,因此您将获得延迟Souscripteur的延迟加载代理 - 因此PersonnePhysique中没有instanceof 1}}感觉。

你必须避免在这里测试具体类型,而是在你的实体上调用多态方法(顺便说一句,这是更面向对象的)。

如果您调用方法doSomething(),您的用例将变为:

b.getSouscriteur().doSomething()

具有以下实现:

public class Souscripteur {
    public void doSomething() {
        // do nothing
    }
}

public class PersonnePhysique extends Souscripteur {
    @Override
    public void doSomething() {
        // do something here
    }
}