第2章:spring中的Bean/2.5 Bean的周期回调/2.5.1 概念
-
- 这里的声明周期指的是Bean在创建完成后和销毁时这两个时间点,对于不同的作用域这两个时间点有所不同
- 作用域对应的时间点
- 单例:singleton( 第2章:spring中的Bean/2.3 Bean的作用域/2.3.1 单例:singleton)
- 初始化:
- spring容器启动时,也就是生成spring的applicationContext对象时,具体参考:
- bean对象被引用时
- applicationContext.getBean操作时
- 销毁 通过applicationContext 对象调用registerShutdownHook方法
- 初始化:
- 原型作用域:prototype( 第2章:spring中的Bean/2.3 Bean的作用域/2.3.2 原型作用域:prototype)
- 初始化:
- bean对象被引用时
- applicationContext.getBean操作时
- 销毁:因为prototype作用域对象无法跟踪,不会调用销毁方法
- 初始化:
- 请求作用域:request( 第2章:spring中的Bean/2.3 Bean的作用域/2.3.3 请求作用域:request)
- 会话作用域:session( 第2章:spring中的Bean/2.3 Bean的作用域/2.3.4 会话作用域:session)
- 单例:singleton( 第2章:spring中的Bean/2.3 Bean的作用域/2.3.1 单例:singleton)
第2章:spring中的Bean/2.5 Bean的周期回调/2.5.2 声明周期方法
第2章:spring中的Bean/2.5 Bean的周期回调/2.5.3 XML方式定义回调方法
- Bean对象创建完成后初始化方法:init-method="方法名",这里的方法名符合: 第2章:spring中的Bean/2.5 Bean的声明周期/2.5.2 声明周期方法
- Bean对象销毁之前清理方法:destroy-method="方法名",这里的方法名符合: 第2章:spring中的Bean/2.5 Bean的声明周期/2.5.2 声明周期方法
- 举例:
- 类定义:
public class Foo {
//初始化方法
public void init() throws Exception {
System.out.println("Foo.init method invoked");
}
//销毁方法
public void destroy() throws RuntimeException {
System.out.println("Foo.destroy method invoked");
}
}
- XML格式定义:
<!-- init和 destroy分别对应com.wiley.beginningspring.ch2.Foo类中的方法-->
<bean id="foo" class="com.wiley.beginningspring.ch2.Foo" init-method="init" destroy-method="destroy"/>
- 调用方法:
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");
applicationContext.registerShutdownHook();
}
}
- 调用结果:Foo.init method invoked
Foo.destroy method invoked
- 类定义:
第2章:spring中的Bean/2.5 Bean的周期回调/2.5.4 注解方式方式定义回调方法
- Bean对象创建完成后初始化方法:使用注解:@PostConstruct,
- Bean对象销毁之前清理方法:使用注解:@PreDestroy
- 举例:
- 类定义:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public void init() throws Exception {
System.out.println("Bar.init method invoked");
public void destroy() throws RuntimeException {
- XML中定义:
- 调用方法:
public static void main(String[] args) {
- 调用结果: Bar.init method invoked
- 类定义:
第2章:spring中的Bean/2.5 Bean的周期回调/2.5.5 实现接口方式
- Bean对象创建完成后初始化方法:实现接口InitializingBean中的public void afterPropertiesSet() throws Exception方法
- Bean对象销毁之前清理方法:实现接口DisposableBean中的public void destroy() throws Exception方法
- 举例:
- 举例:
- 类定义:
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class Baz implements InitializingBean, DisposableBean {
public void afterPropertiesSet() throws Exception {
System.out.println("Baz.init method invoked");
public void destroy() throws Exception {
- XML中定义:
- 调用方法:
public static void main(String[] args) {
- 调用结果: Baz.init method invoked
- 类定义:
- 举例: