Bean的生命周期简单过程
Bean的生命周期可以简单分为11个周期:
1.构造方法。不管是反射获取和静态工厂获取都会调用Bean嵌套类的构造方法。
2.封装属性。封装Bean嵌套 类 的属性,值可以在对应xml文件的<Bean>标签内用<property>设置
3.实现BeanNameAware接口,实现setBeanName()方法。该方法是用来设置Bean的name,传来的值为xml里该Bean的Id值
4.实现BeanFactoryAware接口,实现setBeanFactory()方法。不设置的话有默认DefaultListableBeanFactory类。
5.重点。在Xml文件里配置实现BeanPostProcessor的类,实现接口的postProcessBeforeInitialization()方法,是预处理方法。比如权限的访问可以在这个方法中进行设置
6.实现InitializingBean接口,实现afterPropertiesSet()方法
7.调用自定义Bean初始化函数,初始化的方法需要在对应的类里面配,而且要写到xml文件里的init-method属性中
8.重点。在Xml文件里配置实现BeanPostProcessor的类,实现postProcessAfterInitialization()方法,后处理方法。和第七步在同一类下。
9.调用业务方法,调用获取到对象的方法即可。
10.实现DisposableBean接口,实现destroy()方法,父容器关闭时会调用。
11.实现自定义destory()方法,关闭时调用。
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"xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="MyStudentStaticService" class="com.baidu.student.MyStudentStaticService" init-method="initMy" destroy-method="desMy" factory-method="getStudentService"><property name="name" value="aa"></property></bean><bean class="com.baidu.student.MyBeanProcess"></bean></beans>
Bean嵌套的对象:
package com.baidu.student;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;public class StudentService implements BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean{private String name;public String getName() {return name;}//--------------bean的11个声明周期----------------public StudentService(String a) {System.out.println("1.调用Bean对应的类构造方法");}public void setName(String name) {this.name = name;System.out.println("2.封装属性 属性值在对应的Bean的xml文件里写---"+name);}@Overridepublic void setBeanName(String name) {//这个name==studentServiceSystem.out.println("3.实现BeanNameAware接口,实现setBeanName()方法---"+name);}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {//System.out.println("4.实现BeanFactoryAware接口,实现setBeanFactory()方法----Factory为"+beanFactory.getClass());}//第五步在BeanProcess实现类里@Overridepublic void afterPropertiesSet() throws Exception { System.out.println("6.实现InitializingBean接口,实现afterPropertiesSet()方法");}public void initMy() { System.out.println("7.调用自定义Bean初始化函数,初始化的方法需要在对应的类里面配,而且要写到xml文件里");}//第八步在BeanProcess实现类里public void say() {System.out.println("9.调用业务方法,使用获取到的类的方法");}@Overridepublic void destroy() throws Exception {System.out.println("10.实现DisposableBean接口,实现destroy()方法");}public void desMy() {System.out.println("11.实现自定义destory()方法,关闭时调用");}}
继承Bean类:
package com.baidu.student;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;public class MyBeanProcess implements BeanPostProcessor{//该类需要在xml文件中配置@Overridepublic Object postProcessAfterInitialization(Object bean, String name) throws BeansException {System.out.println("8.重点。在Xml文件里配置实现BeanPostProcessor的类,实现postProcessAfterInitialization()方法,后处理方法");return bean;}@Overridepublic Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {System.out.println(name);System.out.println("5.重点。在Xml文件里配置实现BeanPostProcessor的类,实现接口的postProcessBeforeInitialization()方法,预处理方法");return bean;}}
测试方法:
public class Test2 {@Testpublic void test() {ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans2.xml");StudentService studentService = (StudentService) applicationContext.getBean("MyStudentStaticService");studentService.say();System.out.println(studentService.getName());applicationContext.close();}
}
结果:
Bean的生命周期简单过程相关推荐
- 请解释Spring Bean 的生命周期?
Spring Bean 的生命周期简单易懂.在一个bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态.同样的,当一个bean 不在被调用时需要进行相关的析构操作,并从bean 容器中 ...
- Spring 框架基础(02):Bean的生命周期,作用域,装配总结
本文源码:GitHub·点这里 || GitEE·点这里 一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为B ...
- bean的作用域_Spring 框架基础(02):Bean的生命周期,作用域,装配总结
一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象. 1.XML格式装配 Spring最传统的Be ...
- 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析
文章目录 1.BeanFactory和ApplicationContext的区别? 2. IOC与 Bean的加载过程 ①:初始化容器DefaultListableBeanFactory ②:创建读取 ...
- Spring IOC详解 以及 Bean生命周期详细过程 可以硬刚面试官的文章
面试题 来自面试官发自灵魂深处的拷问:谈谈你对spring的理解: 一脸懵逼的求职者的内心活动:啥? 具体的问题是什么?现在的面试都不按套路出牌了吗? 抛出一个这么大的问题,你让我怎么回答? 一脸 ...
- spring中bean的生命周期(简单5步)
目录 一.概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二.例子讲解 一.概念 1.生命是bean的生命周期? 答:spring其实就是 ...
- IOC容器加载过程及Bean的生命周期和后置处理器
SpringIOC 容器加载过程 第一步:实例化化容器:AnnotationConfigApplicationContext @Configuration @ComponentScan("c ...
- 02.IOC容器加载过程及Bean的生命周期和后置处理器
Spring思维导图 SpringBean加载流程 SpringIOC加载过程-invokeBeanFactoryPostProcessors SpringIOC 容器加载过程 第一步:实例化化容器: ...
- Spring中Bean的生命周期以及IOC与AOP加载过程
首先说一下Bean的生命周期 Bean的生命周期 创建Bean >> 初始化 >> 摧毁 1.创建Bean 当设置Bean为单例时,在spring容器启动时会创建Bean. 当 ...
- java 中 bean 的生命周期
java 中 bean 的生命周期 本篇中会对涉及到的知识点皆做出描述: 首先,我们先了解先虚拟机的类加载机制: 虚拟机把描述类的数据从Class 文件中加载到内存,并对数据进行校验.转换解析和初始化 ...
最新文章
- 【OFDM频域同步】基于OFDM数字电视地面广播系统中频域同步技术matlab仿真
- 数据结构与算法(3)——树(二叉、二叉搜索树)
- swagger ui remove springboot paths
- react-native run-android报错的原因,license问题
- 全自动洗衣机维修教程
- 使用CLI设置WildFly绑定地址并关闭
- DB2报错:SQLCODE=-419, SQLSTATE=42911
- node.js如何制作命令行工具(一)
- delete语句与reference约束 FK_subplan_job_id冲突问题,导致job无法删除解决办法
- node.val java_LeetCode——21. 合并两个有序链表(Java)
- 常用网络通信协议结构图
- 倍福--TwinSAFE的配置
- 80端口为什么要备案_Nginx只允许域名访问网站,禁止使用IP 访问80,443端口
- NUC10 i7 黑苹果Big Sur 11.4 + win10 双系统安装指南
- 60位移动游戏大佬共同发起成立“上方汇”
- Excel图表7——漏斗图
- “海盗湾”副本网站上线:IPFS分布式技术搭建
- 物联网毕业设计 stm32远程智能浇花灌溉系统 - 单片机 嵌入式
- 第九篇:真正理解虚拟 DOM:React 选它,真的是为了性能吗?
- 树莓派-实时视频监控
热门文章
- tensorflow 2.5.0 ( keras )搭建wgan-gp 和 div
- Meta-Programming in Python
- 容器技术Docker K8s 13 容器服务Kubernetes版ACK详解-使用镜像快速创建有状态应用
- CocoaPods 简易教程 Alamofire请求数据 Swift
- 整数与IP地址间的转换
- 32 开漏输出 高电平_MCU输入输出端口设置
- Dijkstra + 堆优化
- 数据库基础(4)函数依赖公理和推论(Armstrong公理),属性闭包和求候选键的技巧
- 【2015-2016 NEERC - G】Graph【构造 + 拓扑排序】
- 对 n = 2,3,...,300, 判断那些 Mersenne 数 M_n=2^n-1 是素数 | matlab 源码