[英]Autowiring to different beans
我有一个核心模块,其中包含一个类:
@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;
在第二个模块?
注释是@Qualifier("<name>")
。 有关详细信息,请参阅此
顺便说一下,Java EE相当于@Resource(name="<name>")
。
如果这些模块将在相同的进程空间中运行,则不可能基于代码路径有条件地将不同的实现注入到核心模块中的相同变量中。 您可以将BaseDao引用推送到依赖模块,为每个模块注入适当的模块,并将其作为对需要它的核心模块方法的引用传递。
如果这些模块将在不同的进程空间中运行,那么您可以在特定于进程的spring配置文件中为每个模块配置适当的实现(我们这样做是为了分离生产和单元测试阶段的实现)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.