处理一个Spring bean /接口的几个实现

bal*_*teo 17 java spring interface

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

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

  2. 以下注射使用哪种实施方案?

    @Autowired
    private AccountService accountService;
    
    Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 20

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

广告.2:它将在运行时失败,说两个bean正在实现此接口.如果其中一个bean另外注释了@Primary,则在按类型自动装配时将首选.

  • @balteo:是的.在`@Service`注释中手动分配服务名称,或者使用第一个字符下限的简单类名:`@Qualifier("specializedAccountServiceImpl")`. (3认同)

小智 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/
Run Code Online (Sandbox Code Playgroud)

  • 如果我想切换所有我@Autowire接口的地方的实现怎么办?我不想在所有使用场所明确指定. (2认同)