Я отношусь к новому EE/CDI для DI, поэтому, возможно, один из вас может предоставить мне несколько советов по моей проблеме:DI с CDI и сторонним классом: избегать конструктора, выполняющего бизнес-логику, называемого несколько раз для каждой конструкции прокси
У меня есть сторонний класс, который я бы хотел ввести в другие бобы. Весной просто нужно объявление <bean>
, и все готово. Использование КДИ теперь занимает класс фабрики:
public class XProducer {
@Produces
@ApplicationScoped
public X createX(){
return new X();
}
}
Unfortunatly X`s конструктор вызывает довольно дорогой бизнес-логику и каждый раз, когда прокси-сервер, созданный КДИ это называется, но я не могу изменить поведение на Х. Это оставляет меня со следующими параметрами я не очень нравится:
- обертывание X в какой-то уродливой
Holder
-класса, - создает некоторый фасад и должны delgate методы
X
Есть Остальные варианты остались?
Хорошо, используя EJB тогда :) Я изначально отклонил '@ Singleton' из-за параллелизма с контейнером, создав узкое место, упустив его, можно отключить с помощью' @ConcurrencyManagement (BEAN) '. –
Почему EJB? Если вы используете '@ javax.inject.Singleton' его из JSR-330, а не EJB. –