1

我对 DI 的 EE / CDI 比较陌生,所以也许你们中的一个可以为我的问题提供一些提示:

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

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

不幸的是,X 的构造函数调用了相当昂贵的业务逻辑,每次 cdi 创建代理时都会调用它,但我无法更改 X 的行为。这给我留下了以下我不太喜欢的选项:

  • 将 X 包装在一些丑陋的Holder类中,
  • 创建一些门面,并且必须将方法委托给X

还有其他选择吗?

4

1 回答 1

2

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

于 2016-04-21T11:39:23.480 回答