首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过cglib增强对象

如何通过cglib增强对象
EN

Stack Overflow用户
提问于 2015-01-05 21:42:24
回答 1查看 852关注 0票数 0

我使用的是spring和cglib,我有这些类:

代码语言:javascript
复制
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。

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

代码语言:javascript
复制
if(b.getSouscriteur() instanceof PersonnePhysique) {
//do something
} else {
//do nothing
}

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

我的类PersonnePhysique是这样的:

代码语言:javascript
复制
public class PersonnePhysique extends Souscriteur {
//
}
EN

回答 1

Stack Overflow用户

发布于 2015-01-05 22:37:49

Hibernate基于声明的预期类型(Souscripteur)生成代理,因此您将获得一个扩展Souscripteur的延迟加载代理-因此,没有instanceof意义上的PersonnePhysique

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

如果您正在调用一个方法doSomething(),那么您的用例将变成:

代码语言:javascript
复制
b.getSouscriteur().doSomething()

使用以下实现:

代码语言:javascript
复制
public class Souscripteur {
    public void doSomething() {
        // do nothing
    }
}

public class PersonnePhysique extends Souscripteur {
    @Override
    public void doSomething() {
        // do something here
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27780800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档