唐僧喜欢小龙女

导航

@Autowired 学习整理

1、作用

Spring 用来自动装配的,@Autowired 自动注入 当一个组件中需要另一个组件的时候,只需要在另一个组件上加上@Autowired 就可以获取到组件了

 

@Service
public class MyService {

    //@Qualifier("yellow")
    @Autowired(required = false)
    Yellow yellow2;

    public String sayHello(String name){

        System.out.println(yellow2);
       return "hello"+name;
    }
}

2、使用细节

/**
 *  @Autowired 自动注入  当一个组件中需要另一个组件的时候,只需要在另一个组件上加上@Autowired  就可以获取到组件了
 *
 *    1) 优先按照类型去容器中找对应的组件 Yellow.class; applicationContext.getBean(Yellow.class);
 *    public class MyService {

        @Autowired
        Yellow yellow;

        }
 *
 *    2) 如果组件有多个就根据组件的id去容器里面找applicationContext.getBean("yellow")
 *
 *    3) 可以使用@Qualifier("yellow") 来明确的指定 需要注入的组件id 而不是 使用属性名来注入
 *
 *    4) 自动装配默认一定要将属性赋值好的 如果没有就报错,可以使用 @Autowired(required = false) 来设置属性能装上就装上没有装上
 *
 *          就拉到
 *
 *    5)@Primary 这注解让spring进行自动装配的时候用默认注入有这个注解的方法,也可以使用 @Qualifier 来指定bean
 *
 *          使用了@Primary 组件的属性就随便写了
 *           @Autowired(required = false)
 *           Yellow yellow3;
 *    6)使用在 方法上、构造器上、形参上
 *        2、方法    用在方法上,方法需要的参数值会从容器里面获取,创建当前类的对象时会调用set方法,会调用set方法完成 赋值
 *        3、构造器  如果组件只有一个有参构造器, @Autowired 可以省略掉,构造器的参数依然可以从容器中获取
 *        4、参数    @Autowired 可以省略
 */
@Configuration
public class SpringBeanInfo  {

    //@Primary
    @Bean("yellow2")
    public Yellow getYellow(){
        Yellow yellow = new Yellow();
        yellow.setNum(2);
      return  yellow;
    };

    //这里不用加@Autowired 注解,car的值从容器中获取
    @Bean
    public Color color(Car car){
        Color color = new Color();
        color.setCar(car);
        return color;

    }

}

 

3、Autowired 使用在 方法和构造器上

 

@Component
public class Car {

    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

}

@Component
public class Boss {


    private Car car;

    //可以标在构造器上
    //构造器用的组件从容器里面获取,然后完成赋值
    //如果组件只有一个有参构造器, @Autowired 可以省略掉,构造器的参数依然可以从容器中获取
    //@Autowired
    public Boss(Car car){
        this.car = car;

    }

    public Car getCar() {
        return car;
    }

   // @Autowired
    //用在方法上,方法需要的参数值会从容器里面获取
    //创建当前类的对象时会调用set方法,会调用set方法完成 赋值
    public void setCar(Car car) {
        this.car = car;
    }


    @Override
    public String toString() {
        return "Boss{" +
                "car=" + car +
                '}';
    }


    public void run(){
        System.out.println("老板在开车");
    }
}

4、Autowired 用在形参上

public class Color {

    private Car car;

    public Car getCar() {
        return car;
    }

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

    public void carRun(){
        System.out.println(car.getColor());
    }


    @Override
    public String toString() {
        return "Color{" +
                "car=" + car +
                '}';
    }
}




//这里不用加@Autowired 注解也可以加,car的值从容器中获取 这里的情况是经常会见到的
@Bean
public Color color(Car car){
    car.setColor("block");
    Color color = new Color();
    color.setCar(car);
    return color;

}


@RequestMapping("/hello3")
@ResponseBody
public String hello3(){

    color.carRun();

    return "success";
}

 

 

  

 

posted on 2021-06-19 10:32  与时具进&不忘初心  阅读(53)  评论(0编辑  收藏  举报