gpt4 book ai didi

java - 使用 @Resource 基于 CDI 构造函数的注入(inject)

转载 作者:行者123 更新时间:2023-11-30 02:30:52 24 4
gpt4 key购买 nike

是否可以对 @Resource 类型的实例进行基于构造函数的 CDI 注入(inject)?

我有以下类(class):

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 注解获取,因此它似乎无法通过构造函数注入(inject)。

最佳答案

这就是我最终所做的 - 我创建了一个生产者类来管理资源对象:

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;
}

}

这样我就可以通过提供我自己的 ExecutorService(非容器管理)实例来对类进行单元测试。

关于java - 使用 @Resource 基于 CDI 构造函数的注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com