zoukankan      html  css  js  c++  java
  • Spring Bean的生命周期和作用域

    一、Bean的作用域
    在Bean容器启动会读取bean的xml配置文件,然后将xml中每个bean元素分别转换成BeanDefinition对象。在BeanDefinition对象中有scope 属性,就是它控制着bean的作用域。
    Spring框架支持5种作用域,有三种作用域是当开发者使用基于web的ApplicationContext的时候才生效的。下面就是Spring直接支持的作用域了,当然开发者也可以自己定制作用域

    Spring作用域:

      1、单例Singleton:在整个应用中,只创建bean的一个实例,在IOC容器中共享,容器创建的时候就实例化了这个bean

      2、原型Prototype:每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例,相当于每次都new bean(),容器创建的

    时候没有实例化了bean,而是请求获取的时候才会创建对象

      3、会话Session:只是在Web应用中,为每个http session创建一个bean实例

      4、请求Rquest:只是在Web应用中,为每个http请求创建一个bean实例,这个bean实例只在当前request请求内有效,请求结束的时候,这个

    bean实例被销毁

      5、全局会话GlobalSession:只是在Web应用中使用,仅在使用portlet context的时候有效

    二.Bean的生命周期

    流程:

      1、Spring对bean进行实例化

      2、Spring将值和bean的引用注入到bean对应的属性中

      3、如果bean实现了BeanNameAware接口, Spring将bean的ID传递给setBeanName()

      4、如果bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory(),将BeanFactory容器实例传入

      5、如果bean实现了ApplicationContextAware接口, Spring将调用setApplicationContext(),将bean所在的应用上下文的引用传入

    进来

      6、如果bean实现了BeanPostProcessor接口, Spring将调用它们的postProcessBeforeInitialization()

      7、如果bean实现了InitializingBean接口, Spring将调用它们的afterPropertiesSet()。类似地,如果bean使用init-method声

    明了初始化方法,该方法也会被调用

      8、如果bean实现了BeanPostProcessor接口, Spring将调用它们的postProcessAfterInitialization()

      9、此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁

      10、如果bean实现了DisposableBean接口, Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了

    销毁方法,该方法也会被调用

  • 相关阅读:
    小项目-购物网站个别功能的具体实现思路-中(新手)
    小项目-购物网站个别功能的具体实现思路-上(新手)
    性能测试需具备的知识点
    二.re库介绍
    一.正则表达式
    十六.MySQL存储过程
    十五.自定义函数
    十四.运算符和函数
    十三.无限极分类表设计--自身连接
    十二.连接的语法结构
  • 原文地址:https://www.cnblogs.com/Chencheno/p/11753036.html
Copyright © 2011-2022 走看看