SpringCloud 自动注入的5种方法

106 阅读1分钟

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;
    }
}