说明
一共有5种方式:
1. @Autowired+属性,被注入
2. 通过构造方法,被注入
3. 通过set方法,被注入
4. 通过List属性,被注入
5. 通过Map属性,被注入
@Autowired + 属性
这种是最普遍的,此时有一个bean:
import org.springframework.stereotype.Component;
@Component
public class A {
}
此时另一个bean,注入A这个bean,
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class B {
//a属性就被注入了
@Autowired
private A a;
}
通过构造方法
A这个bean,和上面一样,
@Component
public class B {
private A a;
@Autowired
public B(A a) {
this.a = a;
}
}
B的构造函数上多了个@Autowired,参数是要注入的Bean;如果还想把C类型、D类型…的Bean注入进来,参数可以继续往后加。或者有2个Bean,有相同的接口,
import org.springframework.stereotype.Component;
@Component
public class Cat implements Animal {
@Override
public void sayName() {
System.out.println("猫:喵喵");
}
}
import org.springframework.stereotype.Component;
@Component
public class Dog implements Animal {
@Override
public void sayName() {
System.out.println("狗:汪汪");
}
}
此时B,
import com.gs.spring_boot_demo.bean.Animal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class B {
private List<Animal> list;
@Autowired
public B(List<Animal> list) {
//list有2个元素,就是上面的那2个Bean
//参数也可以是Map<String, Animal>类型,key是Bean的名称,
//value是Bean对象
this.list = list;
}
}
通过set方法
还是A这个Bean,Bean B:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class B {
private A a;
//属性a的set方法上,添加@Autowired
@Autowired
public void setA(A a) {
this.a = a;
}
}
通过List属性、通过Map属性
这2个类似,而且归根结底也是通过set方法注入;适用于注入多个Bean,并且这些Bean实现了同一接口;还是上面的Cat、Dog这2个Bean,Bean B:
import com.gs.spring_boot_demo.bean.Animal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class B {
private List<Animal> list;
@Autowired
public void setList(List<Animal> list) {
this.list = list;
}
//private Map<String, Animal> map;
//
//@Autowired
//public void setMap(Map<String, Animal> map) {
// //key是Bean的名称,value是Bean对象
// this.map = map;
//}
}