Контейнеру придется разрешить все зависимости компонента (сначала создать их экземпляр) перед созданием самого компонента.
Теперь то, что действительно происходит при вызове метода, может отличаться ... Вы используете исключительно EJBздесь, в вашем коде нет ни капли CDI! @EJB
- это аннотация EJB для внедрения зависимостей, а @Stateless
- это аннотация EJB для "области действия".
Если бы вы использовали CDI и использовали Weld в качестве его реализации (все EE-серверы, кроме tomee), то вы получите ленивый экземпляр для любого обычного bean-объекта bean-объекта.Это будет означать, что вы фактически внедрите «пустой» прокси-объект, и он будет создан только при первом доступе.
Теперь, что я имею в виду под инъекцией CDI - используйте @Inject
вместо @EJB
.Вы по-прежнему можете иметь свой bean @Stateless
, CDI, если он работает в вашем приложении, то оборачивает его своей собственной областью действия.Я также сказал, что вам нужны нормальные bean-компоненты с бобами - это означает, что бины используют проксиЭто почти все области применения CDI, кроме @Dependent
.Поэтому это @RequestScoped
, @SessionScoped
, @ApplicationScoped
.Зависимости вашего bean-компонента должны иметь эти области для достижения ленивого init.