@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"; }