Я делаю две бобы, которые говорят ABean и BBean. Я хочу ввести BBean в ABean, но это вызывает ошибки с нулевым указателем, вероятно, потому что компонент еще не создан. Как я могу впрыскивать бобы в бобы как таковые:
@Singleton
public class ABean {
@Inject
BBean bean;
....
}
Я использую java ee 7 с сервером wildfly. Оба компонента являются одноточечными, поэтому BBean также объявляется как:
public class BBean {
@PostConstruct
public void startup() {
..
}
..
}
Из-за зависимости я могу создать оба компонента, поскольку у меня есть необходимая папка META-INF и файл beans.xml. Я, однако, прихожу к выводу, что это может быть плохая практика/анти-шаблон. Во всяком случае, я больше не использую этот подход.
Возможно, вы забыли добавить файл beans.xml, чтобы включить CDI в вашем приложении. Это то, что говорит Java EE 6 Tutorial: http://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html:
Приложение, использующее CDI, должно иметь файл с именем beans.xml. Файл может быть полностью пустым (он имеет контент только в определенных ограниченных ситуациях), но он должен присутствовать. Для веб-приложения файл beans.xml должен находиться в каталоге WEB-INF. Для модулей EJB или JAR файлов файл beans.xml должен находиться в каталоге META-INF.
beans.xml
не является обязательным требованием для включения CDI.
вы помните, чтобы включить сеттер, чтобы можно было вводить компонент? @Inject не работает, как @EJB.
также, как и ранее указано, не пытайтесь использовать компонент до тех пор, пока не будет создан экземпляр объекта-владельца (не в конструкторе, только в методе @PostConstruct)
надеюсь, это поможет.