19

假设我需要依赖Spring bean 的几个实现。我有一个AccountService接口和两个实现:DefaultAccountServiceImplSpecializedAccountServiceImpl.

  1. 在 Spring 中这怎么可能(注入一个或另一个实现)?

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

    @Autowired
    private AccountService accountService;
    
4

2 回答 2

21

广告。1:您可以使用@Qualifier注释或自动装配使用@Resource,而不是@Autowired默认为字段名称而不是类型。

广告。2:它会在运行时失败,说两个 bean 正在实现这个接口。如果您的某个 bean 还带有 注释@Primary,则在按类型自动装配时将首选它。

于 2012-08-02T12:08:53.850 回答
14
@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/
于 2014-12-07T05:42:02.380 回答