当前位置: 首页 > news >正文

Spring IoC配置(xml+组件类的生命周期方法)

文末有本篇文章对应的项目源码文件可供下载

生命周期方法概念

我们可以在组件类中定义一个或者两个方法,然后当Spring IoC容器实例化和销毁组件类对象的时候进行自动调用.我们定义的方法就叫做组件的生命周期方法.

类似于Servlet的init/destroy方法,Tomcat可以在创建Servlet时自动执行Servlet的init方法,在销毁Servlet时自动执行Servlet的destroy方法,以此来完成Servlet的初始化和释放资源等业务逻辑。

0.配置思路

1.搭建好项目之后,编写Customer.java组件类,并在组件类中定义init方法和clear方法.

2.配置applicationContext.xml文件,配置组件类信息

3.编写SpringTest.java,进行测试.

1.配置pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.14</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.编写Customer.java自定义组件类

public class Customer {

    /**
     * 组件初始化方法
     */
    public void init() {
        System.out.println("Initializing Customer");
    }

    /**
     * 组件销毁方法
     */
    public void clear() {
        System.out.println("Clearing Customer");
    }
}

初始化方法与销毁方法的命名是自定义的,但是在其他方面有一定的要求:

  1. 必须是public
  2. 必须是void
  3. 必须是无参数的

3.编写applicationContext.xml文件,配置组件类信息

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--    配置自定义组件类-->
<!--    init-method: 定义组件初始化函数-->
<!--    destroy-method: 定义组件销毁函数-->
    <bean id="customer" class="com.my.ssm.Customer" init-method="init" destroy-method="clear"/>

</beans>

4.编写SpringTest.java测试文件

public class SpringTest {

    @Test
    public void test1() {

//        创建Spring IoC容器,创建完成就会自动进行组件类对象的实例化
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

//        该方法是为了Spring IoC容器正常结束
        context.close();
    }
}

我们可以发现,我们在程序中调用了context对象的close()方法,该方法是为了正常关闭Spring IoC容器.

在Spring IoC容器正常结束的情况下,Spring IoC容器才会去调用组件类对象的destroy-method所对应的销毁方法;

在Spring IoC容器异常关闭的情况下,因为Spring IoC异常关闭了,所以还没有来得及调用组件类对象的destroy-method所对应的销毁方法,因此销毁方法是不执行的,

感兴趣的朋友可以测试下,将该语句删除之后,看是否还会执行组件类对象所对应的销毁方法.

close方法不是ApplicationContext这个接口的方法,而是AbstractApplicationContext类的方法,对于ClassPathXmlApplicationContext这个Spring IoC容器的是实现类,它是继承AbstractApplicationContext类,所以我们可以通过ClassPathXmlApplicationContext类对象来去调用close方法,但是通过ApplicationContext类对象是无法调用close方法的.

5.测试结果

本篇文章的项目源码文件,可供下载学习

相关文章:

  • 精准汇报:以明确答复助力高效工作
  • 网络原理----TCP/IP(3)
  • 解决:org.springframework.web.multipart.support.MissingServletRequestPartException
  • 小练习之配置本地yum源和ssh服务
  • Uniapp使用大疆SDK打包离线原生插件
  • Cherno C++ P61 C++当中的命名空间
  • K8S学习之基础五:k8s中node节点亲和性
  • Nginx1.19.2不适配OPENSSL3.0问题
  • DeepSeek 助力 Vue3 开发:打造丝滑的时间选择器(Time Picker)
  • 17.9 LangSmith Tracing 深度实战:构建透明可观测的大模型应用
  • 蓝桥杯刷题(Cows in a Skyscraper G,炮兵阵营)
  • ffmpeg源码编译支持cuda
  • STM32-GPIO详解
  • 主时钟与虚拟时钟约束
  • 【UCB CS 61B SP24】Lecture 19 20: Hashing Hashing II 学习笔记
  • YOLOv11融合YOLOv12中的R-ELAN结构
  • 通过continue插件实现vscode接入本地离线部署的deepseek
  • chromadb向量数据库使用 (2)
  • DeepSeek 配合 Mermaid,自动生成甘特图
  • Linux常见命令
  • 比黄油年糕热量还高,这个火爆全网的甜品劝你慎吃
  • 日菲同意扩大安全合作,外交部:反对任何在本地区拉帮结派的做法
  • 新型算法助力听障人士听得更清晰
  • 华夏幸福:去年营业收入237.65亿元,同比减亏12亿元
  • 浙商银行一季度净赚超59亿微增0.61%,非息净收入降逾22%
  • 俄罗斯延长非法滞留外国人限期离境时间至9月