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

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包


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

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

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

public class Car {

}
@Component
public class Vehicle {
    private Car car;
    
    //如果bean中,有且只有一个有参的构造方法,那么@Autowired可以省略,参数的内容可以从容器中获取
    @Autowired
    public Vehicle(Car car) {
        this.car = car;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }
    
}

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

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

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

spring注解 @Primary,@Autowired,@Qualifier,@Resource,@Inject自动装配注解_第1张图片

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

spring注解 @Primary,@Autowired,@Qualifier,@Resource,@Inject自动装配注解_第2张图片

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

spring注解 @Primary,@Autowired,@Qualifier,@Resource,@Inject自动装配注解_第3张图片

测试:大家自己测试吧;

你可能感兴趣的:(spring,@Primary,@Autowired,@Qualifier,@Resource,@Inject)