spring 依赖注入的三种方式

@Autowired:构造器,参数,方法,属性;都是从容器中获取参数组件的值;

  1. set方法注入;
  2. 构造器注入;
  3. 作为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;
}

你可能感兴趣的:(spring,spring,bean)