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

标签 java dependency-injection cdi

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

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

@ApplicationScoped
public class MyApplication  {


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

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

}

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

我不清楚如何使用 CDI 为我创建这个。我的依赖项有自己的依赖项,我希望 CDI 为我创建这些依赖项。

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

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

最佳答案

因为您想要的是 Dependency 的新实例,每次调用该方法时,我认为您需要的是 Provider 的实例即 ( javax.inject.Provider<T> ) 注入(inject)到你的类中/bean .

将提供程序注入(inject)到您当前的类中:

@Inject Provider<DesiredBean> provider;

然后,在你的方法中 doStuff()获取新实例:

DesiredBean desiredBean = provider.get();

这应该能让你继续前进。

关于Java EE CDI - 每次调用方法时获取类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54372167/

相关文章:

java - 服务器中未发现类定义错误

java - 不能在使用接口(interface)的类中使用 EJB

android - Dagger 在模块上找不到可注入(inject)成员

java - 在java中使用for循环打印星号

java - 为什么会发生 Full GC Continuous?

android - Dagger 2 如何让 Android 上的测试更容易?

asp.net-mvc-3 - Ninject MVC 3 - 将依赖项注入(inject)模型和 Controller

jsf - 注入(inject) vs ManagedProperty

java - Singleton EJB 在 EJB 容器外部的行为应该相同,但事实并非如此

jakarta-ee - 不使用 beans.xml 注册 CDI 拦截器