【发布时间】:2015-06-27 01:23:22
【问题描述】:
这个问题来自我一年前写的my blog post引用。
虽然我为我的 DAO 使用自定义 CDI 限定符,但我想知道是否有一种方法可以动态注入 DAO。
我问的原因如下。现在我有 3 个 CDI 限定符,@HibernateDAO(用于 Hibernate Session 注入类型 DAO)、@JPADAO(用于 JPA 特定的 DAO)和@JDBCDAO(用于纯 JDBCDAO)。这要求我必须在每个具体实现和注入时都指定它。
@Inject @JPADAO
private CustomerDAO customerDAO;
有没有更好的方法可以让我添加各种风格的 DAO,而无需更改代码、编译和部署?
我想在我的项目的下一个版本中引入 MongoDB,我在想我是否可以摆脱 @MongoDBDAO 和注入之类的,
@Inject @MongoDBDAO
private CustomerDAO customerDAO;
我知道 CDI 注入可以允许默认注入和替代注入。我希望其他开发人员可以使用覆盖另一个子类的默认实现,并且能够在不更改现有服务代码的情况下注入它。
这种效果的东西:
@Inject @DAO
private CustomerDAO customerDAO;
@DAO 可以是任何任何风格的 DAO(甚至来自第 3 方),并以某种方式映射 @DAO 以首先找到替代方案,如果未找到,则使用默认实现。
谢谢。
哦!此解决方案必须严格使用最新的(截至撰写本文时)Java EE CDI 规范。使用的技术:
- RedHat JBoss Wildfly 8.2.0 Final(完全符合 Java EE 7)。
- Java 8.
- Java EE 7 API。
我不会对使用 Spring Framework 的解决方案投反对票,因为它可以帮助其他 Spring 开发人员。
【问题讨论】:
标签: java jakarta-ee dependency-injection cdi