DI с CDI и сторонним классом: избегайте, чтобы конструктор делал бизнес-логику, вызываемую несколько раз для каждой прокси
Я относительно новичок в EE / CDI для DI, поэтому, возможно, один из вас мог бы дать мне несколько советов по моей проблеме:
У меня есть сторонний класс, который я хотел бы добавить в другие бины. Весной просто нужно немного <bean>
декларация и готово. Используя cdi, теперь он принимает класс фабрики:
public class XProducer {
@Produces
@ApplicationScoped
public X createX(){
return new X();
}
}
К сожалению, конструктор X вызывает довольно дорогую бизнес-логику, и каждый раз, когда cdi создает прокси, он вызывается, но я не могу изменить поведение X. Это оставляет мне следующие опции, которые мне не очень нравятся:
- завернуть Х в некрасивое
Holder
-учебный класс, - создание некоторого фасада и должны разграничить методы
X
Остались ли другие варианты?
1 ответ
Это, вероятно, тот случай, когда вы хотите использовать @javax.inject.Singleton
поскольку он является сторонним разработчиком, вам не потребуется поддержка перехватчиков, а singleton не создает прокси, поэтому конструктор будет вызываться только один раз.