一、@Autowired

注解@Autowired是Spring对组件自动装配的一种方式。

 1、构造函数上定义

(1)、带有@Autowired注解的构造方法,在Spring初始化对象实例时,会被调用进行对象的实例化。

(2)、如果构造方法上带有了@Autowired注解,那么这个构造方法就算不是public修饰的也可以被实例化。

(3)、当一个对象只有一个构造方法时,Spring实例化对象会默认选择这个构造方法进行实例化,无需加@Autowired注解。只有存在了多个构造方法时,才用加@Autowired注解,告诉Spring选择那个构造方法进行实例化。

(4)、构造方法的@Autowired且required属性为true的只允许有一个。其他必须设置为false

(5)、实例化带参数的构造方法时,Spring会优先实例化构造方法中的参数。

2、在类属性上定义

最常用的一种。字段在构造bean之后,在调用任何配置方法之前被注入。这样的配置字段不必是

public的,private也可以被赋值。

3、在方法上定义

定义在其他方法上,当Spring容器调用该类的构造方法实例化完成该类后,会调用@Autowired修

饰的方法,并将方法的参数进行实例化。也就是说,我们如果想实例化完成一个类后,执行某个方

法时,可以用@Autowired注解来修饰。Spring会自动给我们执行该方法,有点儿类似于init-

method的用法。但是必须保证该方法的参数对象在Spring容器中也存在,否则会报错。

注意:
1.如果容器中没有一个可以与之匹配且required属性为true则会报异常
             NoSuchBeanDefinitionException
         2.如果容器中有多个类型可以与之匹配,则自动切换为按照名称装配
         3.如果容器中有多个类型可以与之匹配,则自动切换为按照名称装配,如果名称也没有匹配,则报异常
             NoUniqueBeanDefinitionException

 二、@Autowired自动装配详解

1、@Autowired自动装配,默认优先按照类型IOC容器中寻找对应的组件

2、如果有多个相同类型的组件,再将属性的名称作为组件的id去容器中查找

3、@Autowired配合@Primary使用,当使用@Autowired自动装配时,默认优先选择被注解@Primary标注的组件

4、@Autowired配合@Qualifier使用,使用注解@Qualifier可以指定需要装配组件的id

5、使用@Autowired自动装配,如果在容器中找不到对应的组件,则会报错

spring boot 构造函数 spring构造函数 @autowired_实例化

6、如果容器中有多个类型可以与之匹配,则自动切换为按照名称装配,如果名称也没有匹配,则报异常

spring boot 构造函数 spring构造函数 @autowired_spring boot 构造函数_02

 7、@Autowired属性required,默认为true,如果在容器中找不到对应的组件,则会报错;如果为false,就算在容器中找不到对应的组件,则不装配,不会报错; 

spring boot 构造函数 spring构造函数 @autowired_1024程序员节_03