处理一个 Spring Bean/接口的多个实现

2022-09-02 12:22:01

假设我需要依赖Spring Bean的几个实现。我有一个接口和两个实现:和。AccountServiceDefaultAccountServiceImplSpecializedAccountServiceImpl

  1. 这在春季如何可能(注入一个或另一个实现)?

  2. 以下注入将使用哪种实现?

    @Autowired
    private AccountService accountService;
    

答案 1

Ad. 1:您可以使用@Qualifier注释或自动连线,而不是默认为字段名称而不是类型。@Resource@Autowired

Ad. 2:在运行时会失败,因为有两个 bean 正在实现这个接口。如果其中一个 Bean 还附加了 @Primary 注释,则在按类型自动布线时将首选该 Bean。


答案 2
@Autowired
@Qualifier("impl1")
BaseInterface impl1;

@Autowired
@Qualifier("impl2")
BaseInterface impl2;

@Component(value="impl1")
public class Implementation1  implements BaseInterface {

}

@Component(value = "impl2")
public class Implementation2 implements BaseInterface {

}


For full code: https://github.com/rsingla/springautowire/