我正在处理数据层,我希望根据maven依赖关系激活一个实现到另一个实现。例如,我将UserDAO作为接口,第一个实现是基于SQL的实现SQLUserDAO
,这是我的默认选择。或者,我希望第二个实现LDAP支持LDAPUserDAO
。我正在寻找的是,如果它们都存在于依赖列表中,LDAPUserDAO
应该被使用,否则SQLUserDAO
作为基本实现时LDAPUserDAO
不存在。总结一下,如果两个都签出,我希望LDAPUserDAO
优先于SQLUserDAO
。
接口
public interface UserDAO {
SQL实施
@Repository("userDAO")
public class SQLUserDAO implements UserDAO {
LDAP实施
@Repository("userDAO")
public class LDAPUserDAO implements UserDAO {
答案 0 :(得分:1)
尝试@Primary:
“表示多个时应该优先考虑bean 候选人有资格自动使用单值依赖。如果 在候选人中确实存在一个“主要”bean,它将是 自动装配的价值。这个注释在语义上等同于 元素在Spring XML中的主要属性。“
对于更多特殊情况,使用PriorityOrdered的BeanFactoryPostProcessor的实现也会有所帮助。 http://rachitskillisaurus.blogspot.co.at/2013/10/spring-force-bean-to-be-first-to.html