1

我relativly新EE/CDI为DI所以也许你们中的一个可以为我提供一些提示我的问题:DI与CDI和第三方类:避免构造经商逻辑多次调用每个代理建设

我有第三方课,我想注入其他豆类。在春天只需要一些<bean>声明,它完成了。使用CDI现在需要一个工厂类:

public class XProducer {  
    @Produces 
    @ApplicationScoped 
    public X createX(){ 
     return new X(); 
    } 
} 

不幸的是X`s构造函数调用相当昂贵的商业逻辑,每一个代理通过CDI创建这就是所谓的,但我不能改变X的行为时。这给我留下了以下选项,我真的不喜欢:

  • 包装X中的一些丑陋的Holder -class,
  • 创造一些门面和有delgate方法X

是否有任何其他选择离开?

回答

2

这可能是您想要使用@javax.inject.Singleton作为第三方的情况,您不需要拦截器支持,单例不会生成代理,因此构造函数只会被调用一次。

+0

好的,使用EJB然后:)我最初拒绝'@ Singleton'由于容器管理的并发造成瓶颈具有忽略它可以用'@ConcurrencyManagement(BEAN)'被禁用。 –

+0

为什么EJB?如果你使用'@ javax.inject.Singleton'其从JSR-330,而不是EJB。 –