Spring框架知识整理(四)之 Spring IoC 容器

1、BeanFactory 容器(适用于资源比较紧张的项目,如APP)

  • XmlBeanFactory():生成工厂 bean,负责创建并初始化所有的对象。

  • ClassPathResource():加载在路径 CLASSPATH 下可用的 bean 配置文件。

  • 用XmlBeanFactory() 生成的 bean 工厂对象的 getBean() 方法得到所需要的 bean。

    HelloWorld1.java文件如图:
    Spring框架知识整理(四)之 Spring IoC 容器
    Beans1.xml文件如图:
    Spring框架知识整理(四)之 Spring IoC 容器
    MainTest1.java类文件如图:Spring框架知识整理(四)之 Spring IoC 容器

2、ApplicationContext 容器

  • FileSystemXmlApplicationContext:该容器从 XML文件中加载已被定义的 bean。需要提供给构造器 XML文件的完整路径。

  • ClassPathXmlApplicationContext:该容器从 XML文件中加载已被定义的 bean。不需要提供 XML文件的完整路径,只需正确配置 CLASSPATH环境变量即可,因为,容器会从 CLASSPATH中搜索 bean配置文件。

  • WebXmlApplicationContext:该容器会在一个 web应用程序的范围内加载在 XML文件中已被定义的bean。

  • 加载完指定路径下 bean 配置文件后,用 FileSystemXmlApplicationContext生成工厂 bean。负责生成和初始化所有的对象。用生成的上下文中的 getBean()方法得到所需要的 bean。

    HelloWorld2.java文件如图:
    Spring框架知识整理(四)之 Spring IoC 容器
    Beans2.xml文件如图:
    Spring框架知识整理(四)之 Spring IoC 容器
    MainTest2.java类文件如图:
    Spring框架知识整理(四)之 Spring IoC 容器

3、Bean 定义

  • class: 这个属性是强制性的,并且指定用来创建 bean的 bean类。

  • name: 这个属性指定唯一的 bean标识符。在基于 XML的配置元数据中,可以使用 ID和/或 name属性来指定 bean标识符。

  • scope: 这个属性指定由特定的 bean定义创建的对象的作用域。

  • constructor-arg: 用来注入依赖关系的。

  • properties: 用来注入依赖关系的。

  • autowiring mode: 用来注入依赖关系的。

  • lazy-initialization mode: 延迟初始化的 bean告诉 IoC容器在它第一次被请求时,而不是在启动时去创建一个 bean实例。

  • initialization方法: 在 bean的所有必需的属性被容器设置之后,调用回调方法。

  • destruction方法: 当包含该 bean 的容器被销毁时,使用回调方法。

Spring 配置元数据三种方法:

  • 基于 XML 的配置文件;
  • 基于注解的配置;
  • 基于 Java 的配置
    Spring框架知识整理(四)之 Spring IoC 容器

4、Bean 的作用域

  • singleton:在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值。

  • prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。

  • request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境。

  • session:同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境。

  • global-session:一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境。

    singleton 作用域:
    当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例。

    prototype 作用域
    当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求时都会创建一个新的bean实例。

    (1)HellowWorld4.java
    Spring框架知识整理(四)之 Spring IoC 容器
    (2)Beans4.xml:
    Spring框架知识整理(四)之 Spring IoC 容器
    (3)MainTest4.java:
    Spring框架知识整理(四)之 Spring IoC 容器
    (4)得到结果:
    Spring框架知识整理(四)之 Spring IoC 容器
    (5)修改(2)中的Beans4.xml,如下图:
    Spring框架知识整理(四)之 Spring IoC 容器
    (6)得到不同结果:
    Spring框架知识整理(四)之 Spring IoC 容器

Bean 的生命周期

Bean的定义——Bean的初始化——Bean的使用——Bean的销毁

HelloWorld5.java
Spring框架知识整理(四)之 Spring IoC 容器
Beans.xml
Spring框架知识整理(四)之 Spring IoC 容器
MainTest5.java
Spring框架知识整理(四)之 Spring IoC 容器
得到结果:
Spring框架知识整理(四)之 Spring IoC 容器

Bean 后置处理器

BeanPostProcessor 接口定义回调方法,可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等。

HelloWorld6.java
Spring框架知识整理(四)之 Spring IoC 容器
InitHelloWorld6.java
Spring框架知识整理(四)之 Spring IoC 容器
Beans6.xml
Spring框架知识整理(四)之 Spring IoC 容器
MainTest6.java
Spring框架知识整理(四)之 Spring IoC 容器
运行结果:
Spring框架知识整理(四)之 Spring IoC 容器

Bean 定义继承

HelloWorld7.java
Spring框架知识整理(四)之 Spring IoC 容器
HelloIndia7.java
Spring框架知识整理(四)之 Spring IoC 容器
Beans.xml
Spring框架知识整理(四)之 Spring IoC 容器
MainTest7.java
Spring框架知识整理(四)之 Spring IoC 容器
运行结果
Spring框架知识整理(四)之 Spring IoC 容器

下一篇是《Spring框架知识整理(五)之 依赖注入》。