CDI и EJB - две разные спецификации.CDI обеспечивает интеграцию, позволяющую вам использовать EJB-компоненты, как если бы они были CDI (но не наоборот!).Обратите внимание, говорите ли вы о CDI или EJB, поскольку не все аннотации применимы ко всем компонентам.Например, @Singleton
(EJB) может иметь @Startup
, тогда как @ApplicationScoped
бин из CDI не может.
Вы упоминаете "синглтон-бин".Просто чтобы рассеять путаницу, в EJB это означает @Singleton
, в CDI это означает @ApplicationScoped
bean.
При этом, на ваши вопросы:
- Will @Inject(Внедрение CDI) выполнить это?
@Inject
должно работать так же хорошо, пока вы используете его для создания некруговой зависимости между этими компонентами - например, если вы используете @Inject
в конструктореодин компонент, CDI сначала инициирует зависимость, чем этот компонент пытается использовать.Имейте в виду, что CDI инициирует что-то лениво - ничего не произойдет, пока вы на самом деле не попытаетесь использовать этот компонент.
А как насчет @EJB?
Не уверен, что вы здесь имеете в виду - @EJB
является эквивалентом EJB @Inject
в CDI.
Или мне всегда нужно добавлять @DependsOn?
Это также будет вариант, но, опять же, обратите внимание, что его можно использовать только для EJB @Singleton
бинов (что совершенно нормально, просто обозначая здесь разницу между CDI и EJB).