Spring IOC学习笔记(一)--Bean的生命周期

Spring 学习笔记①:IoC容器、Bean与注入 IoC容器、Bean与注入 阅读详情

一、Bean的生命周期

BeanFactory容器启动默认采取的是延迟初始化,二ApplicationContext采用的是容器启动后就会实例化所有的Bean。

实例化Bean
设置Bean的相关属性
检查Bean实现的相关的Aware接口,将相关依赖设置到Bean实例中
BeanPostProcessor进行前置处理
检查是否有自定义的init-method方法
BeanPostProcessor进行后置处理
是否实现了Disposable方法
是否自定义了destroy-method

二、实例化Bean

容器内部使用策略模式来实例化Bean实例,通常通过反射或者是CGLIB动态字节码的方式初始化相应的Bean实例。
org.springframework.beans.factory.support.InstantiationStrategy定义了实例化的接口,其直接子类SimpleInstantiationStrategy实现了简单的对象实例化,支持构造器注入的方式,但是不支持方法注入的方式实例化Bean。CGLIBInstantiationStrategy继承了SimpleInstantiationStrategy,支持方法注入实例化Bean。此时容器生成了一个由BeanWrapper包装了的实例对象。通过BeanWrapperImpl这个实现了BeanWrapper接口的对象就可以实例化对象。

三、

当对象完成了并且相关属性设置完成以后,Spring容器会检查当前对象实例是否实现了一系列的一Aware命名结尾的接口,如果是则将这些Aware接口规定的依赖注入给dangqina
JavaBean类

package chapter1.beanlifecycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class Person implements BeanFactoryAware,ApplicationContextAware,
                                InitializingBean,DisposableBean{
    private String name;
    private String phone;

    private BeanFactory beanFactory;
    private String beanName;
    private ApplicationContext applicationContext;
    /**
     * default constructor
     */
    public Person() {

    }

    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public String getPhone() {
        return phone;
    }


    public void setPhone(String phone) {
        this.phone = phone;
    }


    @Override
    public void setBeanFactory(BeanFactory arg0) throws BeansException {
        System.out.println("Spring call the setBeanFactory to transfer the Instance of BeanFactory");
        this.beanFactory = arg0;
    }


    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        System.out.println("Spring call the setApplicationContext to transfer the ApplicationContext");
        this.applicationContext = arg0;
    }


    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Spring call the afterPropertiesSet()");
    }


    @Override
    public void destroy() throws Exception {
        System.out.println("Spring call the destory() to call the destory-method of Person bean");
    }

    public void selfDefineDestory() {
        System.out.println("Spring call the destory-method by self definition");
    }

    public void selfDefineInit() {
        System.out.println("Spring call the initialize-method by self definition");
    }
}

配置文件

<?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"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

    <bean id="person" class="chapter1.beanlifecycle.Person"  scope="singleton" 
    p:name="Zhang San" p:phone="15900000000" 
    init-method="selfDefineInit" destroy-method="selfDefineDestory"/> 
</beans>

输出结果

信息: Loading XML bean definitions from class path resource [beanlifecycle.xml]
Spring call the setBeanFactory to transfer the Instance of BeanFactory
Spring call the setApplicationContext to transfer the ApplicationContext
Spring call the afterPropertiesSet()
Spring call the initialize-method by self definition
容器初始化成功
chapter1.beanlifecycle.Person@3ecd23d9
现在开始关闭容器!
五月 12, 2018 10:37:44 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@270421f5: startup date [Sat May 12 22:37:44 CST 2018]; root of context hierarchy
Spring call the destory() to call the destory-method of Person bean
Spring call the destory-method by self definition

<4>参考文献

[1] http://www.cnblogs.com/zrtqsk/p/3735273.html
[2]《Spring in Action》chapter1-bean的生命周期

细说Spring——IoC详解(Bean的生命周期) 我们在细说Spring——IoC详解(一)和细说Spring——IoC详解(二)中了解了容器启动阶段所做的事情,还有在容器启动阶段我们可以做的扩展,同时笼统的了解了一下容器是怎么创造出一个对象之后,我们接下来就要进入Bean的实例化阶段,同时学习一下在Bean的实例化阶段我们可以做哪些扩展。 首先我们先来看一个图: 这个图是《Spring揭秘》中的一个图,我们接下来就可以对照这个图来了解B... 阅读详情

相关推荐

别再纠结了!车规MCU选M7还是R52?一张图看懂你的车身控制器/域控制器该用谁

本文深入探讨车规MCU选型中Cortex-M7与Cortex-R52的核心差异,提供基于安全等级与实时性需求的选型决策图。通过对比ASIL认证、实时性能及成本效益,帮助工程师在车身控制器/域控制器设计中做出精准选择,避免潜在风险与隐性成本。

weixin_42628688的博客 397

一文读懂 Spring Bean 的生命周期

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 一、前言 今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象。因为 Spring Bean 的生命周期是除了 IoC、AOP 几个核心概念之外最重要概念,大家务必拿下。可 Spring 源代码又比较复杂,跟着跟着就不知道跟到哪里去了,不太好拿下呀。这倒是真的,而且网上一上来就各种贴流程源码,对初学者来说是真的一脸懵逼,就像字.

riemann_的博客 12万+

在 Windows 10 中通过 WSL2 安装 vLLM 部署本地大模型的方法和步骤

通过 WSL2 在 Windows 10 中部署 vLLM 的核心优势是兼顾 Windows 生态与 Linux 环境的 GPU 加速能力,适合需要在 Windows 下开发但依赖 vLLM 高性能推理的场景。相比原生 Windows 部署(Ollama 等工具),该方案性能更优(接近原生 Ubuntu),且支持更大模型和量化优化。若追求极致性能,建议直接使用 Ubuntu 系统;若必须依赖 Windows 工具链,WSL2 + vLLM 是当前最优选择。

当 AI 开始写文章、绘星空,甚至预测未来,您还在旁观吗?这里将剖开人工智能的思考逻辑,拆解 AI 创作的底层密码,也聊聊人工智能里的人文温度。每篇都有让你拍案的细节,快来解锁 AI 时代的神奇世界! 3754

spring IOC 反射 bean生命周期

若依的核心价值在于降低开发门槛和提升迭代效率,尤其适合需要快速交付的企业级应用。其模块化设计和生态扩展能力,使其在金融、制造、政务等领域均有成功案例。开发者可根据项目规模(中小型 / 大型)、技术栈偏好(Java/Vue)和定制化需求,灵活选择若依的单体版、微服务版或低代码扩展版。Spring 是整个体系的基础,为 Spring MVC、Spring Boot 和 Spring Cloud 提供了核心功能和基础架构。

sv 1246

数控弯管机xyz转换ybc的算法_数控弯管机技术的更新和应用.pdf

您所在位置:网站首页 > 海量文档&nbsp>&nbsp汽车/机械/制造&nbsp>&nbsp机械/模具设计数控弯管机技术的更新和应用.pdf3页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。2.该文档所...

weixin_31493101的博客 1521

超详细教程YoloV8官方推荐免费数据集网站Roboflow一键导出Voc、COCO、Yolo、Csv等格式

YoloV8官方推荐了一个数据集网站,就是Roboflow。Roboflow是一个数据集管理平台,提供了免费的数据集,同时也支持上传自己的数据集进行格式转换。使用Roboflow,开发者可以方便地获取所需格式的数据集,无需手动转换格式。此外,Roboflow还提供了多种数据预处理、数据增强等功能,可帮助开发者更好地优化训练数据

Snu77的博客 2万+

【Spring】——IOC,DI,Bean的生命周期

javaEE:Java 平台企业版(Java Platform Enterprise Edition)。是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件。JavaEE 是在 JavaSE 的基础上,​​额外提供的一套工具和规范​​,专门用来开发​​大型企业级应用​​(比如银行系统、电商网站)。对找到的配置资源进行解析,若是 XML 文件,会解析出各个 Bean 的定义信息(如类名、属性、依赖关系等);若是注解,也会识别出被注解标注的类及相关属性等情况,从而得到 Bean 的元数据。

qq_45730261的博客 2239

【OpenCV】图像的像素直方图 图像特征点 cv::FAST cv::ORB ORB_SLAM2::ORB

文章目录图像直方图代码实现cv::FAST和cv::ORB 检测图像特征点cv::FAST和cv::ORB 检测图像特征点代码实现ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比代码实现 图像直方图代码实现 图像是由不同数值(颜色)的像素构成的,像素值在图像中的分布情况是图像的重要属性,可以用直方图修改图像的外观,标识图像的内容,检测图像中特定的物体或纹理。 单通道灰度图像中每个像素都有一个 0(黑色)-255(白色)的整

小秋 AI SLAM 入门实战教程 2510

Spring Bean生命周期详解

站在设计者的角度考虑设计IOC容器 加载Bean的配置(比如xml配置) 比如不同类型资源的加载,解析成生成统一Bean的定义 根据Bean的定义加载生成Bean的实例,并放置在Bean容器中 比如Bean的依赖注入,Bean的嵌套,Bean存放(缓存)等 除了基础Bean外,还有常规针对企业级业务的特别Bean 比如国际化Message,事件Event等生成特殊的类结构去支撑 对容器中的Bean提供统一的管理和调用 比如用工厂模式管理,提供方法根据名字/类的类型等从容器中获取Bea

weixin_45723046的博客 1万+

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1177

SAP ABAP Cloud 发展简史

其中用于云开发的 ABAP,官方术语是 「ABAP in the Cloud」,本文后续叙述方便起见,简称为 「ABAP Cloud」. 它涵盖了标准 ABAP 语言范围的一个子集,只能访问受限的 API,用于构建 SAP BTP ABAP 环境以及 SAP S/4HANA Cloud ABAP 环境上的云解决方案。SAP ABAP 平台是用于 SAP ECC、SAP S/4HANA 和 SAP BTP 等产品的技术平台,也是 ABAP 应用程序的开发和运行环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1393

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

首先说一下Bean的生命周期 Bean的生命周期 创建Bean>>初始化>>摧毁 1.创建Bean 当设置Bean为单例时,在spring容器启动时会创建Bean。 当设置Bean为多例是,在调用Bean时才会被创建。 2.初始化 使用init()来完成Bean的初始化操作,在初始化环节中,可以使用BeanPostProcesser(后置处...

最怕一生碌碌无为,还安慰自己平凡可贵 2万+

OpenClaw实战系列·进阶特辑02:多智能体协同——打造企业级AI中台

**企业级AI中台面临多Agent协同的挑战,本文提出基于多智能体协同的解决方案。通过分析单Agent的局限性(上下文溢出、专业度稀释等)和多Agent的核心优势(任务专注度、故障隔离等),提出三种协作架构模式(指挥型、联邦型、点对点型),并强调人格化设计的重要性。文章详细介绍Agent间通讯机制(同步/异步会话、文件系统协作)和"身脑分离"的解耦架构设计,提供可落地的企业级AI中台实施方案。

PeterPan的博客 494

IOC中Bean的生命周期

Spring是一个轻量级开发框架,其核心思想是Ioc(控制反转)以及AOP(面向切面编程),为java应用开发提供组件管理服务,用于组件之间的解耦,以及简化第三方Javaee中间件技术的使用,是是一个基础架构型的开发框架。

2301_78487412的博客 1548

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Bean 生命周期

一、Spring核心模块介绍 1. Spring Core: Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。 2.Spring Context: 构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N).

fox_bert的博客 4697

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring——Bean 的生命周期

目录一、Bean 的生命周期二、代码演示三、主要步骤简述 一、Bean 的生命周期   对于普通的 Java 对象,new 的时候会去创建对象,而当它没有任何引用的时候则被垃圾回收机制回收。相较于前者,由Spring IoC 容器托管的对象,它们的生命周期完全由容器控制。Spring 中每个 Bean 的生命周期如下: 对于 ApplicationContext 容器,当容器启动结束后,实例化所有的 Bean。 设置对象属性,即依赖注入,动态将依赖关系注入到对象中。 紧接着,Spring 会检测该对象

浪漫不死的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring Framework IoC Bean生命周期

Spring是一款主流的 Java EE 开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从 简单性、可测试性的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能 外,还提供整合其他技术和框架的能力。自2004年4月,Spring1.0 版正式发布以来,Spring已经步入到了第6个大版本,即 Spring6,本课程 采用 Spring5.3.24 正式版本。在Spring框架规范中,所有由spring管理的对象都称之为Bean对象。

qq_20770569的博客 1340

Spring-IOC、Bean、DI

Spring的核心基础知识,包括IOC、Bean、DI。

m0_53222084的博客 1309

Spring——Spring Bean生命周期原理

本博文主要是分析Spring IOC源码。帮助大家更好的理解spring ioc的思想与原理。

庄小焱 4809

Spring中IOC容器和Bean的生命周期

IOC容器和Bean的生命周期 文章目录IOC容器和Bean的生命周期一、IOC容器的初始化过程二、Bean的生命周期 一、IOC容器的初始化过程 IOC容器是一个Map(可以通过 getBean() 获取到对应key的value,value存放的是对象) 先放一张整体的流程图 关于上图的说明: BeanDefinition <!--假设有如下的bean信息--> <context:property-placeholder location="dbconfig.properties"

立志成为一个前端、后端、测试全方位发展的程序员 1124

Spring-IOC、Bean的生命周期、循环依赖

提到Spring中的Bean,会出现很对相关联的问题。例如:1、Spring中的IOC是怎么实现的?2、Spring是如何解决循环依赖的?3、BeanFactory与FactoryBean的区别?

m0_67480104的博客 994

IOC容器中bean的生命周期

二、创建Bean后置处理器 三、Bean的作用域 回到顶部 一、Bean生命周期   Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。   Spring IOC容器对Bean的生命周期进行管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的引用 调用Bean的初始化方法 Bean可以使用了...

xinyuan2018的博客 1448

Spring IOC:依赖注入和bean的生命周期

IOC -- Inverse of Control,控制反转,将对象的创建权力反转给Spring框架!在Java中,当一个类需要调用另一个类的方法时,通常需要在该类中实例化目标类的对象。这种设计可能导致循环依赖问题,例如:A类持有B类实例,B类持有C类实例,而C类又持有A类实例。这种情况下,若其中任何一个类出现问题,整个系统框架都可能受到影响。Spring框架通过IOC(控制反转)机制解决了这个问题。IOC容器负责创建和管理所有对象(如A、B、C三个对象),其他类只需从容器中获取所需实例即可。

t2786024916的博客 971

Spring IOC中的Bean对象

Spring IOC中的Bean (一)Bean是什么 突然发现提到了好多次Bean,居然忘记了讲Bean是什么。没事,现在讲也不晚。Java中的Bean是一种规范,是一种特殊的java类。所以我们先来看看Bean的规范。 Bean必须生成public class类。 所有属性必须封装,Bean类的属性都为private。 属性值应该通过一组方法(getXxx 和 setXxx)来访问和修改。...

物是人非,结局始终不美 1万+

Spring IOC容器启动流程(Bean生命周期)

传统方式:顾客(调用者)直接向厨师(被依赖对象)点餐,需要自己知道厨师是谁、如何联系厨师。 IoC方式:顾客只需告诉服务员(IOC容器)"我要一份牛排",服务员会自动安排厨师做好并送到桌前。顾客不需要关心厨师是谁、如何制作。

m0_60697978的博客 1031

JAVA面试宝典 -《Spring IOC核心:Bean生命周期全解析》

本文深入解析了 Spring 中 Bean 的完整生命周期,从实例化、属性注入、容器感知、初始化、使用到销毁,结合代码示例与控制台输出,帮助开发者掌握各阶段原理与用法。文章还涵盖常见误区与调试技巧,推荐使用注解优雅管理生命周期,提升代码健壮性与可控性。

qq_43414012的博客 1097
上一篇: Spring IOC学习笔记二-Bean的作用域
下一篇: JavaWeb-Socket网络编程
markliwei1
博客等级 码龄10年 26粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值