SpringBoot @Autowired注解的使用

        @Autowired表示一个属性是否需要进行依赖注入,可以使用在属性、普通方法上、构造方法上。注解中的required属性默认是true,如果没有对象可以注入到属性,则会报出异常;

        @Autowired加在某个属性上,spring会从ioc容器中找到bean对象注入到属性上,如果找到多个该类型的Bean对象,则再根据属性的名字从多个Bean对象中确认一个;

        @Autowired写在set()方法上,在spring会根据方法的参数类型从ioc容器中找到该类型的Bean对象注入到方法的行参中,并且自动反射调用该方法(被@Autowired修饰的方法一定会执行),所以一般使用在set方法中、普通方法不用;

        @Autowired使用在构造方法中:根据构造方法的形参、形参名,从ioc容器中找到该类型的Bean对象,注入到构造方法的形参中,并且执行该方法;

        @Autowired注解在进行依赖注入的时候需要指定bean的时候,和@Qualifier注解一起使用使用@qualifier注解指定名称

//构造方法
@Autowired
public Bean03(Bean04 bean04) {
    System.out.println("11111111111111");
}
//属性上
@Autowired
Bean04 bean04;
  
//set方法
@Autowired
public void setBean04(Bean04 bean) {
    this.bean04 = bean;
}
//普通方法
@Autowired
public void commonMethod(Bean04 bean04){
    System.out.println("普通方法的执行");
}

        @Autowired使用在构造方法上的细节

        在同一个类上有多个构造方法上使用了@Autowired,默认情况下会报错;

        解决方法:可以把@Autowired的属性required设置成为false,此时spring会自己选择使用哪一种构造方法;

        spring在上述情况下的选择规则:

        1.会优先考虑参数多的(先ByType找到多个该类型的bean,再ByName进行注入)

        2.如果多个类型的bean按照ByName无法注入,则去考虑参数少的进行注入,依次类推;

        3.在参数个数相同、ByName,也可以注入的情况下,按照构造方法的书写顺序进行选择;

你可能感兴趣的:(SpringBoot,spring,boot,spring,java)