IOC 操作 Bean 管理( Bean 的生命周期)

news2024/9/23 5:32:49

生命周期

  • 从对象创建到对象销毁的过程

Bean 的生命周期

  • 通过构造器创建 Bean 实例(无参构造)
  • 为 Bean 的属性设置值和对其他 Bean 引用(调用 set 方法)
  • 调用 Bean 的初始化的方法(需要进行配置)
  • Bean 可以使用了(对象获取到了)
  • 当容器关闭的时候,调用 Bean 的销毁方法(需要进行配置销毁的方法)

演示 Bean 的生命周期

  • 创建一个 Orders 类
package com.fairykunkun.bean;
public class Orders {
	private String oname;
	public String getOname ( ) {
		return oname;
	}
	public void setOname ( String oname ) {
		this.oname = oname;
	}
}
  • 在这个 Java 类里面写出它的无参构造
package com.fairykunkun.bean;
public class Orders {
	// 无参构造
	public Orders ( ) {
		System.out.println ( "第一步 执行无参构造创建 Bean 实例" );
	}
	private String oname;
	
	public String getOname ( ) {
		return oname;
	}
	public void setOname ( String oname ) {
		this.oname = oname;
	}
}
  • 在 Orders 的 set 方法中做一个输出
package com.fairykunkun.bean;
public class Orders {
	// 无参构造
	public Orders ( ) {
		System.out.println ( "第一步 执行无参构造创建 Bean 实例" );
	}
	private String oname;
	
	public String getOname ( ) {
		return oname;
	}
	public void setOname ( String oname ) {
		this.oname = oname;
		System.out.println ( "第二步 调用 set 方法设置属性" );
	}
}
  • 在 Orders 类中创建初始化的方法
package com.fairykunkun.bean;
public class Orders {
	// 无参构造
	public Orders ( ) {
		System.out.println ( "第一步 执行无参构造创建 Bean 实例" );
	}
	private String oname;
	
	public String getOname ( ) {
		return oname;
	}
	public void setOname ( String oname ) {
		this.oname = oname;
		System.out.println ( "第二步 调用 set 方法设置属性" );
	}
	// 创建执行的初始化方法
	public void initMethod ( ) {
		System.out.println ( "第三步 执行初始化的方法" );
	}
}
  • 在 Bean 标签里面调用初始化方法
<?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"
	   xmlns:util = "http://www.springframework.org/schema/util"
	   xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
											http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
	<bean id = "orders" class = "com.fairykunkun.bean.Orders" init-method = "initMethod">
		<property name = "oname" value="order"></property>
	</bean>
</beans>
  • 使用对象
package com.fairykunkun;
import com.fairykunkun.bean.Orders;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestBean {
	@Test
	public void testBean ( ) {
		ApplicationContext context =
				new ClassPathXmlApplicationContext ( "bean5.xml" );
		Orders orders = context.getBean ( "orders" , Orders.class );
		System.out.println ( "第四步 获取创建 Bean 实例对象" );
		System.out.println ( orders );
	}
}
  • 在刚刚那个类里面加一个销毁的方法
package com.fairykunkun.bean;
public class Orders {
	// 无参构造
	public Orders ( ) {
		System.out.println ( "第一步 执行无参构造创建 Bean 实例" );
	}
	private String oname;
	
	public String getOname ( ) {
		return oname;
	}
	public void setOname ( String oname ) {
		this.oname = oname;
		System.out.println ( "第二步 调用 set 方法设置属性" );
	}
	// 创建执行的初始化方法
	public void initMethod ( ) {
		System.out.println ( "第三步 执行初始化的方法" );
	}
	// 销毁的方法
	public void destroyMethod ( ) {
		System.out.println ( "第五步 执行销毁的方法" );
	}
}
  • 在配置文件中配置销毁的方法
<?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"
	   xmlns:util = "http://www.springframework.org/schema/util"
	   xmlns:lang = "http://www.springframework.org/schema/lang"
	   xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
											http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd">
	<bean id = "orders" class = "com.fairykunkun.bean.Orders" init-method = "initMethod" destroy-method="destroyMethod">
		<property name = "oname" value="order"></property>
	</bean>
</beans>
  • 在测试代码里面手动销毁
package com.fairykunkun;

import com.fairykunkun.bean.Orders;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBean {
	@Test
	public void testBean ( ) {
		ApplicationContext context =
				new ClassPathXmlApplicationContext ( "bean5.xml" );
		Orders orders = context.getBean ( "orders" , Orders.class );
		System.out.println ( "第四步 获取创建 Bean 实例对象" );
		System.out.println ( orders );
		// 手动让 Bean 实例销毁
		( ( ClassPathXmlApplicationContext ) context ).close ( );
		// ApplicationContext 这个接口中没有 close() 的方法
		// 我们只能够用它子接口里面的方法
		// 所以我们在这里做了强转
	}
}
  • 最终测试
    测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目:SSM校园班级同学通讯录管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能&#xff1a; 管理员登录,修改管理员资料,用户管理,公告管理,系别信息管理,班级管理,学生通讯录管理等功能。 用户角色包…

微信小程序框架(一)-全面详解(学习总结---从入门到深化)

目录 小程序与普通网页开发的区别 体验小程序 微信小程序账号申请 微信小程序开发者工具 下载安装 创建项目 开发者工具说明 小程序目录结构 描述整体的 app 描述各自页面的 page 全局配置_Pages Pages配置 entryPagePath 快捷生成页面方案 全局配置_window 常用属性…

太卷了,5年Java程序员竟答不出应届生字节二面?

11.22一面过 11.23二面挂 上一个部门寄了&#xff0c;给我换了个流程唉 一面 面试官问我&#xff0c;三面面评这么好为啥不继续了&#xff0c;我纳闷了&#xff0c;不是你们挂的我吗 介绍项目&#xff0c;点赞是怎么考量的&#xff0c;热度点赞问题怎么解决&#xff0c;具体…

【混合网络】

A Novel Adaptive Hybrid Fusion Network for Multiresolution Remote Sensing Images Classificatio &#xff08;一种新的自适应混合融合网络在多分辨率遥感图像分类中的应用&#xff09; 随着对地观测技术的快速发展&#xff0c;全色&#xff08;PAN&#xff09;和多光谱&…

【OpenCV-Python】教程:4-6 FAST (Features from Accelerated Segment Test)算法角点检测

OpenCV Python FAST&#xff08;Features from Accelerated Segment Test&#xff09; 算法角点检测 【目标】 理解FAST算法的理论基础&#xff1b;用OpenCV里的FAST 检测角点&#xff1b; 【理论】 我们看到了几个特征检测器&#xff0c;其中很多都非常好。但是从实时应用…

预训练语言模型

一、预训练 对于一个具有少量数据的任务 A&#xff0c;首先通过一个现有的大量数据搭建一个 CNN 模型 A&#xff0c;由于 CNN的浅层学到的特征通用性特别强&#xff0c;因此在搭建一个 CNN 模型 B&#xff0c;其中模型 B 的浅层参数使用模型 A 的浅层参数&#xff0c;模型 B 的…

Android Studio Dolphin logct日志台新版特性及老版本恢复

Android Studio Dolphin logct日志台新版特性及老版本恢复 日志台在此版本进行了更新&#xff0c;本文按官网描述简要汇总了其新特性和使用方法&#xff0c;以及老版本的日志如何恢复。 老版本日志台恢复 如果是习惯了老版本日志台的仁兄&#xff0c;可按下方截图操作进入Se…

IDEA安装ChatGPT插件步骤

首先感谢大佬的提供的插件【ChatGPT JetBrains插件完整版发布。让AI帮你写代码。-哔哩哔哩】 **前期准备&#xff1a;**需要注册OpenAI账号。不会的可以见我的教程&#xff1a;传送门 1、注册号账号后&#xff0c;打开网站https://chat.openai.com/api/auth/session 复制acess…

TS201的外部中断和定时终端控制FLAG输出(含参考源码)

硬件准备 ADZS-TS201S-EZLITE&#xff1a;ADI TS201开发板 AD-HP560ICE&#xff1a;ADI DSP专用仿真器 软件准备 Visual DSP软件 硬件链接 外部中断控制FLAG输出 原理就不讲了&#xff0c;前面几章都有说。 调试步骤: 1)打开VisualDSP&#xff0c;并新建一个工程文件&am…

C语言刷题系列——8.矩阵的行/列互换

&#x1f6a9;矩阵的行/列互换⛄一) 题目要求⛄二) 题解step1:输入矩阵step2:输入k(执行 行/列 互换操作的次数)step3:&#xff08;循环内部&#xff09;行/列互换step4:打印互换后的矩阵⛄三) 最终的实现⛄一) 题目要求 输入描述&#xff1a;第一行包含两个整数n和m&#xff…

基于pytest来演示一个PO测试模式案例

首先要说的是&#xff0c;这是一个很简易的案例&#xff0c;目的在于体会这样一种结构。 第一部分&#xff1a;基本操作 案例描述&#xff1a;启动浏览器--打开好123--点击logo--跳转到百度--输入搜索词汇--点击按钮开始搜索。 模式描述&#xff1a;这个模式把元素的提取、元…

基于Java实现(WEB)影院管理系统(TMS)【100010015】

电影院系统需求规格说明 1. 引言 1.1 目的 本文档描述了影院管理系统的功能需求和非功能需求。开发小组的软件系统实现与验证工作都以此文档为依据。1.2 范围 影院管理系统是为了xx影院开发的业务系统&#xff0c;开发的目标是帮助该影院处理日常的重点事物&#xff0c;包括…

算法基础篇-03-查找(顺序查找和二分法查找)

1.查找 查找&#xff1a;在一些数据元素中&#xff0c;通过一定的方法找出与给定关键字相同的数据元素的过程&#xff1b;列表查找(线性表查找)&#xff1a;从列表中查找指定元素&#xff1b; 输入&#xff1a; 列表&#xff0c;待查找元素输出&#xff1a;元素下标(未找到元素…

【Linux】git的使用

&#x1f922;Linux 关联到gitee的操作记录 &#x1f922;Linux 下下载gitee的库 &#x1f92c;sudo yum install git 在Linux中安装git这个软件 &#x1f92c;git clone 下载gitee库到本地 &#x1f92c;git add. 将代码放到刚才下载好的目录中 &#x1f92c;git commit -…

HTML网上书店静态HTML网页作业作品 大学生三联书店网页设计制作成品 简单DIV CSS布局网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

SpringBoot 如何进行业务校验,老鸟们都这么玩的~

throw new IllegalArgumentException(“用户不存在&#xff01;”); } } 采用Assert能使代码更优雅&#xff0c;更简洁。 还是上面的例子&#xff0c;如果采用Assert可以这样写&#xff1a; public void test2(int accountId) { Account account accountDao.selectById(…

【力扣篇一】数组30题

前言 &#xff08;12月5日&#xff09;突然想起了很久以前别人&#xff08;具体来源已经记不清了&#xff09;传给我的一套题单。网上的题单不少&#xff0c;光收藏可不行&#xff0c;关键还得下手。 这套题单的题目数量为300出头&#xff0c;什么时候刷完我还没有明确计划&a…

对标40亿美金Webflow,「Towify」想用无代码方式搭建小程序

低代码和无代码的浪潮,在全球已经席卷了几次。今年以来,以低代码、无代码方式为主的网页开发、搭建工具受到了资本和市场的认可: 2022年8月,成立于2017年的低代码-内部程序开发平台Retool完成4500万美元融资,投后估值32亿美元。2022年3月,成立于2012年的无代码-外部网页搭…

关于魔趣刷机(含root)步骤

关于魔趣刷机&#xff08;含root&#xff09;步骤准备工作第一步&#xff1a;下载room和TWRP第二步&#xff1a;刷入TWRP到手机第三步&#xff1a;刷入room到手机第四步&#xff1a;安装Magisk app第四步&#xff1a;验证手机是否root参考链接准备工作 一台手机(推荐小米)、TW…

ADI Blackfin DSP处理器-BF533的开发详解28:SD卡的文件系统(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了通过文件系统读取 SD 卡上的文件&#xff0c;并对文件和文件夹做读、写、删除、建立、文件列表、文件搜索等功能&#xff0c…