目录

IOC操作Bean管理XML方式(bean 的生命周期)

1.bean 的生命周期(在单例模式下的生命周期)

(1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象)

(2)为 bean 的属性设置值、或者对其他外部 bean 的引用(调用set 方法注入属性)

(3)调用 bean 的初始化方法(需要我们进行配置初始化的方法)

(4)bean 可以使用了(也就是说对象获取到了)

(5)当容器关闭的时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

2.演示bean  的生命周期

步骤1:创建一个bean包,并且创建一个Orders类

步骤2:新建一个bean4.xml

步骤3:测试方法调用以及手写销毁方法调用

步骤4:实验结果

3.补充:bean 的后置处理器,bean的生命周期有七步

4.演示添加后置处理器效果

(1)创建一个MyBeanPost 类,实现接口 BeanPostProcessor,创建后置处理器

(2)上面的MyBeanPost类实例出来,但是就是一个普通类,咱们Spring 并不知道这是一个后置处理器,所以我们需要进行配置

(3)分析测试结果


IOC操作Bean管理XML方式(bean 的生命周期)

什么是生命周期:从一个对象创建到一个对象销毁的过程就是生命周期

bean 的生命周期:创建-DI-初始化-使用-销毁

{}的内容最先输出,其次是构造器,然后是赋值


1.bean 的生命周期(在单例模式下的生命周期)

(1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象)

package com.lbj.spring5.bean;public class Orders {//为了明显,我们写一个无参构造方法public Orders(){System.out.println("第一步:执行无参构造创建bean实例");}private String  oname;public void setOname(String oname) {this.oname = oname;}
}

(2)为 bean 的属性设置值、或者对其他外部 bean 的引用(调用set 方法注入属性)

xml

java

(3)调用 bean 的初始化方法(需要我们进行配置初始化的方法)

java

xml

(4)bean 可以使用了(也就是说对象获取到了)

java

(5)当容器关闭的时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

java

xml

执行到这一步,其实并没有让bean 销毁

需要手动让bean 实例销毁,意思是,如果我此时方法中不主动去调用销毁方法,我的bean.xml配置文件中也不会执行销毁

TestSpring5Demo1的测试代码如下:

package com.lbj.spring5.testdemo;import com.lbj.spring5.bean.Orders;
import com.lbj.spring5.collectiontype.Book;
import com.lbj.spring5.collectiontype.Course;
import com.lbj.spring5.collectiontype.Student;
import com.lbj.spring5.factorybean.Mybean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring5Demo1 {@Testpublic void tsetBean1(){//        ApplicationContext context=
//                new ClassPathXmlApplicationContext("bean4.xml");//使用的是ApplicationContext的子类进行调用close()方法,是一种向下转型ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("bean4.xml");Orders orders=context.getBean("orders", Orders.class);System.out.println("第四步 获取创建 bean 实例对象");System.out.println(orders);
//5.手动让bean 实例销毁context.close();}
}

2.演示bean  的生命周期

步骤1:创建一个bean包,并且创建一个Orders类

Orders类代码如下:

package com.lbj.spring5.bean;public class Orders {//1.为了明显,我们写一个无参构造方法public Orders(){System.out.println("第一步:执行无参构造创建bean实例");}private String  oname;
//2.调用set 方法public void setOname(String oname) {this.oname = oname;System.out.println("第二步 调用 set 方法设置属性值");}//3.创建执行的初始化方法,然后去bean中配置,让这个普通的初始化方法执行public void initMethod(){System.out.println("第三步:执行初始化的方法");}//    5.创建销毁的方法public void destoryMethod(){System.out.println("第五步:执行销毁的方法");}
}

步骤2:新建一个bean4.xml

在bean4.xml 中把对象配置出来

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><bean id="orders" class="com.lbj.spring5.bean.Orders" init-method="initMethod" destroy-method="destoryMethod"><property name="oname" value="华为手机"></property>
</bean>
</beans>

步骤3:测试方法调用以及手写销毁方法调用

package com.lbj.spring5.testdemo;import com.lbj.spring5.bean.Orders;
import com.lbj.spring5.collectiontype.Book;
import com.lbj.spring5.collectiontype.Course;
import com.lbj.spring5.collectiontype.Student;
import com.lbj.spring5.factorybean.Mybean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring5Demo1 {@Testpublic void tsetBean1(){//        ApplicationContext context=
//                new ClassPathXmlApplicationContext("bean4.xml");//使用的是ApplicationContext的子类进行调用close()方法,是一种向下转型ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("bean4.xml");Orders orders=context.getBean("orders", Orders.class);System.out.println("第四步 获取创建 bean 实例对象");System.out.println(orders);
//5.手动让bean 实例销毁context.close();}
}

步骤4:实验结果

3.补充:bean 的后置处理器,bean的生命周期有七步

(1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象)

(2)为 bean 的属性设置值、或者对其他外部 bean 的引用(调用set 方法注入属性)

(2.1)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization

(3)调用 bean 的初始化方法(需要我们进行配置初始化的方法)

(3.1)把bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization

(4)bean 可以使用了(也就是说对象获取到了)

(5)当容器关闭的时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

4.演示添加后置处理器效果

(1)创建一个MyBeanPost 类,实现接口 BeanPostProcessor,创建后置处理器

按住ctrl,鼠标点击接口就会进入到接口内查看接口中的抽象方法

进入接口后:

把接口的这两个抽象方法复制出来到MyBeanPost 类

复制到MyBeanPost后,代码如下:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;public class MyBeanPost implements BeanPostProcessor{@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}
}

修改代码后如下:

package com.lbj.spring5.bean;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.lang.Nullable;public class MyBeanPost implements BeanPostProcessor{@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("在初始化之前执行的方法");return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("在初始化之后执行的方法");return bean;}
}

(2)上面的MyBeanPost类实例出来,但是就是一个普通类,咱们Spring 并不知道这是一个后置处理器,所以我们需要进行配置

bean4.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><bean id="orders" class="com.lbj.spring5.bean.Orders" init-method="initMethod" destroy-method="destoryMethod"><property name="oname" value="华为手机"></property>
</bean><!--配置后置处理器--><!--这么做之后,我们的所有bean 实例都会自动添加上后置处理器--><!--MyBeanPost 类中的方法也会被执行--><bean id="myBeanPost" class="com.lbj.spring5.bean.MyBeanPost"></bean>
</beans>

(3)分析测试结果

IOC操作Bean管理XML方式(bean 的生命周期)相关推荐

  1. IOC操作Bean管理XML方式(外部属性文件)

    目录 IOC操作Bean管理XML方式(外部属性文件) 前情引入: 实验演示: 1.直接配置数据库信息 (1)配置德鲁伊连接池 (2)引入德鲁伊连接池jar包 (3)创建一个bean6.xml配置文件 ...

  2. IOC操作Bean管理XML方式(xml自动装配)

    目录 IOC操作Bean管理XML方式(xml自动装配) 一.演示自动装配过程 (1)根据 属性名称 装配 步骤一: 步骤二: 步骤三: (2)根据 属性类型 装配 (2.1)根据 类型 自动装配产生 ...

  3. IOC操作Bean管理XML方式(bean的作用域)

    目录 IOC操作Bean管理XML方式(bean的作用域) 1.在Spring 里面,设置创建 bean 实例是单实例还是多实例的方式 (1)在Spring 配置文件bean 标签里面有属性(scop ...

  4. IOC操作Bean管理XML方式(FactoryBean)

    目录 IOC操作Bean管理XML方式(FactoryBean) Spring 有两种类型的bean 第一种:是普通的 bean 第二种:工厂bean FactoryBean 第一步:创建类,让这个类 ...

  5. IOC操作Bean管理XML方式(注入集合类型属性)

    目录 IOC操作Bean管理XML方式(注入集合类型属性) (1)首先进行环境的搭建和准备 (2)创建一个类:用来完成集合类型属性注入 (3)在Spring 配置文件进行配置 (4)编写一个测试类进行 ...

  6. IOC操作Bean管理XML方式(注入空值和特殊符号)

    IOC操作Bean管理XML方式(注入空值和特殊符号) 目录 IOC操作Bean管理XML方式(注入空值和特殊符号) (1)通过null标签注入空值: 标签注入空值 (2)属性值中包含特殊符号: 方法 ...

  7. IOC操作Bean管理XML方式(有参构造注入属性)

    IOC操作Bean管理XML方式 目录 有参构造注入属性 (1)步骤(创建类,定义属性,创建属性对应的有参构造方法): (2)步骤:在Spring 的xml配置文件中进行配置 (3)步骤:进行测试 结 ...

  8. Spring——Bean管理-xml方式进行属性注入

    目录 一.xml方式创建对象 二.xml方式注入属性 第①种方式注入:set方法注入 第②种方式注入:有参构造函数注入 constructor-arg:通过构造函数注入 用name标签属性: 不按照顺 ...

  9. [Spring5]IOC容器_Bean管理XML方式_创建对象_set注入属性and有参构造注入属性

    IOC操作 Bean管理 什么是Bean管理 1.Bean管理指的是两个操作: a.Spring创建对象 b.Spring注入属性 2.Bean管理操作有两种方式 a.基于xml配置文件方式实现 b. ...

最新文章

  1. spring boot 不连接数据库启动
  2. Python 技术篇 - 通过代码查看文本的编码类型实例演示,如何查看文件的编码类型,文件编码查看方法
  3. Python之多进程
  4. php-5.4.6-win64,php5.4(64位)+apache2.4(64位)+mysql环境搭建
  5. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
  6. cobol_在尝试之前不要讨厌COBOL
  7. BSD socket编程学习
  8. 关于大小端、位域的一些概念详解
  9. 微信公众平台 使用JS-SDK实现拍照上传功能
  10. 凸优化读书笔记01(仿射集合、仿射组合,仿射包)
  11. 计算机系统时间设置打不开,电脑时间或日期不对的修改方式
  12. 【node.js】报错Cannot mix different versions of joi schemas解决方法
  13. 01-05.经典市场营销 Marketing公开课《科特勒营销管理》(一)
  14. 给图片添加文字(换行)水印
  15. 文化IP能量有多大,舞台就有多大
  16. 可再生能源虽好,也需电网配套跟上
  17. sql 修改字段中部分值
  18. python爬虫——使用requests库和xpath爬取猎聘网职位详情
  19. Task 3: Subword Models (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)
  20. SCMP供应链管理发展趋势

热门文章

  1. 获取项目根路径,并在其下创建一个名称为userData 的目录。
  2. 有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接...
  3. 安卓学习第9课——计时器chronometer
  4. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
  5. Flex 学习笔记------FLACC Crossbridge
  6. 关于面试宝典中的各个问题(一)
  7. Leetcode--347. 前k个高频元素
  8. 计算机网络——CSMA/CD最小帧长相关题目
  9. python使用shell命令_python 调用shell命令的方法
  10. anaconda+cuda+cudnn+pytorch安装踩坑大全