spring注解 @Primary,@Autowired,@Qualifier,@Resource,@Inject自动装配注解

你的名字 2021-09-28 14:36 521阅读 0赞

spring的自动装配:Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;

1.@Qualifier 配合@Autowired使用,自动装配指定名字的bean

2.@Primary 让Spring进行自动装配的时候,默认使用首选的bean;

3.@Autowired:自动注入

  • 默认优先按照类型去容器中找对应的组件:applicationContext.getBean(Car.class);找到就赋值;
  • 如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean(“car”);
  • 自动装配默认一定要将属性赋值好,没有就会报错,如果没有注入bean, 可以使用@Autowired(required=false);
  • 装配l了同一个类型,多个bean的实例的时候,可以使用@Qualifier(“car”):使用@Qualifier指定需要装配的组件的id,而不是使用属性名

4.@Resource JSR250中的注解,java注解

  • 可以实现跟@Autowired注解一样的功能
  • 默认是按照组件名称进行装配的applicationContext.getBean(“car”)
  • 对@Primary标注的bean,没有支持
  • 必须注入bean,如果没有注入,会报错(没有@Autowired(reqiured=false)功能)

5.@Inject JSR330规范中的注解,java注解,使用的时候,需要引入对应的jar包

  1. <dependency>
  2. <groupId>javax.inject</groupId>
  3. <artifactId>javax.inject</artifactId>
  4. <version>1</version>
  5. </dependency>
  • 可以实现跟@Autowired注解一样的功能
  • 默认是按照组件名称进行装配的applicationContext.getBean(“car”)
  • 可以支持@Primary标注的bean
  • 必须注入bean,如果没有注入,会报错(没有@Autowired(reqiured=false)功能)

其实可以看到,在使用过程中,spring的注解@Autowired在功能上,更加的强大,也是推荐使用的,使用java标准的注解,在使用其他的类似框架中,可以不用更改代码,不过,在类似框架中,应该没有框架,能够弄得过 spring了,下面主要说明spring的@Autowired注解的使用方式

创建两个bean,Car和Vehicle ,在Vehicle中有Car的实例

  1. public class Car {
  2. }
  3. @Component
  4. public class Vehicle {
  5. private Car car;
  6. //如果bean中,有且只有一个有参的构造方法,那么@Autowired可以省略,参数的内容可以从容器中获取
  7. @Autowired
  8. public Vehicle(Car car) {
  9. this.car = car;
  10. }
  11. public Car getCar() {
  12. return car;
  13. }
  14. public void setCar(Car car) {
  15. this.car = car;
  16. }
  17. }

@Autowired:可以用在 构造器,参数,方法,属性上;都是从容器中获取参数组件的值,如果是单例对象,获取的bean都是同一个

标注在构造器上:如果bean中,有且只有一个有参的构造方法,那么@Autowired可以省略,参数的内容可以从容器中获取

标注在方法上:一般标注在set方法上;如果去@Bean注解标注的方法

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70

放在参数位置:无论是构造器的参数,还是set方法的参数,都是可以的;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70 1

如果使用@Bean的形式注入bean,参数上的@Autowired可以忽略

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDEwMjgz_size_16_color_FFFFFF_t_70 2

测试:大家自己测试吧;

发表评论

表情:
评论列表 (有 0 条评论,521人围观)

还没有评论,来说两句吧...

相关阅读