SpringIOC容器的一些简单知识笔记


Spring中的BeanFactory容器

  • 最简单的容器,它主要的功能是为依赖注入(DI)提供支持

  • 相关的接口,如BeanFactoryAware、DisposableBean、InitializingBean

    InitializingBean 只包含AfterPropertiesSet方法,凡是继承了该方法的类,初始化bean的时候会自动执行该方法.

  • 有大量对BeanFactory的实现. 其中最常用的是XmlBeanFactory类

    使用懒加载的方式,只有调用的时候才会被加载
    beanctory factory = new XmlBeanFactory(new ClassPathResourse("Beans.xml"));
    HelloWorld helloworld = (HelloWorld)factory.getBean("helloWorld")

Spring中的ApplicationContext容器

  • Application Context 是 BeanFactory 的子接口,也被称为 Spring 上下文。
  • 增加了企业所需要的功能,如,从属性文件中解析文本信息和将事件传递给所指定的监听器。
  • 包含有BeanFactory的所有功能,一般情况下相比于BeanFactory,ApplicationContext会更加优秀
  • 接口的实现

    FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径
    ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件
    WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean

  • 示例代码

    预加载方式,即在应用启动后就实例化所有的bean,即在FileSystemXmlApplicationContext就会检查自身
    ApplicationContext context = new FileSystemXmlApplicationContext("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml")
    HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

Spring Bean定义

  • bean是一个实例化、组装、并通过Spring IOC容器所管理的对象
  • bean定义包含称为配置元数据的信息,下述容器也需要知道配置元数据

    如何创建一个Bean
    Bean的生命周期详细信息
    bean的依赖关系

上述数据转换为每个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 的容器被销毁时,使用回调方法
  • Bean和Spring的关系

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

    singleton是spring的默认作用域,也就是说当一个bean的作用域为singleton时,并且对所有的bean请求,只要id与bean定义相同就会返回同一实例

  • prototype

    每次对该bean进行请求都会创建一个新的bean实例

bean的生命周期

当一个bean被初始化时,他可能执行一些方法使它变为可用状态。 当一个bean不在使用的时候,并且从容器中移除,可能需要做一些清理工作
这里只是容易理解的俩个重要生命周期回调,它在bean创建和初始化时是必须的
init-method和 destroy-method. init-method指定一个方法,在初始化的时候调用,destroy-method指定一个方法,只有在bean容器移除之后,才会调用该方法
bean的生命周期可以表达为 Bean的定义---Bean的初始化---Bean的使用---Bean的销毁

  • 初始化回调

    接口 InitializingBean 里面 afterPropertiesSet()方法

  • 销毁回调

    接口 DisposableBean 里面 destroy() 方法

Spring Bean的后置处理器

  • Bean的后置处理允许在调用方法的时候对bean进行额外的处理

    BeanPostProcess 接口定义回调方法,可以实现自己的依赖逻辑,也可以在Spring容器中通过插入一个或者多个BeanPostProcess的实现来完成实例化,配置和初始化后实现一些自定义的逻辑方法
    通过BeanProcessJ接口提供的order属性,来控制这些接口的执行顺序
    自定义的接口中要实现俩个抽象方法 postProcessBeforeInitialization(Object, String),postProcessAfterInitialization(Object, String)

相关