Контейнера Glassfish 4,1CDI не будет работать с неявной областью @Dependent, неудовлетворенными точками впрыска компиляции ошибки времени
Я имею очень странный вопрос с КДИ прямо сейчас. Если я не комментирую свои службы NumberGenerator
@Dependent
, то при запуске приложения я получаю неудовлетворенную ошибку точки вставки. Но если я явно аннотирую свои NumberGenerator
реализации, тогда все будет работать. Одним словом, если я хочу использовать инъекцию зависимости с @Dependent
, которая является областью по умолчанию, я должен указать ее явно.
public interface NumberGenerator {
String generateNumber();
}
Первая реализация NumberGenerator
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
@ThirteenDigits
@Dependent
public class IsbnGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Override
public String generateNumber() {
String isbn = "13-84356-" + Math.abs(new Random().nextInt());
logger.log(Level.INFO, "Generated ISBN : {0}", isbn);
return isbn;
}
}
Вторая реализация NumberGenerator
import java.util.Random;
import java.util.logging.Logger;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
@EightDigits
@Dependent
public class IssnGenerator implements NumberGenerator {
@Inject
private Logger logger;
@Override
public String generateNumber() {
String issn = "8-" + Math.abs(new Random().nextInt());
logger.info("Generated ISSN : " + issn);
return issn;
}
}
Это где NumberGenerator
будет закачиваться
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.interceptor.Interceptors;
@Dependent
public class BookService {
@Inject
@EightDigits
private NumberGenerator numberGenerator;
public Book createBook(String title, float price, String description) {
Book book = new Book(title, price, description);
book.setNumber(numberGenerator.generateNumber());
return book;
}
}
Наконец, BookService
вводится в этот управляемый компонент JSF для создания экземпляра Book
.
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@Dependent /* if I leave this out, then this bean will not display
the book instance properties on the JSF page, I just see
a blank screen, but when I add this @Dependent annotation
the JSF page displays the dummy content below.
*/
public class MyBean {
@Inject
private BookService bookService;
public Book getBook() {
return bookService.createBook("Dummy Title", 21.05f, "Dummy Description");
}
}
Как вы можете видеть, что я должен использовать @Dependent
для области по умолчанию каждый раз, когда я хочу DI. Прямо сейчас я ввожу IssnGenerator
квалификатором @EightDigits
в класс BookService
, и если я удалю @Dependent
из IssnGenerator
, я получаю эту ошибку компиляции.
Unsatisfied dependencies for type NumberGenerator with qualifiers @EightDigits at injection point [BackedAnnotatedField] @Inject @EightDigits private BookService.numberGenerator
Благодарим за любые предложения.
Никто не хочет помогать вообще? :( – Dummy