Spring Bean 的初始化过程

原创 2018年04月14日 23:19:14

Bean 的初始化过程

    一个类同时实现了 BeanNameAware, BeanFactoryAware, ApplicationContextAware, BeanPostProcessor, InitializingBean, DisposableBean接口时,Bean 的初始化过程为:.

  1. 调用 BeanNameAware 的 setBeanName 方法
  2. 调用 BeanFactoryAware 的 setBeanFactory 方法
  3. 调用 ApplicationContextAware 的 setApplicationContext
  4. 调用 InitializingBean 的 afterPropertiesSet 或者没有实现这个接口,但指定了@Bean(initMethod=”不加括号的方法名”),会执行这个方法
  5. 调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法
  6. 调用 BeanPostProcessor 的 postProcessAfterInitialization 方法
  7. Bean 初始化完成,可以被使用
  8. 容器关闭前,调用 DisposableBean 的 destroy 方法

    但是在整个系统中,BeanPostProcessor的实现类只需要有一个即可,Spring 检测到它的存在时,每个 Bean 被初始化时,都会调用它的方法。注意,是所有 Bean 都会调用它的方法。
    如果一个类除BeanPostProcessor外,实现了其他的接口,有另外一个类单独实现了BeanPostProcessor接口,那么上面的初始化过程中,第 4 步和第 5 步调换位置。

自测结果:

# Aware 的子接口的顺序跟下面的一致
BeanNameAware...setBeanName
BeanFactoryAware...setBeanFactory
ApplicationContextAware...setApplicationContext
InitializingBean...afterPropertiesSet
BeanPostProcessor...postProcessBeforeInitialization
BeanPostProcessor...postProcessAfterInitialization
com.p7.boot.test.Clazz@2abf4075
DisposableBean...destroy

Bean 实现的接口解析

import org.springframework.beans.factory.BeanNameAware;
public void setBeanName(String beanName) {
    // 在当前类中可以获取到当前 Bean 的名字
}

import org.springframework.beans.factory.BeanFactoryAware;
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
    // 在当前类中可以获取到 BeanFactory 实例
}

import org.springframework.context.ApplicationContextAware;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    // 在当前类中可以获取到 ApplicationContext 实例
}

import org.springframework.beans.factory.InitializingBean;
public void afterPropertiesSet() throws Exception {
    // initMethod 方法
}

import org.springframework.beans.factory.DisposableBean;
public void destroy() throws Exception {
    // destroyMethod 方法
}

import org.springframework.beans.factory.config.BeanPostProcessor;
public Object postProcessAfterInitialization(Object bean, String arg1) throws BeansException {
    // 可以对对象进行加工,比如说加个初始化 Bean 时的开始时间
    return bean;
}
public Object postProcessBeforeInitialization(Object bean, String arg1) throws BeansException {
    // 可以对对象进行加工,比如说加个初始化 Bean 时的结束时间
    return bean;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30038111/article/details/79945419

Spring Bean初始化过程

Spring Bean初始化过程 1. public class DispatcherServlet extends FrameworkServlet  public abstract class...
  • wuxifu001
  • wuxifu001
  • 2016-07-30 17:56:05
  • 665

Spring原理(一)IoC容器的初始化过程之BeanFactory

IoC容器的初始化过程 IoC容器的启动过程包括BeanDefinition的Resource定位、载入和注册三个基本过程。 但spring是把这三个过程分开的,并用不同的模块来完...
  • wutian713
  • wutian713
  • 2016-09-22 19:17:36
  • 1083

spring源码学习 - 注解bean的初始化过程

解析方式上一篇文章中提到spring初始化进行配置解析的时候会根据命名空间来选择不同的解析方式 - 当命名空间是"http://www.springframework.org/schema/bean...
  • ya52glp
  • ya52glp
  • 2017-01-03 22:25:14
  • 371

Spring中Bean初始化过程

1、解析配置文件得到Bean名称集合和定义集合public class DefaultListableBeanFactory .....{ ...... // Bean定义集合 ...
  • liupeng_qwert
  • liupeng_qwert
  • 2017-08-15 22:31:35
  • 125

Spring-Bean初始化顺序

InitializingBean     Spirng的InitializingBean为bean提供了定义初始化方法的方式。InitializingBean是一个接口,它仅仅包含一个方法:after...
  • hsgao_water
  • hsgao_water
  • 2016-09-01 18:07:28
  • 6999

Spring 初始化过程

Spring 4.2.5 从xml中加载bean定义的过程
  • liutang090510
  • liutang090510
  • 2016-09-03 19:34:15
  • 2966

SpringAOP模块初始化过程

SpringAOP模块初始化过程         SpringAOP模块的初始化过程可以分为如下几个步骤: 1,读取配置,生成Advisor、PointCut等信息。      ...
  • hongxingxiaonan
  • hongxingxiaonan
  • 2015-12-17 09:03:47
  • 1425

Spring中Bean初始化的三种方法

常用的设定方式有以下三种: 通过实现 InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法; 通过 元素的 init-method/destr...
  • HEYUTAO007
  • HEYUTAO007
  • 2015-12-16 13:45:33
  • 27852

怎样让spring重新初始化所有的bean

package x.x;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward...
  • ebookbug
  • ebookbug
  • 2005-06-28 14:40:00
  • 2015

做一个合格的程序猿之浅析Spring IoC源码(十)Spring Bean的初始化顺序

①首先执行的是构造函数 ②然后执行的BeanNameAware这个接口中的方法 ③然后执行的是BeanFactoryAware这个接口中的方法 ④执行InitializingBean接口中的af...
  • linuu
  • linuu
  • 2016-03-12 13:12:00
  • 1925
收藏助手
不良信息举报
您举报文章:Spring Bean 的初始化过程
举报原因:
原因补充:

(最多只允许输入30个字)