我希望对Java J2EE应用程序进行一些重构,但是我不清楚如何让CDI提供所需的依赖项:
当前设置非常简单/易于理解:
@ApplicationScoped
public class MyApplication {
@Inject
@Named("Default")
private Dependency dependency;
public void dostuff(){
dependency.process();
}
}
现在,每次调用dependency
时,我都需要一个dostuff
的新实例。
我不清楚如何使用CDI为我创建它。我的依存关系有自己的依存关系,我希望CDI为我创建。
我希望我需要添加一个间接层。
其他上下文: 此类是轮询要完成的工作的过程的一部分,并托管在Wildfly中。 我们不在项目中使用Spring。
答案 0 :(得分:1)
由于您希望拥有一个<p >text</p>
的新实例,因此每次调用该方法时,我认为您需要的是一个Dependency
实例,它被注入(Provider
)在您的班级/ javax.inject.Provider<T>
中。
将提供程序注入您当前的班级:
bean
然后,在您的方法@Inject Provider<DesiredBean> provider;
中获取新实例:
doStuff()
这应该可以帮助您。
答案 1 :(得分:0)
除了依赖注入之外,还有其他特定原因需要使用CDI吗?
如果没有,我建议让doStuff()以Dependency对象作为参数:
def create() {
respond new User()
}
然后,在调用该方法时,为它提供一个新的Dependency实例:
public void doStuff(Dependency dependency) {
dependency.process();
}
那样,与在构造函数或字段中声明新实例相比,您仍然可以使类保持较少的耦合。