我已经开始阅读Java EE7中的Beginning,目前正在忙于CDI这一章。 我的替代课程如下所示。
@Alternative
@ThirteenDigits
public class MockGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Loggable
public String generatorNumber() {
String mock = "MOCK-" + Math.abs(new Random().nextInt());
logger.info("Generated mock : " + mock);
return mock;
}
}
我使用的其他依赖类如下
@ThirteenDigits
public class IsbnGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Loggable
public String generatorNumber() {
String isbn = "13-84356-" + Math.abs(new Random().nextInt());
logger.info("Generated ISBN : " + isbn);
return isbn;
}
}
我的beans.xml文件如下所示。
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org.2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/sml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
<alternatives>
<class>com.narotech.MockGenerator</class>
</alternatives>
<interceptors>com.narotech.LoggingInterceptor</interceptors>
</beans>
我的注射代码如下。
@Inject
@ThirteenDigits
private NumberGenerator numberGenerator;
public Book createBook(String title, Float price, String description) {
Book book = new Book(title, price, description);
book.setNumber(numberGenerator.generatorNumber());
return book;
}
现在,我不确定原因,但是当我运行JUnit测试时,我得到了#34; 13-84356-683584002&#34;而不是&#34; MOCK-84356-683584002&#34;。谁能告诉我我做错了什么。如果您需要我提供更多信息,请告诉我。
答案 0 :(得分:0)
我设法解决了这个问题。我只是在MockGenerator类中添加了@Priority注释。
答案 1 :(得分:0)
@Priority
是解决问题的一种方法,但是您也可以使用@Specializes
作为更简单的机制:
https://docs.oracle.com/javaee/6/tutorial/doc/gjsdf.html#gkhpo