生产者注入的注解变量
Annotate variable to be injected by producer
据我了解,应该可以使用生产者通过 CDI 在 Java 中注入任何类型的变量。为了对此进行测试,我创建了一个小型单元测试。
@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,不知道为什么。我的设置有问题还是我误解了注入的工作原理?
CdiRunner 检查您的测试的导入 class 并根据引用的 classes 构建一个小型部署。当您 运行 您定义的生产者测试未包含在该小型部署中时。
要在您的测试部署中包含额外的 classes 和包,您需要将 @AdditionalClasses 或 @AdditionalPackages 添加到您的测试 class.
示例:
@RunWith(CdiRunner.class)
@AdditionalClasses(TestProducer.class)
public class Test {
您还可以使用注释来声明测试部署中应包含的内容 beans.xml,这样您就可以通过这种方式激活备选方案、拦截器和装饰器。
据我了解,应该可以使用生产者通过 CDI 在 Java 中注入任何类型的变量。为了对此进行测试,我创建了一个小型单元测试。
@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,不知道为什么。我的设置有问题还是我误解了注入的工作原理?
CdiRunner 检查您的测试的导入 class 并根据引用的 classes 构建一个小型部署。当您 运行 您定义的生产者测试未包含在该小型部署中时。
要在您的测试部署中包含额外的 classes 和包,您需要将 @AdditionalClasses 或 @AdditionalPackages 添加到您的测试 class.
示例:
@RunWith(CdiRunner.class)
@AdditionalClasses(TestProducer.class)
public class Test {
您还可以使用注释来声明测试部署中应包含的内容 beans.xml,这样您就可以通过这种方式激活备选方案、拦截器和装饰器。