AI 助理
备案 控制台
开发者社区 开发与运维 文章 正文

spring的核心技术---bean的生命周期加案例分析详细易懂

简介: spring的核心技术---bean的生命周期加案例分析详细易懂

一. spring管理JavaBean的初始化过程(生命周期)

       在Spring框架中, Bean的生命周期是指从它被创建、初始化,到最终被销毁的整个过程。
       需要注意的是,Bean的销毁并不是由Java的垃圾回收器自动处理的,而是由Spring容器负责管理和销毁的。

下面一张图就是bean的整个生命周期图,它的一个初始化过程

Spring Bean的生命周期:

1)通过XML、Java annotation(注解)以及Java Configuration(配置类)
       等方式配置JavaBean,现在我用的是xml配置文件的方式
2)BeanDefinitionReader:解析Bean的定义。在Spring容器启动过程中,
       会将Bean解析成Spring内部的BeanDefinition结构;
       理解为:将spring.xml中的<bean>标签转换成BeanDefinition结构
       有点类似于XML解析
3)BeanDefinition:包含了很多属性和方法。例如:id、class(类名)、
       scope、ref(依赖的bean)等等。其实就是 将bean(例如<bean>)的定义信息
       存储到这个对应BeanDefinition相应的属性中,最终得到List<BeanDefinition>
4)BeanFactoryPostProcessor:是Spring容器功能的扩展接口。JavaBean 初始化之前                先执行自己的业务
5)BeanFactory:bean工厂。它按照我们的要求生产我们需要的各种各样的bean。
6)Aware感知接口:在实际开发中,经常需要用到Spring容器本身的功能资源
       例如:BeanNameAware、ApplicationContextAware等等
       BeanDefinition 实现了 BeanNameAware、ApplicationContextAware
7)BeanPostProcessor:后置处理器。在Bean对象实例化和引入注入完毕后,
8)destory:销毁

二.spring的JavaBean管理中单例模式及原型(多例)模式

       2.1 . 默认为单例,但是可以配置多例

               单例的优点:节约内存;缺点:有变量污染;JavaBean是跟着spring上下文初始化的,容器生对象生,容器死对象死,因为单例只创建一次,所以最开始的时候就创建

               多例的优点:无变量污染;缺点:及其消耗内存;JavaBean是使用的时候才会创建,销毁跟着jvm走

举例说明:假如你有两个儿子,他们两个都想要一个玩具车。

         案例一,买一个,哥哥上午玩,弟弟下午玩,但是上午哥哥玩的时候如果玩具脏了,            刮花了,那么对于弟弟而言这个玩具已经不是原有车的状态,但是给我们省钱了=====》单例

       案例二:买两个,一人一个,这样就不存在污染,各玩各的,但是我们的钱包就扁了======》多例

       2.2.举例论证

               2.2.1 默认单例

      这个就是那辆车,bean对象,这里设了一个变量属性 num 来验证是不是单例,变量改变了

package com.zking.beanlife;
import java.util.List;
public class ParamAction {
  private int age;
  private String name;
  private List<String> hobby;
  private int num = 1;
  // private UserBiz userBiz = new UserBizImpl1();
  public ParamAction() {
    super();
  }
  public ParamAction(int age, String name, List<String> hobby) {
    super();
    this.age = age;
    this.name = name;
    this.hobby = hobby;
  }
  public void execute() {
    // userBiz.upload();
    // userBiz = new UserBizImpl2();
    System.out.println("this.num=" + this.num++);
    System.out.println(this.name);
    System.out.println(this.age);
    System.out.println(this.hobby);
  }
}

       再模拟方法数据,进行测试

package com.zking.beanlife;
public class InstanceFactory {
  public void init() {
    System.out.println("初始化方法");
  }
  public void destroy() {
    System.out.println("销毁方法");
  }
  public void service() {
    System.out.println("业务方法");
  }
}

      然后,进行xml文件配置,

       最后前台测试:是否默认为单例模式,并且变量被污染了,num值发生了变化,说明被污染了,默认为单例模式

        2.2.2 设置多例

      原来的代码不变,我们再xml配置文件中,选择多例

        前台测试结果,发现num值没有被污染

2.2.3单例与多例的初始化的时间点

      当是多例的时候,不会初始化

       而当单例的时候,会初始化

三.总结

单例和多例的选择也需要考虑性能和资源消耗。单例可以节省资源,但可能存在线程安全问题;多例可以保证独立性,但会增加对象创建和销毁的开销。单例适合那些无状态或者线程安全的Bean,多例适合那些有状态的Bean或者需要每次请求都创建一个新实例的情况

姿势不太差
目录
相关文章
石小浪♪
|
9天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
石小浪♪
44 9
Spring从入门到入土(bean的一些子标签及注解的使用)
杀死一只知更鸟debug
|
26天前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
杀死一只知更鸟debug
28 3
spring复习02,xml配置管理bean
java冯坚持
|
5天前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
java冯坚持
57 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
最好zzz
|
9天前
|
存储 Java API
简单两步,Spring Boot 写死的定时任务也能动态设置:技术干货分享
【10月更文挑战第4天】在Spring Boot开发中,定时任务通常通过@Scheduled注解来实现,这种方式简单直接,但存在一个显著的限制:任务的执行时间或频率在编译时就已经确定,无法在运行时动态调整。然而,在实际工作中,我们往往需要根据业务需求或外部条件的变化来动态调整定时任务的执行计划。本文将分享一个简单两步的解决方案,让你的Spring Boot应用中的定时任务也能动态设置,从而满足更灵活的业务需求。
最好zzz
39 4
猿java
|
9天前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
猿java
36 1
Codelinghu
|
11天前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
Codelinghu
12 1
椰椰椰耶
|
12天前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
椰椰椰耶
88 2
猿java
|
12天前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
猿java
45 1
土木林森
|
26天前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
土木林森
51 5
蓝易云
|
25天前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
蓝易云
25 1

热门文章

最新文章

  • 1
    Spring Boot 中文乱码问题解决方案汇总
  • 2
    Spring-boot+Dubbo应用启停源码分析
  • 3
    深入解析@SpringBootApplication注解:简化Spring Boot应用的配置
  • 4
    深入理解Spring--动手实现一个简单的SpringIOC容器
  • 5
    基于Spring3 MVC实现基于HTML form表单文件上传
  • 6
    猿创征文|Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway at this time.
  • 7
    【Spring实战】—— 15 Spring JDBC模板使用
  • 8
    Spring IOC 容器源码分析
  • 9
    第13章 SpringBoot集成模板引擎
  • 10
    Spring Assert主张 (参议院检测工具的方法-主张)
  • 1
    Spring Boot中的@Lazy注解:概念及实战应用
    136
  • 2
    docker部署postgresql数据库和整合springboot连接数据源
    143
  • 3
    spring kafka的问题集锦
    142
  • 4
    【spring】如何解决循环依赖
    202
  • 5
    【springboot】logback配置
    72
  • 6
    Python 爬虫:Spring Boot 反爬虫的成功案例
    638
  • 7
    JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
    543
  • 8
    Spring Boot版本管理
    46
  • 9
    Spring的@Retryable实现方法重试
    65
  • 10
    Spring Boot可以同时处理多少请求?
    111
  • 相关课程

    更多
  • 全面讲解Spring Cloud Alibaba技术栈(知识精讲+项目实战)第一阶段
  • 精通Spring Cloud Alibaba
  • 微服务框架 Spring Cloud 快速入门
  • Java Web开发系列课程 - Spring框架入门
  • Spring Boot 2.5.x开发实战
  • Spring Cloud微服务架构设计与开发实战
  • 相关电子书

    更多
  • 云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧
  • 微服务架构模式与原理Spring Cloud开发实战
  • 阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
  • 相关实验场景

    更多
  • 函数计算入门-HelloWorld应用开发
  • 从零搭建Spring Boot的Hello World
  • 下一篇
    AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片

    玻璃钢生产厂家湖南多彩玻璃钢雕塑方法玻璃钢雕塑有哪些优点福州抽象玻璃钢雕塑哪家便宜江苏动物玻璃钢雕塑定做宜春佛像玻璃钢雕塑玻璃钢蔬菜雕塑供应聊城玻璃钢雕塑制作厂家商场美陈魔方性价比高的玻璃钢卡通雕塑江西彩绘动物玻璃钢造型雕塑制作遵义玻璃钢伟人像雕塑各大商场圣诞美陈天津创意玻璃钢雕塑生产厂家兴宁玻璃钢仿铜雕塑深圳常用商场美陈批发源城玻璃钢花盆花器南充玻璃钢人物雕塑价格仿玉玻璃钢雕塑价格浙江大型商场美陈多少钱南平玻璃钢雕塑凳子福建走廊商场美陈生产公司河北玻璃钢雕塑生产厂家室内商场美陈有哪些玻璃钢雕塑产品技术指标说明沈阳玻璃钢雕塑一般多少钱湖南酒店艺术玻璃钢雕塑咸阳玻璃钢雕塑独创的玻璃钢雕塑湖南商场美陈雕塑价格定西玻璃钢雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化