Java EE CDI - 每次调用方法时获取 class 的新实例
Java EE CDI - obtaining a new instance of a class each time a method is called
我正在寻求对 Java J2EE 应用程序进行一些重构,但我不清楚如何让 CDI 提供所需的依赖项:
当前设置相当simple/easy理解:
@ApplicationScoped
public class MyApplication {
@Inject
@Named("Default")
private Dependency dependency;
public void dostuff(){
dependency.process();
}
}
我现在每次调用 dostuff
时都需要 dependency
的新实例。
我不清楚如何使用 CDI 为我创建这个。我的依赖项有自己的依赖项,我希望 CDI 为我创建这些依赖项。
我希望我需要添加一个间接层。
附加上下文:
class 是轮询待完成工作的流程的一部分,托管在 Wildfly 中。
我们没有在项目中使用 Spring。
除了依赖注入之外,您是否还有其他需要使用 CDI 的特定原因?
如果没有,我建议让 doStuff() 将 Dependency 对象作为参数:
public void doStuff(Dependency dependency) {
dependency.process();
}
然后,当您调用该方法时,为其提供一个新的 Dependency 实例:
myApplication.doStuff(new Dependency());
这样一来,与在构造函数或字段中声明新实例相比,您的 class 耦合度仍然较低。
因为你想要的是 Dependency
的新实例,每次调用方法时,我认为你需要的是 Provider
的实例,即 (javax.inject.Provider<T>
) 注入你的 class/bean
.
将提供程序注入您当前的 class:
@Inject Provider<DesiredBean> provider;
然后,在你的方法中doStuff()
获取新的实例:
DesiredBean desiredBean = provider.get();
这应该让你继续。
我正在寻求对 Java J2EE 应用程序进行一些重构,但我不清楚如何让 CDI 提供所需的依赖项:
当前设置相当simple/easy理解:
@ApplicationScoped
public class MyApplication {
@Inject
@Named("Default")
private Dependency dependency;
public void dostuff(){
dependency.process();
}
}
我现在每次调用 dostuff
时都需要 dependency
的新实例。
我不清楚如何使用 CDI 为我创建这个。我的依赖项有自己的依赖项,我希望 CDI 为我创建这些依赖项。
我希望我需要添加一个间接层。
附加上下文: class 是轮询待完成工作的流程的一部分,托管在 Wildfly 中。 我们没有在项目中使用 Spring。
除了依赖注入之外,您是否还有其他需要使用 CDI 的特定原因?
如果没有,我建议让 doStuff() 将 Dependency 对象作为参数:
public void doStuff(Dependency dependency) {
dependency.process();
}
然后,当您调用该方法时,为其提供一个新的 Dependency 实例:
myApplication.doStuff(new Dependency());
这样一来,与在构造函数或字段中声明新实例相比,您的 class 耦合度仍然较低。
因为你想要的是 Dependency
的新实例,每次调用方法时,我认为你需要的是 Provider
的实例,即 (javax.inject.Provider<T>
) 注入你的 class/bean
.
将提供程序注入您当前的 class:
@Inject Provider<DesiredBean> provider;
然后,在你的方法中doStuff()
获取新的实例:
DesiredBean desiredBean = provider.get();
这应该让你继续。