在实际开发中我们可能会需要在Bean使用前和销毁前进行某些操作,Spring对Bean的生命周期的操作提供了支持,提供如下两种方式:
(1)Java配置方式:
在Java配置类中,使用@Bean注解显示声明Bean的时候,通过@Bean注解的initMethod和destroyMethod为Bean指定这两个阶段执行的函数。
(2)注解方式:
利用JSR-250提供的@PostConstrust和@PreDestroy注解。@PostConstruct注解标识函数在构造函数执行完之后执行。
示例:
(1)java配置方式
①Bean代码
package learnspring.learnspring.initanddestroy;
/**
* @author 肖政宇
* @date 2019-09-26 10:47
* 说明:示例
*/
public class DemoBean {
public DemoBean() {
System.out.println("创建Bean");
}
public void useBean() {
System.out.println("Bean被使用");
}
public void initBean() {
System.out.println("使用Bean之前");
}
public void destroyDean() {
System.out.println("销毁Bean之前");
}
}
②java配置类代码
package learnspring.learnspring.initanddestroy;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 肖政宇
* @date 2019-09-26 10:49
* 说明:java配置类
*/
@Configuration
public class DemoConfiguration {
@Bean(initMethod = "initBean", destroyMethod = "destroyDean")
DemoBean createBean() {
return new DemoBean();
}
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(DemoConfiguration.class);
DemoBean demoBean = context.getBean(DemoBean.class);
demoBean.useBean();
context.close();
}
}
③运行结果
(2)注解方式:
①Bean
package learnspring.learnspring.initanddestroy;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* @author 肖政宇
* @date 2019-09-26 10:47
* 说明:示例
*/
public class DemoBean {
public DemoBean() {
System.out.println("创建Bean");
}
public void useBean() {
System.out.println("Bean被使用");
}
@PostConstruct
public void initBean() {
System.out.println("使用Bean之前");
}
@PreDestroy
public void destroyDean() {
System.out.println("销毁Bean之前");
}
}
Java配置类以及运行结果和方法一一样。