Spring的核心是控制反转(IoC)和面向切面(AOP)。
Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理 。
Spring工厂是用于生成Bean,对Bean进行管理。
在Spring中,所有Bean的生命周期都交给Ioc容器管理。
Spring中,Spring可以通过Xml形式或注解的形式来管理Bean 。
下面基于注解的形式,采用多种方式实现Spring的Bean注入。具体如下:
一、通过方法注入Bean
1. 通过构造方法注入Bean
实例代码:
@Component("anotherBean1")
public class AnotherBean {
}@Component
public class MyBean1 {
private AnotherBean anotherBean1;
public MyBean1(AnotherBean anotherBean1) {
this.anotherBean1 = anotherBean1;
}
@Override
public String toString() {
return "MyBean1{" +
"anotherBean1=" + anotherBean1 +
'}';
}
}2.通过Set方法注入Bean
实例代码:
@Component
public class MyBean2 {
private AnotherBean anotherBean2;
@Autowired
public void setAnotherBean2(AnotherBean anotherBean2) {
this.anotherBean2 = anotherBean2;
}
@Override
public String toString() {
return "MyBean2{" +
"anotherBean2=" + anotherBean2 +
'}';
}
}二、通过属性注入Bean
@Component
public class MyBean3 {
@Autowired
private AnotherBean anotherBean3;
@Override
public String toString() {
return "MyBean3{" +
"anotherBean3=" + anotherBean3 +
'}';
}
}三、通过集合类型注入Bean
1. 直接注入集合实例
List集合注入Bean
@Component
public class MyBean4 {
private List<String> stringList;
public List<String> getStringList() {
return stringList;
}
@Autowired
public void setStringList(List<String> stringList) {
this.stringList = stringList;
}
private List<String> stringList1;
public List<String> getStringList1() {
return stringList1;
}
@Autowired
@Qualifier("stringList1") //使用@Qualifier注解指定bean的Id,此处的Id与BeanConfiguration类中的stringList1方法的Bean 的Id要一致
public void setStringList1(List<String> stringList1) {
this.stringList1 = stringList1;
}
@Override
public String toString() {
return "MyBean4{" +
"stringList=" + stringList +
", stringList1=" + stringList1 +
'}';
}
}Map集合注入Bean
@Component
public class MyBean5 {
private Map<String, Integer> integerMap;
public Map<String, Integer> getIntegerMap() {
return integerMap;
}
@Autowired //加上@Autowired 注解是希望Spring帮我们完成注入
public void setIntegerMap(Map<String, Integer> integerMap) {
this.integerMap = integerMap;
}
@Override
public String toString() {
return "MyBean5{" +
"integerMap=" + integerMap +
'}';
}
}2. 将多个泛型的实例注入到集合
(1)将多个泛型的实例注入到List
(2)控制泛型实例在List中的顺序
(3)将多个泛型的实例注入到Map
@Configuration
@ComponentScan("com.lhf.spring.bean")
public class BeanConfiguration {
//方式一: List集合注入Bean
@Bean //告知这个Bean将会交给Spring进行管理
public List<String> stringList(){
//List集合有序可重复
List<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
return list;
}
@Bean("stringList1") //告知这个Bean将会交给Spring进行管理, 指定Bean的Id
public List<String> stringList1(){
//List集合有序可重复
List<String> list = new ArrayList<String>();
list.add("1111");
list.add("2222");
list.add("3333");
return list;
}
//方式二:List集合注入Bean, 注意类型一定要与List集合的类型一致
@Bean
@Order(100) //@Order注解指定顺序
public String string1(){
return "444";
}
@Bean
@Order(1)
public String string2(){
return "555";
}
@Bean
@Order(50)
public String string3(){
return "666";
}
//----------------------------------------------------------------//
//方式一:Map集合注入Bean
@Bean
public Map<String, Integer> integerMap(){
Map<String, Integer> map = new HashMap<>();
map.put("aaa", 1111);
map.put("bbb", 2222);
map.put("ccc", 3333);
return map;
}
//方式二:Map集合注入Bean, 注意类型一定要与Map集合的类型一致
@Bean("int1")
public Integer integer1(){
return 10001;
}
@Bean("int2")
public Integer integer2(){
return 10002;
}
}四、简单类型(String、Integer)直接注入Bean
@Component
public class MyBean6 {
private String string;
private Integer integer;
public String getString() {
return string;
}
@Value("没有了你,万杯觥筹只不是是提醒寂寞罢了") //使用@Value注解直接注入值
public void setString(String string) {
this.string = string;
}
public Integer getInteger() {
return integer;
}
@Value("1314")
public void setInteger(Integer integer) {
this.integer = integer;
}
@Override
public String toString() {
return "MyBean6{" +
"string='" + string + '\'' +
", integer=" + integer +
'}';
}
}五、SpringIoc容器内置接口注入Bean
@Component
public class MyBean7 {
private ApplicationContext context;
public ApplicationContext getContext() {
return context;
}
@Autowired
public void setContext(ApplicationContext context) {
this.context = context;
}
@Override
public String toString() {
return "Mybean7{" +
"context=" + context +
'}';
}
}在这里,除了可以直接将ApplicationContext注入进来之外,还可以注入BeanFactory、Environment、ResourceLoader、ApplicationEventPublisher、MessageSource及其实现类。
完整代码见github:https://github.com/JavaCodeMood/spring-bean-demo
随时随地看视频