1. @Autowired
@Autowired 是通过 byType 的方式去注入的, 使用该注解,要求接口只能有一个实现类。
@Autowired
private OrderDao orderDao;
2. @Resource
@Resource 可以通过 byName 和 byType的方式注入, 默认先按 byName的方式进行匹配,如果匹配不到,再按 byType的方式进行匹配。
因为@Resource 注解默认使用名称进行依赖注入,所以变量名明确叫做 demoServiceBeijing(首字母小写),使用的就是DemoServiceBeijing实现类。
@Resource
IDemoService demoServiceBeijing; //这里的变量名称指定了bean名称
//IDemoService demoService; 被替换掉
3. @Qualifier("demoServiceBeijing")
@Qualifier 注解可以按名称注入, 但是注意是 类名。
//用 @Qualifier 能注入指定的类
@Qualifier("OrderServiceimpl")
private OrderService<Order> orderService;
4. @Primary
假如在北京部署系统的时候,在DemoServiceBeijing的类上面加上@Primary,该注解的作用就是强迫从多个实现类里面选一个实现类,如果Spring不知道选哪一个,我们告诉它一个默认的。
@Primary
@Component
public class DemoServiceBeijing implements IDemoService {
5. @ConditionalOnProperty
通过在实现类中,指定配置参数,来选择不同的实现类
@Configuration
@ConditionalOnProperty(name="action.type",havingValue = "ALIYUN")
public class AliyunServiceImpl implements InterfaceService {
public String start(String key) {
return key;
}
}