@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 , @Autowired 不能省略掉,构造器的参数依然可以从容器中获取
// @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"; }
浙公网安备 33010602011771号