当前位置: 首页 > 知识库问答 >
问题:

基于CDI构造函数的@Resource注入

饶元章
2023-03-14
class MyClass {

  @Resource
  private ManagedExecutorService executorService;

  @Inject
  private MyService myservice;

}

我想把它转换成这样的东西:

class MyClass {

  private final ManagedExecutorService executorService;
  private final MyService myservice;

  @Inject
  MyClass(ManagedExecutorService executorService, MyService myService) 
  {
    this.executorService = executorService;
    this.myService = myService;
  }

}

这将使类不可变并且更容易进行单元测试。问题是,由于executorService需要通过@Resource注释获得,它似乎不能通过构造函数注入。

共有1个答案

弘焕
2023-03-14

下面是我最终要做的--我创建了一个producer类来管理资源对象:

public class ExecutorServiceProducer {

    @Resource
    private ManagedExecutorService managedExecutorService;

    @Produces
    @Managed
    public ExecutorService createManagedExecutorService() {
        return managedExecutorService;
    }

}

我创建了这个自定义注释:

@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface Managed {
}

然后我可以对我的类进行如下注释:

class MyClass {

  private final ExecutorService executorService;
  private final MyService myservice;

  @Inject
  MyClass(@Managed ExecutorService executorService, MyService myService) 
  {
    this.executorService = executorService;
    this.myService = myService;
  }

}
 类似资料:
  • 当容器调用具有许多参数的类构造函数时,完成基于构造函数的DI,每个参数表示对另一个类的依赖。 例子 (Example) 以下示例显示了一个类TextEditor ,它只能通过构造函数注入进行依赖注入。 让我们有一个可用的Eclipse IDE,并按照以下步骤创建一个Spring应用程序 - 脚步 描述 1 创建一个名为SpringExample的项目,并在创建的项目中的src文件夹下创建一个包co

  • 在尝试向CDI bean(ApplicationScoped)的构造函数中注入参数时,我遇到了以下问题: 但是,我在类上确实有一个可注入的构造函数: 有什么想法这里出了什么问题吗?

  • 有一个简单的Mongo DB生产者连接到Mongo数据库 我的src/main/resources/meta-inf中的一个资源文件 WeldContext和WeldJUnit4Runner来自这里-http://memorynotfound.com/java-se-unit-testing-cdi-junit-jboss-weld-se/

  • 我正在学习Spring框架(没有Spring Boot,为了了解它在头套下是如何工作的)。 这是我的DAO类: 这是我的ConnectionXML类: 它实现此接口: 嵌套异常为org.SpringFramework.Beans.BeanInstantiationException:无法实例化[com.SpringLearning.XMLBasedDAO]:未找到默认构造函数;嵌套的异常是java

  • 我使用Spring Boot开发了REST服务。在其中一个REST控制器中,我有一个基于字段的依赖注入,我想将其更改为基于构造函数的依赖注入。我的依赖注入设置目前如下所示: 使用此设置,一切正常。我想将ParameterDateService更改为基于构造函数,我尝试了以下方法: 更改为基于构造函数的依赖注入后,当我尝试像这样注入依赖时,我会得到一个参数数据ervice.post参数日期(参数日期

  • 我想在构造函数中使用Request类,这是我想运行服务器时它给我的错误: 无法自动连接服务"AppBundle\Controller\DetectServiceDetailController":方法"__construct()"引用类"Symfony\Component\HttpFoundation\Request"的参数"$ask",但不存在这样的服务。它不能自动注册,因为它来自不同的根命名空