2

我有一个核心模块,其中包含一个类:

@Autowired
private BaseDao dao;

BaseDao 接口的一些实现:

class JdbcBaseDaoImpl implements BaseDao {...}
class HibernateBaseDaoImpl implements BaseDao {...}

并且很少有模块使用核心模块中的该类(使用 maven)。但是在第一个模块中,我想JdbcBaseDaoImpl在核心模块的那个领域使用实现,在第二个模块中,使用HibernateBaseDaoImpl实现。

怎么做?换句话说,如何在核心模块中使用类

@Autowired
@Qualifier("jdbcBaseDaoImpl")
private BaseDao dao;

在第一个模块和

@Autowired
@Qualifier("hibernateBaseDaoImpl")
private BaseDao dao;

在第二个模块?

4

1 回答 1

4

注释是@Qualifier("<name>")。有关更多详细信息,请参阅内容。

顺便说一句,Java EE 等价物是@Resource(name="<name>").

如果这些模块要运行在同一个进程空间中,那么就不可能根据代码路径有条件地将不同的实现注入到核心模块中的同一个变量中。您可以改为将 BaseDao 引用推送到依赖模块中,为每个模块注入适当的引用,并将其作为引用传递给需要它的核心模块的方法。

如果这些模块要在不同的进程空间中运行,那么您可以在进程特定的 spring 配置文件中为每个模块配置适当的实现(我们这样做是为了分离生产和单元测试阶段的实现)。

于 2012-09-20T19:07:15.647 回答