1

Я отношусь к новому EE/CDI для DI, поэтому, возможно, один из вас может предоставить мне несколько советов по моей проблеме:DI с CDI и сторонним классом: избегать конструктора, выполняющего бизнес-логику, называемого несколько раз для каждой конструкции прокси

У меня есть сторонний класс, который я бы хотел ввести в другие бобы. Весной просто нужно объявление <bean>, и все готово. Использование КДИ теперь занимает класс фабрики:

public class XProducer {  
    @Produces 
    @ApplicationScoped 
    public X createX(){ 
     return new X(); 
    } 
} 

Unfortunatly X`s конструктор вызывает довольно дорогой бизнес-логику и каждый раз, когда прокси-сервер, созданный КДИ это называется, но я не могу изменить поведение на Х. Это оставляет меня со следующими параметрами я не очень нравится:

  • обертывание X в какой-то уродливой Holder -класса,
  • создает некоторый фасад и должны delgate методы X

Есть Остальные варианты остались?

ответ

2

Это, вероятно, случай, когда вы хотите использовать @javax.inject.Singleton со своего третьего лица, вам не понадобится поддержка перехватчика, а singleton не генерирует прокси-сервер, поэтому конструктор будет вызываться только один раз.

+0

Хорошо, используя EJB тогда :) Я изначально отклонил '@ Singleton' из-за параллелизма с контейнером, создав узкое место, упустив его, можно отключить с помощью' @ConcurrencyManagement (BEAN) '. –

+0

Почему EJB? Если вы используете '@ javax.inject.Singleton' его из JSR-330, а не EJB. –

 Смежные вопросы

  • Нет связанных вопросов^_^