Java EE Bean внедрить в другой Bean

1

Я делаю две бобы, которые говорят 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. Я, однако, прихожу к выводу, что это может быть плохая практика/анти-шаблон. Во всяком случае, я больше не использую этот подход.

  • 0
    Как вы создаете ABean?
  • 1
    Какой сервер приложений вы используете?
Показать ещё 6 комментариев
Теги:
cdi
java-ee
javabeans

2 ответа

1
Лучший ответ

Возможно, вы забыли добавить файл 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.

  • 2
    Если это Java EE 7 (что непонятно из вопроса), beans.xml не является обязательным требованием для включения CDI.
0

вы помните, чтобы включить сеттер, чтобы можно было вводить компонент? @Inject не работает, как @EJB.

также, как и ранее указано, не пытайтесь использовать компонент до тех пор, пока не будет создан экземпляр объекта-владельца (не в конструкторе, только в методе @PostConstruct)

надеюсь, это поможет.

  • 0
    сеттеры не используются с CDI.
  • 0
    с каких пор? вы можете опустить их, только если вы используете инжектор конструктора.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню