Создавать только объекты, используемые в Java EE

Учитывая EJB ниже, будет ли контейнер достаточно интеллектуальным, чтобы создавать только используемый объект?

@Stateless
public class MyBean {

   @EJB
   Clazz1 obj1;

   @EJB
   Clazz2 obj2;

   public void run(int x) {

     if (x == 1)
         obj1.printCode();
     else
         obj2.printCode();

   }
 }

1 ответ

Контейнеру придется разрешить все зависимости компонента (сначала создать их экземпляр) перед созданием самого компонента.

Теперь то, что действительно происходит, когда вы вызываете метод, может отличаться... Вы используете здесь исключительно EJB, в вашем коде нет ни капельки CDI!@EJB является аннотацией EJB для внедрения зависимостей и @Stateless является аннотацией EJB для области видимости

Если бы вы использовали CDI и использовали Weld в качестве его реализации (все EE-серверы, кроме tomee), то вы получите ленивый экземпляр для любого обычного bean-объекта bean-объекта. Это будет означать, что вы фактически внедрите "пустой" прокси-объект, и он будет создан только при первом доступе.

Теперь, что я имею в виду под инъекцией CDI - используйте @Inject вместо @EJB, Вы все еще можете иметь свой боб @StatelessCDI, если он работает в вашем приложении, то оборачивает его своей областью действия. Я также сказал, что вам нужны нормальные bean-компоненты с бобами - это означает, что bean-компоненты используют прокси. Это почти все области применения CDI, кроме @Dependent, Поэтому это @RequestScoped, @SessionScoped, @ApplicationScoped, Зависимости вашего bean-компонента должны иметь эти возможности для достижения ленивого init.

Другие вопросы по тегам