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

发布于:2025-03-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

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

生命周期方法概念

我们可以在组件类中定义一个或者两个方法,然后当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.测试结果

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