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 的行为。这给我留下了以下我不太喜欢的选项:
- 用一些丑陋的东西包裹 X
Holder
-class,
- 创建一些外观并且必须将方法委托给
X
还有其他选择吗?
这可能是你想使用的情况 @javax.inject.Singleton
因为它是第三方的,你不需要拦截器支持,而且单例不生成代理,所以构造函数只会被调用一次.
我是 DI 的 EE/CDI 的新手,所以也许你们中的一个可以为我的问题提供一些提示:
我有一个第 3 方 class,我想将其注入其他 bean。在 spring 中只需要一些 <bean>
声明就可以了。使用 cdi 现在需要一个工厂 class:
public class XProducer {
@Produces
@ApplicationScoped
public X createX(){
return new X();
}
}
不幸的是,X 的构造函数调用了相当昂贵的业务逻辑,每次 cdi 创建代理时都会调用它,但我无法更改 X 的行为。这给我留下了以下我不太喜欢的选项:
- 用一些丑陋的东西包裹 X
Holder
-class, - 创建一些外观并且必须将方法委托给
X
还有其他选择吗?
这可能是你想使用的情况 @javax.inject.Singleton
因为它是第三方的,你不需要拦截器支持,而且单例不生成代理,所以构造函数只会被调用一次.