我有一个核心模块,其中包含一个类:
@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;
在第二个模块中?
答案 0 :(得分:4)
注释为@Qualifier("<name>")
。有关详细信息,请参阅this。
@Resource(name="<name>")
。
如果这些模块将在相同的进程空间中运行,则无法根据代码路径有条件地将不同的实现注入到核心模块中的相同变量中。您可以将BaseDao引用推送到依赖模块中,为每个模块注入适当的模块,并将其作为对核心模块所需方法的引用传递。
如果这些模块将在不同的进程空间中运行,那么您可以在特定于进程的spring配置文件中为每个模块配置适当的实现(我们这样做是为了分离生产和单元测试阶段的实现)。 / p>