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&#…

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

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

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 …

Spring的AOP-基本概念

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

为什么python打不开_python文件打不开如何解决

python中打开文件使用的是open()函数&#xff0c;获取文件对象&#xff0c;之后的操作都是相对于文件对象而言的。f open(your_file.txt,r) 就可以打开一个文件进行操作。第二个参数为对文件的操作方式&#xff0c;’w’是写文件&#xff0c;已存在的同名文件会被清空&#xf…

Spring的AOP-底层原理

目录 1.有两种动态代理 第一种&#xff1a;有接口情况&#xff0c;使用JDK动态代理 第二种&#xff1a;无接口情况&#xff0c;使用CGLIB动态代理 2.使用JDK动态代理&#xff0c;使用Proxy类里面的方法创建代理对象 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#…

screnc加密后文件不能执行_芯片加密后还能不能再次使用【详细介绍】

随着信息技术的发展&#xff0c;信息的载体-芯片的运用也越来越多了&#xff0c;随之而来的芯片安全性的要求也越来越高了&#xff0c;各个芯片厂商对芯片保密性要求越来越高&#xff0c;芯片的加密&#xff0c;保证了芯片中的信息的安全性。经常有客户打电话过来问&#xff0c…

Spring的AOP-操作术语

目录 Spring的AOP-操作术语 1.连接点 2.切入点 3.通知 &#xff08;1&#xff09;实际增强的逻辑部分称为通知 &#xff08;2&#xff09;通知有多种类型 4.切面 Spring的AOP-操作术语 1.连接点 类里面那些方法可以被增强&#xff0c;这些方法称为连接点 2.切入点 类里…

向别人网页注入js_区块链研究实验室 | Web3 .js基于以太坊的Javascript API

web3.js是一个库集合&#xff0c;你可以使用HTTP或IPC连接本地或远程以太它节点进行交互。 web3的JavaScript库能够与以太坊区块链交互。 它可以检索用户帐户&#xff0c;发送交易&#xff0c;与智能合约交互等。Version : 1.0.0-beta.36Web3.js API类型eth&#xff1a;Etherum…

Spring的AOP-准备工作

目录 Spring的AOP-准备工作 1.Spring框架一般基于 AspectJ 实现AOP操作 2.基于AspectJ 实现 AOP 操作 &#xff08;1&#xff09;基于xml 配置文件实现 &#xff08;2&#xff09;基于注解方式实现【常用】 3.在项目工程用引入AOP 相关依赖 步骤一&#xff1a;找到依赖包…