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

目录

 

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)分析测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺

简介&#xff1a;Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发…

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

目录 IOC操作Bean管理XML方式&#xff08;xml自动装配&#xff09; 一.演示自动装配过程 &#xff08;1&#xff09;根据 属性名称 装配 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; &#xff08;2&#xff09;根据 属性类型 装配 &#xff08;2.1&#…

python 判断文件是否被占用_python 在删除文件的时候检测该文件是否被其他线程或者进程占用?...

永远不要忘记&#xff1a;跨平台特性是Python的血液和命脉。在Linux下进程正在使用的文件&#xff0c;是不妨碍其他进程去移动/删除/更名的。因为在Linux下由inode确定文件&#xff0c;inode和文件路径虽然存在对应关系&#xff0c;但本质上是分离的。删除了某进程正在使用的文…

python怎么索引json中的值_使用Python在JSON中查找值

我之前已经成功地解析了JSON文件中的数据&#xff0c;但现在我要实现的函数遇到了问题。我有一个JSON格式的姓名、身份证号码和出生日期列表。我想在Python中得到的是让用户输入一个名字并检索他的身份证号码和出生日期(如果有的话)。这是我的JSON示例文件&#xff1a;[{"…

python3 json模块_详解python 3.6 安装json 模块(simplejson)

JSON 相关概念&#xff1a; 序列化&#xff08;Serialization&#xff09;&#xff1a;将对象的状态信息转换为可以存储或可以通过网络传输的过程&#xff0c;传输的格式可以是JSON&#xff0c;XML等。反序列化就是从存储区域&#xff08;JSON&#xff0c;XML&#xff09;读取反…

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

目录 IOC操作Bean管理XML方式&#xff08;外部属性文件&#xff09; 前情引入&#xff1a; 实验演示&#xff1a; 1.直接配置数据库信息 &#xff08;1&#xff09;配置德鲁伊连接池 &#xff08;2&#xff09;引入德鲁伊连接池jar包 &#xff08;3&#xff09;创建一个b…

python实现关联算法_python使用Apriori算法进行关联性解析

从大规模数据集中寻找物品间的隐含关系被称作关联分析或关联规则学习。过程分为两步&#xff1a;1.提取频繁项集。2.从频繁项集中抽取出关联规则。 频繁项集是指经常出现在一块的物品的集合。 关联规则是暗示两种物品之间可能存在很强的关系。 一个项集的支持度被定义为数据集中…

IOC操作Bean管理注解方式(创建对象)

目录 IOC操作Bean管理注解方式&#xff08;创建对象&#xff09; 1.什么是注解 2.Spring 针对 Bean 管理中创建对象提供注解主要有以下四种 &#xff08;1&#xff09;Component &#xff08;2&#xff09;Service &#xff08;3&#xff09;Controller &#xff08;4&am…

嵌入式操作系统_航天科工海鹰翼辉嵌入式操作系统获自主原创“身份证”

日前&#xff0c;由中国航天科工集团三院三部研发的海鹰翼辉嵌入式操作系统顺利通过中国信息安全评测中心的自主原创评测&#xff0c;成为国内首个具有自主原创“身份证”的嵌入式操作系统。随着物联网和人工智能技术的快速发展&#xff0c;传统武器装备逐步进入智能互联时代&a…

.net core 调用c dll_Qt编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)

一、前言最近这阵子&#xff0c;接了个私活&#xff0c;封装一个开发包俗称的SDK给客户调用&#xff0c;查阅了很多人家的SDK&#xff0c;绝大部分用VC编写&#xff0c;而且VC6.0居多&#xff0c;估计也是为了兼容大量的XP用户及IE浏览器&#xff0c;XP自带了VC6.0运行库&#…

求二叉树高度_LeetCode刷题——第二十五天(平衡二叉树)

这段时间跟二叉树杠上了&#xff0c;接下来还有许多二叉树的题目&#xff0c;虽然已经做了不少了&#xff0c;大多题目都涉及到了递归&#xff0c;也挺好&#xff0c;刚好有机会练习一下递归&#xff0c;但是遇到新的题目还是有点力不从心&#xff0c;还需要看参考答案&#xf…

IOC操作Bean管理注解方式(组件扫描配置)

IOC操作Bean管理注解方式&#xff08;组件扫描配置&#xff09; 开启组件扫描的 细节配置 约定那些类可以扫描&#xff0c;哪些类不可以扫描 bean1.xml配置如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://w…

rabbitmq 持久化_RabbitMQ原理与相关操作(三)消息持久化

现在聊一下RabbitMQ消息持久化&#xff1a;问题及方案描述1.当有多个消费者同时收取消息&#xff0c;且每个消费者在接收消息的同时&#xff0c;还要处理其它的事情&#xff0c;且会消耗很长的时间。在此过程中可能会出现一些意外&#xff0c;比如消息接收到一半的时候&#xf…

视图的数据存放在哪里_分布式 | DBLE 是如何实现视图的?

作者&#xff1a;苏仕祥浩鲸科技 PaaS 组件团队成员&#xff0c;长期从事分库分表中间件的相关解决方案工作&#xff0c;热爱技术&#xff0c;乐于分享。本文来源&#xff1a;原创投稿*爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并…

IOC操作Bean管理注解方式(注入属性@Autowired和Qualifier)

目录 IOC操作Bean管理注解方式&#xff08;注入属性Autowired、Qualifier和Resource&#xff09; 1.基于注解方式实现 属性注入 &#xff08;1&#xff09;Autowired&#xff1a;根据属性类型进行自动装配 第一步&#xff1a; 第二步&#xff1a; &#xff08;2&#xff…

python数据可视化的特点_6 种 Python 数据可视化工具

原标题&#xff1a;6 种 Python 数据可视化工具 英文&#xff1a;Chris Moffitt&#xff0c;编译&#xff1a;伯乐在线/李加庆 简介 在 Python 中&#xff0c;将数据可视化有多种选择&#xff0c;正是因为这种多样性&#xff0c;何时选用何种方案才变得极具挑战性。本文包含了一…

IOC操作Bean管理注解方式(完全注解开发)

IOC操作Bean管理注解方式&#xff08;完全注解开发&#xff09; &#xff08;1&#xff09;创建配置类&#xff0c;替代xml配置文件 需要让Spring 把一个普通的类认为是配置类 结构图&#xff1a; SpringConfig类代码如下&#xff1a; package com.lbj.spring5.comfig;import …

python什么教程好_Python基础教程哪个好

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 对于零基础想学习编程的朋友来说&#xff0c;Python是个非常不错的选择。Python的基础概念是极简的对象化实现&#xff0c;内存管理都采用统一的计数GC&#xff0c;为了提高开发效率而限制了几乎所有的底层操作。Python难度不大&a…

怎么查看ingress的规则_有机合成中常见的基础理论规则

本文总结了本号以往发布的一些有机合成中常见的基础理论规则&#xff0c;方便大家学习交流&#xff0c;点击下方标题链接链接可以查看详细内容&#xff0c;内容不全&#xff0c;小编后面还会更新。在下方菜单“知识技能”中也可以点击查看。马氏规则 扎伊采夫(Zaitsev)消除规则…

Spring的AOP-基本概念

AOP-基本概念 Aspect Oriented Programming&#xff1a;面向切面编程&#xff0c;利用AOP 可以对业务逻辑的各个部分进行隔离。从而使得业务逻辑各部分之间的 “ 耦合度降低 ” 通俗解释&#xff1a;在不修改原有代码的情况下增加功能而不影响原有功能&#xff0c;在主干功能里…