【推荐】深入浅出bean的生命周期

简介: 【推荐】深入浅出bean的生命周期

1.spring 管理JavaBean的过程(生命周期)

     在Spring框架中,Bean的生命周期是指从它被创建、初始化,到最终被销毁的整个过程。

       需要注意的是,Bean的销毁并不是由Java的垃圾回收器自动处理的,而是由Spring容器负责管理和销毁的。

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

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

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

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

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

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

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

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

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

2.2.举例论证

               2.2.1 默认单例

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

package com.sy.beanlife;
import com.sy.ioc.service.UserService;
import com.sy.ioc.service.impl.UserServiceImp;
import com.sy.ioc.service.impl.UserServiceImpl;
import java.util.List;
public class ParamAction {
  private int age;
  private String name;
  private List<String> hobby;
  private int num = 1;
  private UserService userService=new UserServiceImp();
  // 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++);
    userService = new UserServiceImpl();
    System.out.println(this.name);
    System.out.println(this.age);
    System.out.println(this.hobby);
  }
}

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

package com.sy.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单例与多例的初始化的时间点

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

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

今天小编的分享就结束呐,生活总是需要不断去学习新的知识,多想想然后再去实操,持之以恒,经验和思维都会发生转变,我们要保持谦虚学习和自信的态度,各位加油!


目录
相关文章
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
214 32
|
存储 SQL PHP
探索PHP:从入门到精通的旅程
在数字时代的浪潮中,掌握一门编程语言变得尤为重要。PHP,作为一种广受欢迎的服务器端脚本语言,因其易学性和灵活性而备受推崇。本文将带你领略PHP的魅力,从基础语法入手,逐步深入到高级应用,最终实现一个功能完整的在线留言板。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你打开一扇通往PHP世界的大门。
|
Ubuntu 物联网 Linux
AliOS Things、Ubuntu、Linux、MacOS、Window
AliOS Things、Ubuntu、Linux、MacOS 和 Windows 都是操作系统,用于控制计算机或其他设备的硬件和软件资源。它们有以下不同点和特点: -AliOS Thing
671 2
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
127 0
|
Java 应用服务中间件 Maven
08分布式电商项目 - 框架搭建
08分布式电商项目 - 框架搭建
88 0
|
虚拟化
关于 VMware虚拟机在NAT模式下,如何配置网络连接之简单易懂的过程。
关于 VMware虚拟机在NAT模式下,如何配置网络连接之简单易懂的过程。
400 0
关于 VMware虚拟机在NAT模式下,如何配置网络连接之简单易懂的过程。
|
消息中间件 Cloud Native RocketMQ
《技术揭秘:RocketMQ 5.0 云原生架构升级之路》电子版地址
RocketMQ诞生于阿里巴巴电商核心系统,历经十余年大规模流量场景的持续打磨验证,成为国内企业和开发者社区广泛应用和受欢迎的消息中间件。伴随云原生理念的深入人心,RocketMQ架构持续升级和演进。本议题将集中介绍RocketMQ 5.0核心的云原生技术架构升级以及重大技术功能的原理剖析,帮助开发者更好的应用新特性来解决开发过程中的痛点问题。
252 1
《技术揭秘:RocketMQ 5.0 云原生架构升级之路》电子版地址
|
程序员 C语言 C++
动态内存管理(万字讲解)(2)
动态内存管理(万字讲解)(2)
122 0
|
SQL 存储 Oracle
针对MySQL基础篇的一些语法细节以及注意点总结
MySQL是一个关系型数据库管理系统 由瑞典MySQL AB 公司开发,属于Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
针对MySQL基础篇的一些语法细节以及注意点总结
|
弹性计算 网络协议 关系型数据库
Py之huaweicloud-sdk-python:huaweicloud-sdk-python的简介、安装、使用方法之详细攻略
Py之huaweicloud-sdk-python:huaweicloud-sdk-python的简介、安装、使用方法之详细攻略
Py之huaweicloud-sdk-python:huaweicloud-sdk-python的简介、安装、使用方法之详细攻略