В этот вопрос будут находить ссылки my blog post Я написал год назад.Dynamic CDI Injection во время выполнения
Хотя я использую специальный идентификатор CDI для своего DAO, мне хотелось знать, есть ли подход к динамическому внедрению DAO.
Причина, по которой я спрашиваю, заключается в следующем. На данный момент у меня есть 3 квалификатора CDI, @HibernateDAO
(для типа Hibernate Session injection DAO), @JPADAO
(для JPA конкретных DAO) и @JDBCDAO
(для чисто JDBCDAO). Это требует, чтобы я должен был указать его для каждой конкретной реализации и после инъекции.
@Inject @JPADAO
private CustomerDAO customerDAO;
Есть ли лучший подход, который позволит мне добавлять различные ароматы DAO без необходимости изменять код, скомпилировать и развернуть?
Я хочу представить MongoDB в следующем выпуске моего проекта, и я думаю, если я могу отойти от @MongoDBDAO
и инъекции, как,
@Inject @MongoDBDAO
private CustomerDAO customerDAO;
Я знаю, что CDI Injection может позволить по умолчанию и альтернативные инъекции. Я хочу иметь возможность того, что другие разработчики могут использовать переопределение реализации по умолчанию с другим подклассом и иметь возможность вводить его без изменения существующего кода службы.
Что-то этого эффекта:
@Inject @DAO
private CustomerDAO customerDAO;
Где @DAO
может быть любой DAO любой вкус (даже с 3-й партии) и как-то карта @DAO
сначала найти альтернативу, если он не найден, используется реализация по умолчанию ,
Спасибо.
Oh! Это решение должно быть строго работать с последним (как текущее время написания) Спецификация Java EE CDI. Используемая технология:
- RedHat JBoss Wildfly 8.2.0 Final (полностью совместимый с Java EE 7).
- Java 8.
- API Java EE 7 API.
Я не буду использовать решение, использующее Spring Framework, поскольку оно может помочь другим разработчикам Spring.
Вы проверили это? http://docs.oracle.com/javaee/7/tutorial/cdi-adv002.htm#GJSDF – assylias
Gee, спасибо! Как я пропустил это? Позвольте мне заглянуть в нее быстро. :-) –