09-spring基础注解 @Autowire、@Qualifier、@Primary和@Value

版权声明:本文为博主原创文章,未经博主允许不得转载。 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进行注入 

猜你喜欢

转载自blog.csdn.net/my_momo_csdn/article/details/91595824