4. Bean的生命周期

news2025/2/28 12:59:29

Bean的生命周期

1.生命周期相关概念介绍

  • 生命周期:从创建到消亡的完整过程
  • bean生命周期:bean从创建到销毁的整体过程
  • bean生命周期控制:在bean创建后到销毁前做一些事情

2. Bean销毁时机

容器关闭前触发bean的销毁

关闭容器方式:

  • 手工关闭容器
    ConfigurableApplicationContext接口close()操作
  • 注册关闭钩子,在虚拟机退出前先关闭容器再退出虚拟机
    ConfigurableApplicationContext接口registerShutdownHook()操作
public class AppForLifeCycle {
    public static void main( String[] args ) {
        //此处需要使用实现类类型,接口类型没有close方法
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
        //注册关闭钩子函数,在虚拟机退出之前回调此函数,关闭容器
        ctx.registerShutdownHook();
        //关闭容器
        //ctx.close();
    }
}

3. 配置方式实现Bean生命周期控制

3.1 在要控制的bean中提供生命周期控制方法

 /**
     * 表示bean初始化对应的操作
     */
    public void init(){
        System.out.println("init");
    }


    /**
     * 表示bean销毁前对应的操作
     */
    public void destory(){
        System.out.println("destory");
    }

3.2 applicationContext.xml配置

<!--init-method:设置bean初始化生命周期回调函数,此处填写init方法名-->
<!--destroy-method:设置bean销毁生命周期回调函数,仅适用于单例对象,此处填写destory方法名-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>

3.2 创建容器获取bean

public class AppForLifeCycle {
    public static void main( String[] args ) {
        //此处需要使用实现类类型,接口类型没有close方法
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();
        //关闭容器,执行销毁的方法
        ctx.close();
    }
}

3.3 程序运行结果

image-20221216001817979

4. 实现InitializingBean, DisposableBean接口也能控制bean生命周期

package com.lin.dao.daoimpl;

import com.lin.dao.BookDao;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class BookDaoImpl implements BookDao , InitializingBean, DisposableBean {

    public BookDaoImpl() {
        //System.out.println("BookDao的无参构造器");
    }

    /**
     * 数据层实现
     */
    public String queryBooks() {
        System.out.println("数据层查询书本方法");
        return "数据层查询书本方法";
    }


    @Override
    public void destroy() throws Exception {
        System.out.println("destory");
    }

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

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

}


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

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

相关文章

前端基础—Ajax和XML

Ajax和XML 说到这里&#xff0c;就不得不提到另一个概念&#xff1a;Ajax&#xff08;Asynchronous JavaScript&#xff09;&#xff0c;中文可以称之为“js的异步请求”&#xff0c;国内统一称为Ajax。 Ajax的概念是每次打开新的网页时&#xff0c;不要让页面整体刷新&#…

Java学习笔记 --- MySQL-常用数据类型

一、Mysql常用数据类型 二、数值型(整数)的基本使用 使用规范&#xff1a;在能够满足需求的情况下&#xff0c; 尽量选择占用空间小的 # 演示整形的使用 # 使用tinyint来演示范围 有符号 -128 ~ 127 如果没有符号 0-255 # 1. 如果没有指定 unsigned&#xff0c;则TINYINT就是…

卡塔尔世界杯门线技术(GOAL LINE TECHNOLOGY)背后的黑科技

现代职业足球运动员踢球时足球的行进速度&#xff0c;据国际足联统计数据&#xff0c;平均速度可达 60 英里/小时。极少数爆发力超强的职业球员&#xff0c;可以将这个速度刷新到超过 100 英里/小时。比如里斯本竞技队的巴西左后卫罗尼赫伯森在 2006 年以 131.82 英里/小时的速…

HACKTHEBOX——Sunday

nmap 第一次没有进行全端口扫描&#xff0c;只发现了79和111端口&#xff0c;79端口运行着finger程序&#xff0c;111则是rpcbind。 重新扫描一次&#xff0c;这次针对全部端口进行扫描。 nmap -p- -oA nmap 10.10.10.76 然后在扫描端口详细信息 可以发现22022端口运行着ssh…

数据结构——查找最全总结(期末复习必备)

目录 查找的基本概念 线性表的查找 顺序查找 折半查找&#xff08;二分或对分查找&#xff09; 分块查找&#xff08;索引顺序查找&#xff09; 树表的查找 二叉排序树 定义&#xff1a; 二叉排序树的查找&#xff1a; 二叉排序树的插入&#xff1a; 二叉排序树的创建&…

【缺陷识别】SVM金属表面缺陷分类与测量【含GUI Matlab源码 682期】

⛄一、简介&#xff08;附lunwen、答辩PPT&#xff09; 1 题目内容 金属板广泛应用在工业生产与生产生活的各方面。由于金属板制造过程涉及到的设备、工艺等多因素的影响&#xff0c;金属板表面容易出现种类较多、形态各异的缺陷&#xff0c;这些缺陷对金属板的耐磨性、抗腐蚀…

取整的四种方式

取整的四种方式一.基本认识二.四种取整方案1.零向取整2.地板取整3.向右取整4.四舍五入一.基本认识 这里按理说5/2应该为2.5啊&#xff0c;怎么为2呢&#xff1f;按照我们曾经的理解&#xff0c;其实知道符号/其实是取整。但它究竟是如何取整呢&#xff1f; 二.四种取整方案 1.…

小啊呜产品读书笔记001:《邱岳的产品手记-16》第30讲产品案例分析:Primer的扑克牌交互 第31讲 产品分析的套路(下):如何出解决方案?

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-16》第30讲产品案例分析&#xff1a;Primer的扑克牌交互 & 第31讲 产品分析的套路&#xff08;下&#xff09;&#xff1a;如何出解决方案&#xff1f;一、今日阅读计划二、泛读&知识摘录1、第30讲产品案例分析&…

猿如意中的【Visual Studio Code】工具详情介绍

猿如意中的【Visual Studio Code】工具一、 猿如意工具介绍二、 工具名称2.1 下载安装渠道2.2 如何在载猿如意中下载VS Code开发工具&#xff1f;2.3 安装流程2.4 安装完成的界面2.6 VS Code使用步骤常用快捷键使用感受一、 猿如意工具介绍 打开猿如意程序工具。猿如意下载地址…

东北大学2023分布式操作系统考试题目

1、简述分布式系统的设计目标中开放性的特点有哪些&#xff1f; 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 2、简述分布式体系结构中的层次结构&#xff0c;并举出一个层次结构的例子 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 …

20222-02-16 Linux 触摸屏测试工具tslib工具下载、编译、安装,buildroot ARM平台上实际运行

一、tslib全称英文是C library for filtering touchscreen events&#xff0c;是捕捉触摸屏事件的工具。 二、下载地址https://github.com/libts/tslib 三、tslib的代码如下 二、ARM交叉编译流程 1、可能需要安装下面的软件 sudo apt-get install automake autoconf libtool …

数据结构之链表 - (通过代码实现方法,熟悉方法的使用)

文章目录前言1. 链表1.1 什么是链表&#xff1f;1.2 链表的分类2. 链表方法的实现2.1 实现构建思想2.2 代码实现2.2.1 实现方法前的准备工作2.2.2 链表方法:display() - 打印链表, contains() - 查找链表中key值, size() - 求链表长度2.2.3 头插法-addFirst(), 尾插法-addLast(…

比较生成模型

说说GAN/VAE/Flow/Diffusion/AR~~~ 各类生成模型&#xff0c;比如自回归模型Autoregressive Model (AR)&#xff0c;生成对抗网络Generative Adversarial Network (GAN)&#xff0c;标准化流模型Normalizing Flow (Flow)&#xff0c;变分自编码器Variational Auto-Encoder (VA…

软件测试优秀的测试工具,会用三款工作效率能提升一半

我们将常用的测试工具分为10类。 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app自动化工具 10.web安全测试工具 注&#xff1a;工具排名没有任何意义。 大多数初学者&…

图解Python深拷贝和浅拷贝

Python中&#xff0c;对象的赋值&#xff0c;拷贝&#xff08;深/浅拷贝&#xff09;之间是有差异的&#xff0c;如果使用的时候不注意&#xff0c;就可能产生意外的结果。 下面本文就通过简单的例子介绍一下这些概念之间的差别。 对象赋值 直接看一段代码&#xff1a; wil…

蓝桥杯:数字三角形

目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 思路&#xff1a; AC代码&#xff08;Java&#xff09;&#xff1a; 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个…

数据结构基础--排序

一、直接插入排序 思路&#xff1a; 直接插入排序是一种简单的插入排序法 其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 直接插入排序的特性总…

二分查找算法

目录 一 算法简介 1&#xff09;算法解释 2&#xff09;前提 3&#xff09;思想 4&#xff09;分类 5&#xff09;算法模板 mid的计算的实现方法 二分法模板 求某个数的平方根: 二 算法实践 1&#xff09;问题引入 2&#xff09;问题解答 1)解法一&#xff1a;左闭…

[附源码]Node.js计算机毕业设计关山社区居民信息管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

Nacos认证绕过漏洞(CVE-2021-29441)

Nacos认证绕过漏洞&#xff08;CVE-2021-29441&#xff09; 指纹识别 titlenacos漏洞范围 nacos1.2.0版本-nacos1.4.0版本 漏洞复现 靶机ip:192.168.1.4 默认的nacos登录界面 http://192.168.1.14:8848/nacos/#/login利用如下请求包查看只有一个nacos用户 GET /nacos/v…