@Autowired:构造器,参数,方法,属性;都是从容器中获取参数组件的值;
- set方法注入;
- 构造器注入;
- 作为Bean方法的参数注入;
例子:Boss 注入Car类
第一种、set方式注入
//Car类
package com.spring.bean;
@Component
public class Car {
public Car() {
System.out.println("car...constructor");
}
}
//Boss类
package com.spring.bean;
//默认加在ioc容器中的组件,容器启动会调用无参构造器创建对象,再进行初始化赋值等操作
@Component
@Data
public class Boss {
private Car car;
public Car getCar() {
return car;
}
//标注在方法,Spring容器创建当前对象,就会调用方法,完成赋值;
//方法使用的参数,自定义类型的值从ioc容器中获取
@Autowired
public void setCar(Car car) {
this.car = car;
}
//也可以这样写:public void setCar(@Autowired Car car) {
}
//配置类
@Configuration
@ComponentScan({com.spring.bean"})
public class MainConifgOfAutowired {
}
第二种、构造器方法注入
如果组件只有一个有参构造器,这个有参构造器的@Autowired
可以省略,参数位置的组件还是可以自动从容器中获取;
@Component
@Data
public class Boss {
private Car car;
@Autowired
public Boss(Car car) {
this.car = car;
}
//也可以这样写:public Boss(@Autowired Car car) {
//也可以不写 @Autowired
}
第三种、作为Bean的参数注入
//@Bean标注的方法创建对象的时候,方法参数的值从容器中获取
@Bean
public Boss color(Car car){
Boss boss = new Boss();
boss.setCar(car);
return boss;
}