2016-09-13 3 views
0

Я начал с книги Начиная с Java EE7, в настоящее время занятой главой CDI. Мой альтернативный класс выглядит ниже.Использование @alternatives в 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 тест, я получаю «13-84356-683584002», а не что-то вроде «ПРОБНОЙ-84356-683584002». Может ли кто-нибудь сказать мне, что я делаю неправильно. Дайте мне знать, если вам нужна дополнительная информация от меня.

+0

Как вы инициализируете cdi в своем тесте? –

+2

Просто попробуйте использовать @Priority, чтобы активировать вашу альтернативу. Если он работает, проблема возникает из beans.xml, который вы предоставляете для своего теста, в противном случае у вас есть где-то в коде .... –

+0

Спасибо. аннотация @Priority работала – R3LL1K

ответ

0

Мне удалось исправить эту проблему. Я просто добавил аннотацию @Priority к классу MockGenerator.