spring 容器中的bean的完整生命周期一共分为十一步完成。

1.bean对象的实例化

2.封装属性,也就是设置properties中的属性值

3.如果bean实现了BeanNameAware,则执行setBeanName方法,也就是bean中的id值

4.如果实现BeanFactoryAware或者ApplicationContextAware ,需要设置setBeanFactory或者上下文对象setApplicationContext

5.如果存在类实现BeanPostProcessor后处理bean,执行postProcessBeforeInitialization,可以在初始化之前执行一些方法

6.如果bean实现了InitializingBean,则执行afterPropertiesSet,执行属性设置之后的操作

7.调用<bean init-method="">执行指定的初始化方法

8.如果存在类实现BeanPostProcessor则执行postProcessAfterInitialization,执行初始化之后的操作

9.执行自身的业务方法

10.如果bean实现了DisposableBean,则执行spring的的销毁方法

11.调用<bean destory-method="">执行自定义的销毁方法。

第五步和第八步可以结合aop,在初始化执行之前或者执行之后执行一些操作。

以上就是springbean的完整生命周期.

代码如下:

public class Man implements BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean {
private String name; public Man() {
System.out.println("第一步:实例化类");
} public void setName(String name) {
System.out.println("第二步:设置属性");
this.name = name;
} @Override
public void setBeanName(String s) {
System.out.println("第三步:设置bean的名称也就是spring容器中的名称,也就是id值" + name);
} @Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("第四步:了解工厂信息ApplicationContext");
}
//第五步执行初始化之前执行的方法 @Override
public void afterPropertiesSet() throws Exception {
System.out.println("第六步:属性设置后执行的方法");
} public void setup() {
System.out.println("第七步:执行自己配置的初始化方法");
}
//第八步执行初始化之后执行的方法
public void run() {
System.out.println("第九步:执行自身的业务方法");
} @Override
public void destroy() throws Exception {
System.out.println("第十步:执行spring的销毁方法");
} public void destory() {
System.out.println("第十一步:执行自己配置的销毁方法");
} } 指定的类实现了BeanPostProcessor
public class MyBeanPostProcess implements BeanPostProcessor {

    //后处理bean,最重要的两步
@Override
public Object postProcessBeforeInitialization(Object bean, String s) throws BeansException {
System.out.println("第五步:初始化之前执行的方法");
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String s) throws BeansException {
System.out.println("第八步:执行初始化之后的方法");
return bean;
}
} applicationContext.xml中的配置
<bean id="man" class="com.itheima.ioc.springBeanlife.Man" init-method="setup" destroy-method="destory">
<property name="name" value="张三"/>
</bean>
<bean class="com.itheima.ioc.springBeanlife.MyBeanPostProcess"/>

测试
@Test
public void beanlifeTest(){
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Man man=(Man)context.getBean("man");
man.run();
context.close();
}

spring Bean的完整生命周期的更多相关文章

  1. 一张图搞懂Spring bean的完整生命周期

    一张图搞懂Spring bean的生命周期,从Spring容器启动到容器销毁bean的全过程,包括下面一系列的流程,了解这些流程对我们想在其中任何一个环节怎么操作bean的生成及修饰是非常有帮助的. ...

  2. spring bean 容器的生命周期是什么样的?

    spring bean 容器的生命周期流程如下: 1.Spring 容器根据配置中的 bean 定义中实例化 bean. 2.Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置. 3 ...

  3. Spring Bean各阶段生命周期的介绍

    一.xml方式配置bean 二.Aware接口 2.1 BeanNameAware 2.2 BeanFactoryAware 2.3 ApplicationContextAware 2.4 Aware ...

  4. [spring] -- bean作用域跟生命周期篇

    作用域 singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的. prototype : 每次请求都会创建一个新的 bean 实例. request : 每一次HT ...

  5. Spring注解开发系列Ⅲ --- 生命周期

    Bean的生命周期 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解. 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: S ...

  6. Spring 了解Bean的一生(生命周期)

    转载 https://blog.csdn.net/w_linux/article/details/80086950 该篇博客就来了解IoC容器下Bean的一生吧,也可以理解为bean的生命周期. ## ...

  7. day38 09-Spring类的完整生命周期及后处理Bean

    可以配置Bean的这个类的初始化和销毁的方法. 如何销毁这个bean?销毁必须得手动地关闭掉容器才行.而且销毁必须是在scope="singleton"下才有效.因为如果你scop ...

  8. Spring中与bean有关的生命周期

    前言 记得以前的时候,每次提起Spring中的bean相关的生命周期时,内心都无比的恐惧,因为好像有很多,自己又理不清楚,然后看网上的帖子,好像都是那么一套,什么beanFactory啊,aware接 ...

  9. 浅尝Spring注解开发_Bean生命周期及执行过程

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...

随机推荐

  1. C#基础知识之特性

    一.什么是特性 个人理解:特性本质上也是有一种类,通过添加特性,就可以实例化这个特性类:添加特性就是在类.方法.结构.枚举.组件等上面加一个标签,使这些类.方法.结构.枚举.组件等具有某些统一的特征, ...

  2. 重建二叉树[by Python]

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2 ...

  3. day6-基础函数的学习(一)

    今日份目录 1.函数的定义 2.函数的返回值 3.函数的参数 4.函数的局部变量与全局变量 5.名称空间与作用域 6.global与nonlocal 7.高阶函数 继续今日份总结!这个总结也晚了,哎, ...

  4. 【js】this问题

    var obj = { a: 10, b: () => { console.log(this.a); // undefined console.log(this); // Window {pos ...

  5. python2.7添加注释后,代码无法保存

    最近需要学习一下Python,然后开始学习中,使用的编辑环境是Python自带的IDLE Python的注释使用的是   # 然后我再代码添加注释 #Python的注释是这个字符 发现始终无法保存代码 ...

  6. C#自定义应用程序上下文对象+IOC自己实现依赖注入

    以前的好多代码都丢失了,加上最近时间空一些,于是想起整理一下以前的个人半拉子项目,试试让它们重生.自从养成了架构师视觉 搭建框架之后,越来 越看不上以前搭的框架了.先撸个上下文对象加上实现依赖注入.由 ...

  7. mybatis 使用事务处理

    mybatis默认开启事务 以前使用JDBC的时候,如果要开启事务,我们需要调用conn.setAutoCommit(false)方法来关闭自动提交,之后才能进行事务操作,否则每一次对数据库的操作都会 ...

  8. SQL中ON和WHERE的区别

    SQL中ON和WHERE的区别 - 邃蓝星空 - 博客园 https://www.cnblogs.com/guanshan/articles/guan062.html

  9. Linux下的邮件发送

    centos 7的邮件发送 1配置文件vim /etc/mail.rc vim /etc/mail.rc 翻到文件尾部添加 set from=xxxxxxxx@163.com smtp=smtp.16 ...

  10. CentOS7下解决yum install mysql-server 异常:No package mysql-server available.问题

    yum安装mysql-server没有可用包问题解决方法: step 1: wget http://repo.mysql.com/mysql-community-release-el7-5.noarc ...