Jakarta ee 使用CDI和第三方类的DI:避免构造函数为每个代理构造多次调用业务逻辑
我对DI的EE/CDI比较陌生,所以也许你们中的一位可以为我的问题提供一些提示: 我有一个第三方类,我想把它注入到其他bean中。在春天,只需要一些Jakarta ee 使用CDI和第三方类的DI:避免构造函数为每个代理构造多次调用业务逻辑,jakarta-ee,dependency-injection,constructor,cdi,application-scope,Jakarta Ee,Dependency Injection,Constructor,Cdi,Application Scope,我对DI的EE/CDI比较陌生,所以也许你们中的一位可以为我的问题提供一些提示: 我有一个第三方类,我想把它注入到其他bean中。在春天,只需要一些声明就可以了。使用cdi,现在需要一个工厂类: public class XProducer { @Produces @ApplicationScoped public X createX(){ return new X(); } } 令人遗憾的是,X的构造函数调用相当昂贵的业务逻辑,每次由c
声明就可以了。使用cdi,现在需要一个工厂类:
public class XProducer {
@Produces
@ApplicationScoped
public X createX(){
return new X();
}
}
令人遗憾的是,X的构造函数调用相当昂贵的业务逻辑,每次由cdi创建代理时,都会调用它,但我无法更改X的行为。这就给我留下了以下我不太喜欢的选项:
- 在一些丑陋的
-类中包装X支架
- 创建一些facade并且必须将方法delgate到
X
还有其他选项吗?这可能是一种您希望使用
@javax.inject.Singleton的情况,因为它是第三方,您不需要拦截器支持,而且Singleton不生成代理,所以构造函数只会被调用一次。好的,然后使用EJB:)我最初拒绝了@Singleton
,因为容器管理的并发创建了一个瓶颈,忽略了它可以被@ConcurrencyManagement(BEAN)
禁用。为什么要使用EJB?如果您使用@javax.inject.Singleton
它来自JSR-330,而不是EJB。