DI with CDI and 3rd party class: 避免构造函数为每个代理构造执行多次调用的业务逻辑

DI with CDI and 3rd party class: avoid constructor doing business logic called multiple times for each proxy construction

我是 DI 的 EE/CDI 的新手,所以也许你们中的一个可以为我的问题提供一些提示:

我有一个第 3 方 class,我想将其注入其他 bean。在 spring 中只需要一些 <bean> 声明就可以了。使用 cdi 现在需要一个工厂 class:

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

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

还有其他选择吗?

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