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();

这应该让你继续。