gpt4 book ai didi

java - 生产者注入(inject)的注解变量

转载 作者:行者123 更新时间:2023-11-30 08:44:46 30 4
gpt4 key购买 nike

据我了解,应该可以使用生产者通过 CDI 在 Java 中注入(inject)任何类型的变量。为了对此进行测试,我创建了一个小型单元测试。

@RunWith(CdiRunner.class)
public class Test {

@Inject
@AnIntProducer
int i; // Variable to be injected

@org.junit.Test
public void test() throws Exception {
System.out.println(i);
}
}

然后我继续创建注释和制作者:

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

public class TestProducer {

@Produces
@AnIntProducer
public int i() {
return 503;
}
}

当我运行测试时,我假设它应该打印 503,但我却得到:

org.jboss.weld.exceptions.DeploymentException:
WELD-001408: Unsatisfied dependencies for type int with qualifiers @AnIntProducer
at injection point [UnbackedAnnotatedField] @Inject Test.i
at Test.i(Test.java:0)

CdiRunner怎么好像找不到producer,不知道为什么。我的设置有问题还是我误解了注入(inject)的工作原理?

最佳答案

CdiRunner 检查您的测试类的导入并基于引用的类构建一个小型部署。当您运行测试时,您定义的生产者不包含在该小型部署中。

要在测试部署中包含其他类和包,您需要将@AdditionalClasses 或@AdditionalPackages 添加到测试类。

例子:

@RunWith(CdiRunner.class)
@AdditionalClasses(TestProducer.class)
public class Test {

您还可以使用注释来声明测试部署的 beans.xml 中应包含的内容,这样您就可以通过这种方式激活备选方案、拦截器和装饰器。

关于java - 生产者注入(inject)的注解变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633210/

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