spring bean的初始化流程按照以下顺序走:
1.执行 构造方法。
一般为无参,下面为有参时的配置
- <bean id="user" class="kevin.User">
- <constructor-arg value="123"></constructor-arg>
- <constructor-arg value="male"></constructor-arg>
- <property name="name" value="Kevin"></property>
- <property name="age" value="99"></property>
- </bean>
2.执行 setter方法。
3.执行实现了aware接口的相关方法(可能有多个aware方法)
4.init方法前后
(1) BeanPostProcessor的postProcessorBeforeInitialization方法
(2)InitializingBean 的 afterPropertiesSet() 方法 (接口)
(3) init-method 方法 (xml 文件里)
- <bean id="helloWorld" class="com.spring.lifecycle.HelloWorld"
- init-method="customInit" destroy-method="customDestroy">
- <property name="hello" value="hello world!"></property>
- </bean>
(4) BeanPostProcessor的postProcessorAfterInitialization方法
以上几步,可以全没有,可以有其中的几步,但是整体的执行顺序是自上而下的,就跟web.xml执行道理一样。
重点说下第3步,该步中有可以细分各个aware 方法,顺序为:
(1) BeanNameAware接口的 setBeanName() 方法。
(2) BeanClassLoaderAware 接口的 setBeanClassLoader() 方法。
(3) BeanFactoryAware 接口的 setBeanFactory() 方法。
(4) ResourceLoader接口的 set...() 方法。(ApplicationContext使用)
(5) ApplicationEventPublisherAware 接口的 set...() 方法。(ApplicationContext使用)
(6) MessageSourceAware 接口的 set...() 方法。(ApplicationContext使用)
(5) ApplicationContextAware 接口的 set...() 方法。(ApplicationContext使用)
(6) ServletContextAware 接口的 set...() 方法。(WebApplicationContext使用,仅对web有用)
以上这几小步也是按照顺序执行的,可以全有,可以全没有,也可以有其中的一步或几步
spring框架自己的实现类就是按照这种流程走的。
spring框架就几个核心的接口,然后大部分都是实现类,来实现这一个或多个核心接口。
相关推荐
Spring Bean创建初始化流程
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
3、通过spring的xml bean配置或bean注解指定初始化方法,如下面实例的initMethod方法通过@bean注解指定。 销毁的时候实现的方法 1、通过java提供的@PreDestroy注释; 2、通过实现spring提供的DisposableBean接口,并...
主要介绍了Spring Bean的初始化和销毁,结合实例形式详细分析了Spring Bean的初始化和销毁相关配置、使用方法及操作注意事项,需要的朋友可以参考下
spring的初始化,可以让初学者了解soring的开发过程,让开发轻松进入开发大门。
springBean加载过程源码解析文档,附有代码类名和行数
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
初始化后可访问Spring管理的Bean
下面小编就为大家带来一篇浅谈spring容器中bean的初始化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring源码学习六:bean初始化1
主要介绍了Spring Bean初始化及销毁多种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本篇将对定义在 XMl 文件中的 bean,从静态的的定义到变成可以使用的对象的过程,即 bean 的加载和获取的过程进行一个整体的了解
Spring 源码分析(Bean的初始化) 前言 本篇文章是个人第一次看spring源码并总结,同时也参考了下面这篇博客。基本也是按照他的思路来理解的。这也算是第一版个人简易理解。也算是窥见spring的冰山一角,之后也会...
NULL 博文链接:https://bijian1013.iteye.com/blog/2374256
Spring 延迟实例化
为了便于这些工作的设计,Spring IoC 容器提供了相关的功能,可以让应用定制 Bean 的初始化和销毁过程。 Bean 生命周期 的 init-method 属性或 @Bean 注解的 initMethod 属性),那么将调用该方法。 如果存在与 ...
1.Spring核心讲解与内容详述.mp4;`-{0B:r2E;]$u+m 2.Spring源码环境搭建与执行流程解析.mp4/j1};W;...14.Spring单例Bean的初始化与缓存流程详解.mp4%U7X2[;{3z 15.Spring对象属性赋值与作用域源码解
只需要把需要注册进容器的bean声明为@Component即可,spring会自动扫描到这个Bean完成初始化并加载到spring上下文容器。 而当你在项目启动时需要提前做一个业务的初始化工作时,或者你正在开发某个中间件需要完成...
附件是在Spring Boot项目中使用CommandLineRunner接口来执行一些资源初始化的演示,该文档也详细的介绍了在@Component注解的类中可以注入@Controller,并把获取的数据存放到其他Bean类中的私有静态变量,算是对自己...
【课程介绍】:Spring启动时读取应用提供的Bean配置信息,在Spring容器中生成对应的Bean配置注册表...从源码证明springbean的实例化过程.mp44.spring的核心getSingleton方法.mp45.springbean的生成与循环依赖.mp46.getB