Spring Bean生命周期回调——初始化回调(init-method)与销毁回调(destroy-method)

实现Bean初始化回调和销毁回调各有三种方法,一是实现接口方法,二是在XML配置,三是使用注解

初始化回调(init-method)

1、使用接口
org.springframework.beans.factory.InitializingBean接口类的作用是:在容器设置bean必须的属性之后执行初始化工作。
InitializingBean接口中只有一个方法:void afterPropertiesSet() throws Exception;
实现:

<bean id="CristianoRonaldo"  class="twm.spring.LifecycleTest.User" />
public class User implements InitializingBean {
      @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("调用接口:InitializingBean,方法:afterPropertiesSet,无参数。");
    }
}

2、使用XML

<bean id="CristianoRonaldo"  class="twm.spring.LifecycleTest.User" init-method="customer_init"/>
public class User {
    public void customer_init() {
    System.out.println("调用init-method指定的初始化方法:customer_init。" );
    }
}

3、使用注解
3.1 JSR-250注解的方式(需要导入jsr250-api的jar包)
public class ExampleBean {
@PostConstruct
public void customer_init() {
System.out.println("@PostConstruct注解指定的初始化方法:customer_init。" );
}

}

3.2 使用java Config,要在@Bean注解中使用initMehtod属性

@Bean(initMethod = "customer_init")
public User user() {
     ...
}

销毁回调(destroy-method)

1、使用接口
实现org.springframework.beans.factory.DisposableBean接口,作用是Spring销毁bean时调用该方法。
DisposableBean接口只有一个方法:void destroy() throws Exception;

实现:

<bean id="CristianoRonaldo"  class="twm.spring.LifecycleTest.User" />

public class User implements DisposableBean {
    @Override
    public void destroy() throws Exception {
        System.out.println("调用接口:DiposibleBean,方法:destroy,无参数。");
    }
}

2、使用XML

<bean id="CristianoRonaldo"  class="twm.spring.LifecycleTest.User"  destroy-method="customer_destory"/>
public class User {
    public void customer_destory() {
    System.out.println("调用destory-method指定的初始化方法:customer_destory。" );
    }
}

3、使用注解
3.1 JSR-250注解的方式(需要导入jsr250-api的jar包)

public class User {
@PreDestory
    public void customer_destory() {
        System.out.println("调用destory-method指定的初始化方法:customer_destory。" );
    }
}

3.2 使用java Config,要在@Bean注解中使用initMehtod属性

@Bean( destroyMethod = "customer_destory")
public User user() {
     ...
}

全局设置

在顶级元素中定义初使化和销毁函数(必须统一函数名)

<beans default-init-method="customer_init" default-destroy-method="customer_destory">
    <bean id="CristianoRonaldo"  class="twm.spring.LifecycleTest.User" />
</beans>

总结

1、在一个bean中,配置多种生命周期回调机制,会按照下列次序调用:
带@PostConstruct注解的方法 -> InitializingBean回调接口中的afterPropertiesSet()方法 ->自定义的init()方法

2、销毁回调也使用相同的次序
带@PreDestroy注解的方法 -> DisposableBean回调接口中的destroy()方法 ->自定义的destroy()方法

3、不管是通过实现 InitializingBean/DisposableBean 接口,还是通过 <bean> 元素的init-method/destroy-method 属性进行配置,都只能为 Bean 指定一个初始化 / 销毁的方法。但是使用 @PostConstruct 和 @PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标注 @PostConstruct 或 @PreDestroy 注释的方法都会在初始化 / 销毁时被执行。

4、不建议使用接口和注解实现方式,因为这会让pojo类与Spring框架紧耦合。

猜你喜欢

转载自blog.csdn.net/m0_37556444/article/details/83111296
今日推荐