Spring-8.容器中bean的生命周期

Spring入门到精通:第二章 IOC容器(XML方式):8.IOC容器Bean管理XML方式-bean的生命周期 生命周期:对象从创建到销毁的过程。 一、bean生命周期 (1)通过构造方法创建bean实例(无参构造方法); (2)为bean的属性设置值和其它bean引用(调用set方法); (3)调用bean的初始化方法(需要进行配置初始化的方法); (4)使用bean(可以获取对象); (5)当容器关闭的时候,调用bean的销毁方法(需要进行配置销毁的方法) 二、演示bean的生命周期 (1)编写类 package com.kfit.test.test7; /** * @au.. 阅读详情

Spring可以管理singleton作用域的bean生命周期。(无法管理protype类型的)

对于singleton的bean,管理bean的生命周期有以下两个时机:

(1)注入依赖关系后

(2)即将销毁bean之前

一、依赖关系注入之后的行为

有两种方式:

(1)使用init-method属性

(2)实现initializingBean接口

说明:方式(1)写普通方法init() (方法名任意),在xml中配置。代码污染小。

          方式(2)实现initializingBean接口,并实现方法 void  afterPropertiesSet() throws Exception。

实验1:init-method属性

public class SteelAxe implements Axe
{
	public SteelAxe()
	{
		System.out.println("Spring实例化依赖bean:SteelAxe实例...");
	}
	public String chop()
	{
		return "钢斧砍柴真快";
	}
}
public class Chinese implements Person ,  BeanNameAware, ApplicationContextAware
{
	private Axe axe;
	public void setBeanName(String beanName)
	{
		System.out.println("===setBeanName===");
	}
	public void setApplicationContext(ApplicationContext ctx)
	{
		System.out.println("===setApplicationContext===");
	}
	public Chinese()
	{
		System.out.println("Spring实例化主调bean:Chinese实例...");
	}
	// axe的setter方法
	public void setAxe(Axe axe)
	{
		System.out.println("Spring调用setAxe()执行依赖注入...");
		this.axe = axe;
	}
	public void useAxe()
	{
		System.out.println(axe.chop());
	}
	// 测试用的初始化方法
	public void init()
	{
		System.out.println("正在执行初始化方法 init...");
	}	
}
xml:

<bean id="steelAxe" class="codeEETest.org.crazyit.app.service.impl.SteelAxe"/>
	<!--  配置chinese Bean,使用init-method="init"指定该Bean所有属性设置完成后,自动执行init方法 -->
	
	<bean id="chinese" class="codeEETest.org.crazyit.app.service.impl.Chinese"
		init-method="init">
		<property name="axe" ref="steelAxe"/>
	</bean>
Spring实例化依赖bean:SteelAxe实例...       //xml中从上到下的bean,调用对应的构造方法
Spring实例化主调bean:Chinese实例...        //同上
Spring调用setAxe()执行依赖注入...           //setter方法
===setBeanName===                     
===setApplicationContext===                 //这是两个通知
正在执行初始化方法 init...                  //这里才开始执行xml中配置的初始化
钢斧砍柴真快                                //测试类中执行了p.useAxe();

实验2:initializingBean接口

public class Chinese implements Person,InitializingBean,  BeanNameAware, ApplicationContextAware
{
	private Axe axe;
	public void setBeanName(String beanName)
	{
		System.out.println("===setBeanName===");
	}
	public void setApplicationContext(ApplicationContext ctx)
	{
		System.out.println("===setApplicationContext===");
	}
	public Chinese()
	{
		System.out.println("Spring实例化主调bean:Chinese实例...");
	}
	// axe的setter方法
	public void setAxe(Axe axe)
	{
		System.out.println("Spring调用setAxe()执行依赖注入...");
		this.axe = axe;
	}
	public void useAxe()
	{
		System.out.println(axe.chop());
	}
	// 测试用的初始化方法
	public void init()
	{
		System.out.println("正在执行初始化方法 init...");
	}


	// 实现InitializingBean接口必须实现的方法
	@Override
	public void afterPropertiesSet() throws Exception
	{
		System.out.println("正在执行初始化方法 afterPropertiesSet...");
	}
}
Spring实例化依赖bean:SteelAxe实例...
Spring实例化主调bean:Chinese实例...
Spring调用setAxe()执行依赖注入...
===setBeanName===
===setApplicationContext===
正在执行初始化方法 afterPropertiesSet...     //在init-method属性前执行
正在执行初始化方法 init...
钢斧砍柴真快


小结:

不推荐使用initializingBean接口的方式,污染代码。如果二者同时出现,先执行initializingBena接口。

二、Bean销毁之前

两种方式:

(1)destroy-method属性

(2)DisposableBean接口

说明:方式(1):代码污染小

          方式(2):实现destroy()方法

package org.crazyit.app.service;

public interface Person
{
	public void useAxe();
}
package org.crazyit.app.service;
public interface Axe
{
	public String chop();
}
package org.crazyit.app.service.impl;

import org.springframework.beans.factory.DisposableBean;

import org.crazyit.app.service.*;

public class Chinese implements Person,DisposableBean
{
	private Axe axe;
	public Chinese()
	{
		System.out.println("Spring实例化主调bean:Chinese实例...");
	}
	public void setAxe(Axe axe)
	{
		System.out.println("Spring执行依赖关系注入...");
		this.axe = axe;
	}
	public void useAxe()
	{
		System.out.println(axe.chop());
	}

	//方式1:普通的close()方法,方法名是任意的
	public void close()
	{
		System.out.println("正在执行销毁之前的方法 close...");
	}
	//方式2:接口
	public void destroy() throws Exception
	{
		System.out.println("正在执行销毁之前的方法 destroy...");
	}
}
package org.crazyit.app.service.impl;

import org.crazyit.app.service.*;

public class SteelAxe implements Axe
{
	public SteelAxe()
	{
		System.out.println("Spring实例化依赖bean:SteelAxe实例...");
	}
	public String chop()
	{
		return "钢斧砍柴真快";
	}
}
public class BeanTest
{
	public static void main(String[] args)
	{
		// 以CLASSPATH路径下的配置文件创建ApplicationContext
		AbstractApplicationContext ctx = new
			ClassPathXmlApplicationContext("beans.xml");
		// 获取容器中的Bean实例
		Person p = ctx.getBean("chinese" , Person.class);
		p.useAxe();
		
		// 为Spring容器注册关闭钩子
		ctx.registerShutdownHook();
	}
}
<bean id="steelAxe" class="org.crazyit.app.service.impl.SteelAxe"/>
	<!--  配置chinese Bean,使用destroy-method="close"
		指定该Bean实例被销毁之前,Spring会自动执行指定该Bean的close方法 -->
	<bean id="chinese" class="org.crazyit.app.service.impl.Chinese"
		destroy-method="close">
		<property name="axe" ref="steelAxe"/>
	</bean>
说明:ctx.registerShutdownHook()是为了在JVM里注册关闭钩子(shutdown hook),保证spring容器恰当关闭,执行singleton的析构方法。没有这个将无法看到销毁的执行。

Spring实例化依赖bean:SteelAxe实例...
Spring实例化主调bean:Chinese实例...
Spring执行依赖关系注入...
钢斧砍柴真快

正在执行销毁之前的方法 destroy...
正在执行销毁之前的方法 close...















Halcon形状模板匹配实战:inspect_shape_model参数优化指南 本文深入解析Halcon形状模板匹配中inspect_shape_model参数的优化技巧,涵盖NumLevels和Contrast参数的实战应用。通过具体案例展示如何平衡匹配速度与精度,帮助开发者高效调试形状模型,提升工业视觉检测的准确性和效率。 阅读详情

相关推荐

Oracle19c安装,基本配置教程(超详细)

安装有出错的风险,卸载也是比较麻烦的,所以先提前设置一个还原点,在windows中的步骤如下,如果对自己有信心,可以直接跳过该部分开始安装oracle在设置中进入创建还原点的界面开始创建还原点上面已经成功创建了还原点,如果安装oracle时出现问题,自己也无法解决,恢复到安装之前即可,恢复步骤如下经过上面的步骤,Oracle我们就能够正常使用了,我们就使用自己在sql plus里面创建的账号即可,创建的表会默认存放在我们自己创建的表空间里面。

秃头披风侠的博客 7万+

【Spring6】| Bean的生命周期(五步、七步、十步法剖析)

【Spring6】| Bean的生命周期(五步、七步、十步法剖析)

m0_61933976的博客 2万+

【WebApi + Sqlserver】 使用C#编写WebApi并打开sqlserver数据库进行访问,代码适用于简单练习,真实开发需自行完善

【WebApi + Sqlserver】 使用C#编写WebApi并打开sqlserver数据库进行访问,代码适用于简单练习,真实开发需自行完善

2302_78387246的博客 3592

bean的生命周期(最全最细讲解)

其定义为:从对象的创建到销毁的过程。而Spring中的一个Bean从开始到结束经历很多过程,但总体可以分为六个阶段Bean定义、实例化、属性赋值、初始化、生存期、销毁。 2.SpringBean生命周期中的增强接口PostProcessor;postProcessBeforeInitialization方法执行前,会执行很多Aware类型的接口,这种类型接口作用是加载资源到Spring容器中。我们在创建一个MyBeanPost的类来实现BeanPostProcessor接口。 ​ ......

a910247的博客 4万+

鸿蒙5应用真机调试超详细教程

本文详细介绍了鸿蒙5应用的真机调试全流程,包括开发环境搭建(安装DevEcoStudio、配置SDK)、真机调试准备(开启USB调试、配置自动/手动签名)、调试实战(生成HAP包、断点调试技巧)以及多设备协同调试方法。文中提供了设备连接、签名配置等常见问题的解决方案,并包含示例代码展示分布式设备联动功能。通过本教程,开发者可快速掌握鸿蒙5应用的调试技能,建议结合官方文档深入学习高级调试技巧。

2301_79392153的博客 2196

QT编程系列1--QT学习前需知

本周学习了一些QT编程方面的知识,学写了几个程序,这里把记录下来。一方面对前面学习的知识做一个总结,便于以后复习、再学习和应用;另一方面也和大家做个交流,有不足的地方请各位看官多指点。   首先是做一些学习之前的交代:一,学习QT需要哪些基础;二,学习QT有哪些用途,QT较其他的开发工具有哪些特点;三,学习QT的思路。

霜月孤鸟&RTEMS&TinyOS 1115

Bean 的生命周期总结

Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交个 Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出要使用的对象即可。因为初始化的前置方法和后置方法是为所有 Bean 服务的,而非为某一个 Bean 服务的,所以这两个方法不能写在某个具体的 Bean 中,否则(这两个方法)不会执行。

qq_62274623的博客 1万+

affymatrix探针转换 | GPL5175探针对应的基因转换

一般情况下,有一些比较成熟的对应平台的注释数据集的R包。但是这个注释平台,我在Bioconductor上找了一圈都没有找到。只能通过最原始也最可靠的方法,从GEO数据集上去下载这部分的注释文件。以下展示全过程。 我要检查的数据平台是:GPL5157。 数据集的注释集链接为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL5175 这个注释数据集比较难弄的地方在于,它的基因集注释的不太好。没有比较直接的可供提取的genesample的信息;在ge.

weixin_40640700的博客 7123

Bean的生命周期

Bean的生命周期

weixin_69084736的博客 2044

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

本文将介绍如何使用VS2022克隆下载《植物大战僵尸C++自制版本》。Gitee项目地址:Gitee仓库地址Github项目地址:Github仓库地址游戏官网地址(下载可直接运行)游戏官网。

尔灵尔亿的博客 4928

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

详解Bean的生命周期

Spring bean生命周期13个环节 阶段1:Bean元信息配置阶段 阶段2:Bean元信息解析阶段 阶段3:将Bean注册到容器中 阶段4:BeanDefinition合并阶段 阶段5:Bean Class加载阶段 阶段6:Bean实例化阶段(2个小阶段) Bean实例化前阶段 Bean实例化阶段 阶段7:合并后的BeanDefinition处理 阶段8:属性赋值阶段(3个小阶段) Bean实例化后阶

真是适合睡觉的天气 3515

开源鸿蒙具身机器人(ROS2框架):从内核驱动到智能算法的完整实践

本指导文档旨在为开发者提供完整的开源鸿蒙(OpenHarmony)具身机器人开发解决方案,涵盖从底层驱动到上层ROS2应用的全栈开发流程。文档结合OpenHarmony内核驱动移植技术和ROS2机器人操作系统,为具身机器人开发提供详细的技术指导。具身机器人(Embodied Robot)是指具有物理实体、能够感知环境并与之交互的智能机器人系统。感知-决策-执行闭环多模态传感器融合(视觉、听觉、触觉、力觉)实时环境感知与理解智能决策与规划精确运动控制执行具身智能特性物理世界交互能力。

m0_67505153的博客 1268

8. spring-容器: Bean生命周期管理

Bean的生命周期 即指Bean从创建到初始化,使用,再到销毁的过程。 在spring中,bean的生命周期由spring容器来管理,即spring容器负责bean的初始化,使用,再到销毁。并且spring提供了可扩展的方法,我们可以自己指定bean的初始化和销毁方法,当bean进行到当前生命周期的阶段时,会自动调用我们自定义的初始化和销毁方法。 注意:spring对bean的生命周期进行管理仅限singleton。prototype的bean spring只负责创建,后续的初始化和销毁就不管了。 如何指定

elegent Developer's 的博客 559

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

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

spring 8 bean配置--IOC容器中bean的生命周期

spring允许在bean生命周期的特定点执行定制的任务。 springIOC容器对bean生命周期进行管理的过程:  1 创建bean实例  2 为bean属性设置值,对其他bean引用  3 调用bean的初始化方法  4 bean使用  5 关闭容器,调用bean的销毁方法 在bean的声明你设置init-method 和 destroy-method属性,为bean指定初始化

miaoao611的博客 302

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深度剖析Spring Bean生命周期:从诞生到消亡的全过程

本文详细解析了Spring框架中Bean的完整生命周期,包括8个关键阶段:实例化、属性注入、Aware接口回调、BeanPostProcessor前置处理、初始化方法、BeanPostProcessor后置处理、使用期和销毁期。文章深入剖析了每个阶段的核心机制和典型应用场景,特别介绍了FactoryBean、不同作用域Bean的生命周期管理,以及Spring容器关闭流程。同时提供了生命周期优化实战技巧和常见问题解决方案,帮助开发者充分利用Spring扩展点进行高级定制,实现更健壮的系统架构和更优的启动性能。

豆豆的博客 1108

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

rez注入器源码_最简 Spring IOC 容器源码分析

前言 BeanDefinition BeanFactory 简介 Web 容器启动过程 bean 的加载 FactoryBean 循环依赖 bean 生命周期 公众号 前言 许多文章都是分析的 xml 配置,但是现在 Spring Boot 开发多基于注解。本文从注解的角度分析 Spring IOC 容器源码。 版本: Spring Boot:2.1.6.RELEASE Spring ...

weixin_33901995的博客 161

项目写得再多也没用!Spring Bean 的核心概念要是没懂,迟早踩坑

想象一下,你是个大厨 👨‍🍳,每天要做各种菜。如果每次都瞎琢磨怎么做,那得累死!炒菜套路:热锅→放油→爆香→翻炒→出锅炖汤套路:冷水下锅→大火烧开→小火慢炖→加盐出锅设计模式就是编程界的"烹饪套路"!🎯它是前辈程序员在无数个996加班夜里,用头发和血泪总结出来的最佳实践。1994年,四位大神(GoF - Gang of Four)写了本书《设计模式》,总结了23种经典模式,从此成为程序员的"武林秘籍"。工厂的工厂!提供一个创建一系列相关或相互依赖对象的接口,无需指定具体类。

2401_89221445的博客 927

Spring Bean 核心五问:作用域、生命周期、工厂模式、实例化与循环依赖

默认情况下,,Bean对象的创建是在初始化Spring上下⽂的时候就完成的。

你好,作为一名Java后端开发的学习者。这个博客是我记录技术成长的地方,也是我与你分享知识的小天地。我相信:最好的学习方式是输出。希望能帮助刚入门的你少踩坑,也欢迎大家一起交流进步! 1509

Spring核心面试知识点(IoC/Bean生命周期/AOP/事务)

Spring IoC 启动就是加载配置 → 扫描Bean → 创建Bean → 初始化Bean → 完成容器就绪的全过程。的refresh()方法。IoC启动:加载定义 → 扫描 → 预处理 → 实例化单例 → 完成启动。Bean生命周期:实例化 → 赋值 → Aware → 前后置 → 初始化 → 代理 → 使用 → 销毁。AOP代理:有接口JDK,无接口CGLIB,final无法代理。事务传播:REQUIRED默认合并,REQUIRES_NEW新建独立。事务失效8场景。

Byron__的博客 304

Spring之Spring Bean生命周期

1、什么是Bean 2、Spring Bean 生命周期分为8个步骤 生命周期 什么是生命周期呢? 当前组件在创建到销毁经历的一系列过程,称之为生命周期 生命周期的分为几个阶段?每个阶段有哪些钩子函数? 生命周期分为3个阶段,这三个阶段分别是: 初始化 、 运行中 、 销毁 什么是Bean 首先,我们来看看Spring官方文档对于Bean的定义: 在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 bean。bean 是由 Spring IoC 容器实..

CLa11111111的博客 521

1.8、spring源码,bean的生命周期

bean的生命周期:指bean创建-----初始化----销毁 的过程 bean的生命周期是由容器进行管理的 我们可以自定义 bean初始化和销毁 方法: 容器在bean进行到当前生命周期的时候, 来调用自定义的初始化和销毁方法 第一种方法: 首先在bean上加上init和destory方法 public class Bike { public Bike(){ ...

一点光辉的博客 192

Spring学习之(一)Spring的容器实例化及Bean的生命周期

Spring的容器实例化及Bean的生命周期 文章目录Spring的容器实例化及Bean的生命周期容器的实例化Bean的实例化**使用构造器进行Bean的实例化****使用静态工厂实例化Bean对象**使用实例工厂实例化Bean对象Bean的生命周期单例模式的Bean原型模式的BeanBean的初始化及销毁Bean的延迟实例化容器级别的初始化,销毁及延迟实例化 容器的实例化 容器的实例化有两种方式...

Jack_David的专栏 473

Spring Bean生命周期,好像人的一生。。

Spring原来是一个社会,Bean就是身不由己的“社会人”……

三分恶的博客 3万+

【Spring】Spring的Bean的生命周期

在Java中,Bean是一个重要的概念,它代表了应用程序中的一个对象。在开发中,我们经常使用Bean来管理对象的生命周期。本文将介绍Bean的生命周期,并详细讲解如何在Spring框架中管理Bean的生命周期。Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。Spring为每个Bean定义了若干个回调方法,使得开发人员可以在某个特定的时间点对Bean进行特定的操作。

qq_46096136的博客 1万+

Spring——Bean 的生命周期

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

浪漫不死的博客 1万+
上一篇: java反射的field.get(null)
下一篇: SpringAop-1.AspectJ起步
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值