Я нашел этот вопрос: в чем разница между @Inject и @EJB, но я не стал мудрее. Я не делал Java EE раньше, и у меня нет опыта внедрения зависимостей, поэтому я не понимаю, что мне следует использовать?
Является ли @EJB старым способом введения? Осуществляется ли внедрение EJB-контейнера при использовании этой аннотации при использовании @Inject с использованием новой инфраструктуры CDI? В этом ли разница, и я должен использовать @Inject вместо @EJB, если это так?
источник
@EJB
работает для круговой инъекции (один синглтон-бин и другой бин нуждаются в ссылке друг на друга)? (со ссылкой на мой ответ ниже - я не уверен, правильно ли я поступаю, переключившись на@EJB
)@Inject
может внедрять любой bean-компонент, а@EJB
может только EJB- компоненты . Вы можете использовать любой из них для внедрения EJB, но я бы предпочел@Inject
везде.источник
Обновление: этот ответ может быть неправильным или устаревшим. Пожалуйста, смотрите комментарии для деталей.
Я переключился с
@Inject
на,@EJB
потому что@EJB
позволяет круговой впрыск, в то время как@Inject
рвется на него.Детали: мне нужно
@PostConstruct
было вызвать@Asynchronous
метод, но это было бы синхронно. Единственный способ сделать асинхронный вызов состоял в том, чтобы исходный вызов вызвал метод другого компонента и заставил его вызвать метод исходного компонента. Для этого каждому бину требовалась ссылка на другой - то есть круговая.@Inject
не удалось для этой задачи, в то время как@EJB
работал.источник
@Inject
их в общедоступных полях друг друга. Если это работает, тогда мой ответ неверен. Если это не сработает, мой ответ пока верен. Следующие изменения@Inject
в@EJB
(и , возможно , аннотирования классов сами? Я забыл.). Тогда циклический взаимный впрыск должен работать нормально. Вот почему я перешел с@Inject
на@EJB
. Надеюсь, это имеет смысл.Вот хорошая дискуссия по теме. Гевин Кинг рекомендует @Inject over @EJB для не удаленных EJB.
http://www.seamframework.org/107780.lace
или
https://web.archive.org/web/20140812065624/http://www.seamframework.org/107780.lace
и
источник
Также может быть полезно понять разницу в терминах идентификатора сессионного компонента при использовании @EJB и @Inject. Согласно спецификации всегда будет следующий код
true
:Использование @Inject вместо @EJB не то же самое.
см. также идентификацию сессионных компонентов без сохранения состояния для получения дополнительной информации
источник
Инъекция уже существовала в Java EE 5, например, с аннотациями @Resource, @PersistentUnit или @EJB. Но он был ограничен определенными ресурсами (источником данных, EJB ...) и определенными компонентами (сервлетами, EJB, компонентом поддержки JSF ...). Благодаря CDI вы можете вводить практически все, что угодно, благодаря аннотации @Inject.
источник