Spring @Autowire同一类的两个bean,它们没有在ApplicationContext中定义

Rus*_*pot 3 spring dependency-injection autowired

我正在使用Spring MVC应用程序并遇到了问题.我是Spring的新手,所以如果我的工作有点笨拙,请原谅我.基本上我有一个java类ContractList.在我的应用程序中,我需要这个类的两个不同的对象(它们都必须是单例)

public class MyClass {
    @Autowired
    private ContractList contractList;

    @Autowired
    private ContractList correctContractList;

    .. do something..
}
Run Code Online (Sandbox Code Playgroud)

请注意,这两个bean都没有在ApplicationContext.xml中定义.我只使用注释.因此,当我尝试访问它们时 - contractList和correctContractList最终引用同一个对象.有没有办法以某种方式区分它们而不在ApplicationContext.xml中显式定义它们?

RJo*_*RJo 6

您可以为bean提供限定符:

@Service("contractList")
public class DefaultContractList implements ContractList { ... }

@Service("correctContractList")
public class CorrectContractList implements ContractList { ... }
Run Code Online (Sandbox Code Playgroud)

并像这样使用它们:

public class MyClass {

    @Autowired
    @Qualifier("contractList")
    private ContractList contractList;

    @Autowired
    @Qualifier("correctContractList")
    private ContractList correctContractList;
}
Run Code Online (Sandbox Code Playgroud)

在xml配置中仍然使用@Autowired它将是:

<beans>
    <bean id="contractList" class="org.example.DefaultContractList" />
    <bean id="correctContractList" class="org.example.CorrectContractList" />

    <!-- The dependencies are autowired here with the @Qualifier annotation -->
    <bean id="myClass" class="org.example.MyClass" />
</beans>
Run Code Online (Sandbox Code Playgroud)