Java EE CDI-每次调用方法时获取类的新实例

时间:2019-01-25 20:11:40

标签: java dependency-injection cdi

我希望对Java J2EE应用程序进行一些重构,但是我不清楚如何让CDI提供所需的依赖项:

当前设置非常简单/易于理解:

@ApplicationScoped
public class MyApplication  {


    @Inject
    @Named("Default")
    private Dependency dependency;

    public void dostuff(){
        dependency.process();
    }

}

现在,每次调用dependency时,我都需要一个dostuff的新实例。

我不清楚如何使用CDI为我创建它。我的依存关系有自己的依存关系,我希望CDI为我创建。

我希望我需要添加一个间接层。

其他上下文: 此类是轮询要完成的工作的过程的一部分,并托管在Wildfly中。 我们不在项目中使用Spring。

2 个答案:

答案 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();
}

那样,与在构造函数或字段中声明新实例相比,您仍然可以使类保持较少的耦合。