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的生命周期简单过程相关推荐

  1. 请解释Spring Bean 的生命周期?

    Spring Bean 的生命周期简单易懂.在一个bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态.同样的,当一个bean 不在被调用时需要进行相关的析构操作,并从bean 容器中 ...

  2. Spring 框架基础(02):Bean的生命周期,作用域,装配总结

    本文源码:GitHub·点这里 || GitEE·点这里 一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为B ...

  3. bean的作用域_Spring 框架基础(02):Bean的生命周期,作用域,装配总结

    一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为Bean对象. 1.XML格式装配 Spring最传统的Be ...

  4. 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析

    文章目录 1.BeanFactory和ApplicationContext的区别? 2. IOC与 Bean的加载过程 ①:初始化容器DefaultListableBeanFactory ②:创建读取 ...

  5. Spring IOC详解 以及 Bean生命周期详细过程 可以硬刚面试官的文章

    面试题 来自面试官发自灵魂深处的拷问:谈谈你对spring的理解: 一脸懵逼的求职者的内心活动:啥?  具体的问题是什么?现在的面试都不按套路出牌了吗?  抛出一个这么大的问题,你让我怎么回答? 一脸 ...

  6. spring中bean的生命周期(简单5步)

    目录 一.概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二.例子讲解 一.概念 1.生命是bean的生命周期? 答:spring其实就是 ...

  7. IOC容器加载过程及Bean的生命周期和后置处理器

    SpringIOC 容器加载过程 第一步:实例化化容器:AnnotationConfigApplicationContext @Configuration @ComponentScan("c ...

  8. 02.IOC容器加载过程及Bean的生命周期和后置处理器

    Spring思维导图 SpringBean加载流程 SpringIOC加载过程-invokeBeanFactoryPostProcessors SpringIOC 容器加载过程 第一步:实例化化容器: ...

  9. Spring中Bean的生命周期以及IOC与AOP加载过程

    首先说一下Bean的生命周期 Bean的生命周期 创建Bean >> 初始化 >> 摧毁 1.创建Bean 当设置Bean为单例时,在spring容器启动时会创建Bean. 当 ...

  10. java 中 bean 的生命周期

    java 中 bean 的生命周期 本篇中会对涉及到的知识点皆做出描述: 首先,我们先了解先虚拟机的类加载机制: 虚拟机把描述类的数据从Class 文件中加载到内存,并对数据进行校验.转换解析和初始化 ...

最新文章

  1. 【OFDM频域同步】基于OFDM数字电视地面广播系统中频域同步技术matlab仿真
  2. 数据结构与算法(3)——树(二叉、二叉搜索树)
  3. swagger ui remove springboot paths
  4. react-native run-android报错的原因,license问题
  5. 全自动洗衣机维修教程
  6. 使用CLI设置WildFly绑定地址并关闭
  7. DB2报错:SQLCODE=-419, SQLSTATE=42911
  8. node.js如何制作命令行工具(一)
  9. delete语句与reference约束 FK_subplan_job_id冲突问题,导致job无法删除解决办法
  10. node.val java_LeetCode——21. 合并两个有序链表(Java)
  11. 常用网络通信协议结构图
  12. 倍福--TwinSAFE的配置
  13. 80端口为什么要备案_Nginx只允许域名访问网站,禁止使用IP 访问80,443端口
  14. NUC10 i7 黑苹果Big Sur 11.4 + win10 双系统安装指南
  15. 60位移动游戏大佬共同发起成立“上方汇”
  16. Excel图表7——漏斗图
  17. “海盗湾”副本网站上线:IPFS分布式技术搭建
  18. 物联网毕业设计 stm32远程智能浇花灌溉系统 - 单片机 嵌入式
  19. 第九篇:真正理解虚拟 DOM:React 选它,真的是为了性能吗?
  20. 树莓派-实时视频监控

热门文章

  1. tensorflow 2.5.0 ( keras )搭建wgan-gp 和 div
  2. Meta-Programming in Python
  3. 容器技术Docker K8s 13 容器服务Kubernetes版ACK详解-使用镜像快速创建有状态应用
  4. CocoaPods 简易教程 Alamofire请求数据 Swift
  5. 整数与IP地址间的转换
  6. 32 开漏输出 高电平_MCU输入输出端口设置
  7. Dijkstra + 堆优化
  8. 数据库基础(4)函数依赖公理和推论(Armstrong公理),属性闭包和求候选键的技巧
  9. 【2015-2016 NEERC - G】Graph【构造 + 拓扑排序】
  10. 对 n = 2,3,...,300, 判断那些 Mersenne 数 M_n=2^n-1 是素数 | matlab 源码