Day2 bean生命周期

bean生命周期函数

我们可以给bean定义初始化函数和销毁函数,Spring在启动和关闭时会自动调用它们。

基于xml

用法:

    
  • init-method:设置初始化方法;
  • destroy-method:设置销毁方法;

示例:

/**
 * xml配置:
 *  init-method="init" destroy-method="destroy"
 */
public class MyConnector {

    public MyConnector() {
        System.out.println("MyConnector: 调用构造函数...");
    }

    public void init() {
        System.out.println("MyConnector: 调用初始化函数,创建连接...");
    }

    public Object getConnection() {
        System.out.println("获取连接...");
        return null;
    }

    public void destroy() {
        System.out.println("MyConnector: 调用销毁函,关闭连接,清除资源...");
    }
}

测试:

    /**
     * 在xml文件中配置初始化和销毁方法
     *  init-method="init" destroy-method="destroy"
     */
    static void xmlTest() {
        // 在初始化Spring容器的时候,会创建MyConnector类
        // 并调用其构造函数和初始化函数
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "com/bailiban/day2/lifecycle/lifecycle.xml");

        // 获取MyConnector对象,并调用相关方法。
        // 注意:MyConnector对象不是在getBean方法中创建的,而是在Spring初始化时已被创建
        context.getBean(MyConnector.class).getConnection();

        // 关闭Spring容器,bean的销毁方法会被执行
        context.close();
    }

运行结果:

MyConnector: 调用构造函数...
MyConnector: 调用初始化函数,创建连接...
获取连接...
MyConnector: 调用销毁函,关闭连接,清除资源...

基于接口

用法:

/**
 * 通过实现InitializingBean接口,创建初始化烦方法
 * 实现DisposableBean接口,创建销毁方法
 */
public class MyConnector2 implements InitializingBean, DisposableBean {

    public MyConnector2() {
        System.out.println("MyConnector: 调用构造函数...");
    }

    public Object getConnection() {
        System.out.println("获取连接...");
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("MyConnector: 调用销毁函,关闭连接,清除资源...");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("MyConnector: 调用初始化函数,创建连接...");
    }
}
  • 继承InitializingBean接口:通过重写afterPropertiesSet方法,设置初始化方法;
  • 继承DisposableBean接口:通过重写destroy方法,设置销毁方法;

测试:

    /**
     * 通过实现InitializingBean接口,创建初始化方法
     * 实现DisposableBean接口,创建销毁方法
     */
    static void interfaceTest() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "com/bailiban/day2/lifecycle/lifecycle.xml");
        context.getBean(MyConnector2.class).getConnection();
        context.close();
    }

运行结果:

MyConnector: 调用构造函数...
MyConnector: 调用初始化函数,创建连接...
获取连接...
MyConnector: 调用销毁函,关闭连接,清除资源...

基于注解

用法:

/**
 * 基于注解的初始化方法和销毁方法
 */
@Component
public class MyConnector3 {

    public MyConnector3() {
        System.out.println("MyConnector: 调用构造函数...");
    }

    public Object getConnection() {
        System.out.println("获取连接...");
        return null;
    }

    @PreDestroy
    public void destroy() {
        System.out.println("MyConnector: 调用销毁函,关闭连接,清除资源...");
    }

    @PostConstruct
    public void init() throws Exception {
        System.out.println("MyConnector: 调用初始化函数,创建连接...");
    }
}
  • @PostConstruct:设置初始化方法;
  • @PreDestroy:设置销毁方法;

xml配置:

如果提示找不到@PostConstruct,则需要在pom.xml中添加依赖:

        
            javax.annotation
            javax.annotation-api
            1.3.2
        

测试:

    /**
     * 基于注解的初始化方法和销毁方法
     */
    static void annotationTest() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "com/bailiban/day2/lifecycle/lifecycle.xml");
        context.getBean(MyConnector3.class).getConnection();
        context.close();
    }

运行结果:

MyConnector: 调用构造函数...
MyConnector: 调用初始化函数,创建连接...
获取连接...
MyConnector: 调用销毁函,关闭连接,清除资源...

你可能感兴趣的:(Day2 bean生命周期)