我正在数据层上工作,我想基于Maven依赖关系将一个实现激活到另一个实现。例如,我有UserDAO作为接口,第一个实现是作为SQLUserDAO的基于SQL的实现,这是我的默认选择。另外,我想使用LDAP支持的第二种实现LDAPUserDAO。我要寻找的是如果两者都存在于依赖项列表中,则应使用LDAPUserDAO,否则当SQLUserDAO不存在时将LDAPUserDAO作为基本实现。总结,如果两个都签出,我想给LDAPUserDAOSQLUserDAO更高的优先级。

接口

public interface UserDAO {


SQL执行

@Repository("userDAO")
public class SQLUserDAO implements UserDAO {


LDAP实施

@Repository("userDAO")
public class LDAPUserDAO implements UserDAO {

最佳答案

尝试@Primary


“表示当多个
候选人有资格自动装配单值依赖项。如果
候选者之间确实存在一个“主要” bean,它将是
自动接线值。此注释在语义上等同于
元素在Spring XML中的主要属性。”


对于更特殊的情况,具有PriorityOrdered的BeanFactoryPostProcessor的实现也可能会有所帮助。 http://rachitskillisaurus.blogspot.co.at/2013/10/spring-force-bean-to-be-first-to.html

10-06 07:13