版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/my_momo_csdn/article/details/91595824
文章目录
@Autowire/@Qualifier/@Primary/@Value
一、@Value赋值
- 如果bean被添加到IOC容器,对其属性不做任何初始化,那么相关属性是null或者默认值(基本类型)。
可以通过@Value赋值,赋值方式有:
基本字符
spring EL表达式
二、依赖注入
2.1 @Autowire
- 注入bean,可以指定requird属性,默认为true
2.2 @Resource(JSR250)
- 效果与@Autowire一样,但是不支持@Primary和required属性
2.3 @Inject(JSR330)
-
效果与@Autowire一样, 支持@Primary功能, 可用于非spring框架,但是不支持required属性 ,需要引入第三方包javax.inject,使用不方便
-
对比:Autowired属于spring的, 不能脱离spring, @Resource和@Inject都是JAVA规范推荐大家使用@Autowired
2.4 @Qualifier
- 到容器中获取指定id的bean
三、bean修饰
@Primary
- Spring加载bean时,优先加载的bean,作为优先级最高的bean。
四、对比
4.1 表格对比
注解 | 相同点 | 注解提供 | 是否支持required参数 | 是否支持@Primary的Bean优先注入 | 是否支持指定beanId注入 |
---|---|---|---|---|---|
@Autowire | 可实现bean的依赖注入 | Spring的专有注解 | 支持 | 支持 | 通过@Qualifier指定注入特定bean |
@Resource | 可实现bean的依赖注入 | JSR250规范 | 不支持 | 不支持 | 通过参数name指定注入bean |
@Inject | 可实现bean的依赖注 | JSR330规范 | 不支持 | 支持 | 通过@Named注解指定注入bean |
4.2 注意
- 详细的注意事项可以参考 10-spring @Primary和@Qualifier辨析
如果同类型存在多个bean在IOC容器,beanid不一样,并且这些bean都没有使用@Primary注解,那么@Autowire注入的时候,是使用变量名作为beanId去注入的,
如果同类型存在多个bean在IOC容器,beanid不一样,但是这些bean中有一个bean使用@Primary注解,那么@Autowire注入的时候,会优先注入这个加了@Primary注解的bean
,想要注入其他的没有加@Priamry注解的bean的话,需要使用@Qualifier指定beanid进行注入