玖叶教程网

前端编程开发入门

Spring beans 生命周期(life cycle)

管理 bean 生命周期

下图描述了Spring 如何管理器容器中 bean 的生命周期:

任何IoC 容器(包括Spring 在内)的一个重要部分是,可以构建bean,使得它们可以在生命周期中的某些点接收通知。

  • Bean 实例化和DI
  • 检查Spring Awareness
  • 创建Bean 生命周期回调
  • 销毁Bean 生命周期回调

创建Bean 会经过一系列的步骤,主要包括:

  • 实例化Bean 对象;
  • 设置Bean 属性;
  • 如果通过各种Aware 接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依赖。具体包括BeanNameAware、BeanFactoryAware 和 ApplicationContextAware,分别会注入 Bean ID、Bean Factory 或者 Application Context。
  • 如果有Bean实现了BeanPostProcessor接口( 后置处理器 ),则会回调该接口的postProcessBeforeInitialzation()方法。
  • @PostConstruct 标注的方法。
  • 如果Bean实现了InitializingBean接口,则会回调该接口的afterPropertiesSet()方法。
  • 如果Bean配置了init-method方法,则会执行init-method配置的方法。
  • 如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessAfterInitialization()方法。

此时 Bean 可以用了。

当容器关闭的时候,则会调用:

  • @PreDestroy 标注的方法
  • DisposableBean.destroy()
  • 自定义的 destroy-method
  • 对象自定义的 finalize 方法

Spring Bean 有5个作用域,其中最基础的有下面2种:

  • Singleton,Spring 默认作用域,也就是每个 IOC 容器创建唯一的一个Bean实例。
  • Prototype,针对每一个 getBean 请求,容器都会单独创建一个Bean 实例。

如果是Web 容器,则支持另外3种作用域:

  • Request,为每个 HTTP 请求创建单独的Bean 实例。
  • Session,Bean 实例的作用域是Session 范围。
  • GlobalSession,用于 Portlet 容器,因为每个 Portlet 有单独的Session,GlobalSession 提供一个全局性的 HTTP Session。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言