Spring @PostConstruct和@PreDestroy注释
时间:2020-01-09 10:44:35 来源:igfitidea点击:
在这篇文章中,我们将看到在Spring bean生命周期中在何处以及如何使用@PostConstruct和@PreDestroy注释。
Spring @PostConstruct注释
PostConstruct注释用于需要依赖注入完成以执行任何初始化之后要执行的方法上。
任何用@PostConstruct注释的方法都被视为初始化回调,该回调与容器对bean生命周期的管理挂钩。一旦容器实例化了bean,就调用该方法以执行任何bean初始化。
Spring @PreDestroy注释
PreDestroy注释用于在容器删除bean实例的过程中调用的方法。
任何用@PreDestroy注释的方法都被视为销毁回调,当包含它的容器被销毁时,该方法可使bean获得回调。这样就有机会在销毁bean之前执行一些清理。
Spring @PostConstruct和@PreDestroy注释示例
请注意,使用@PostConstruct和@PreDestroy注释需要javax注释API。我们需要为此从Java 9开始添加依赖项。
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>
这是一个带有方法的类,该方法使用@PostConstruct和@PreDestroy注释进行注释。
import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.stereotype.Component; @Component public class MyBean { public void myMethod() { System.out.println("In MyMethod of MyBean class"); } @PostConstruct public void initMethod() { System.out.println("calling init method for post construct"); } @PreDestroy public void destroyMethod() { System.out.println("calling destroy method for pre destroy"); } }
AppConfig类
@Configuration @ComponentScan("com.theitroad.springexample") public class AppConfig { }
请更改基本软件包以根据软件包结构进行扫描。
使用main方法的类来运行示例。
public class App { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); context.close(); } }
如我们所见,此类仅使用AppConfig作为配置来创建上下文,然后关闭上下文并没有做太多事情。
创建上下文时,将实例化所有bean,因此应在此处调用@PostConstruct注释的方法。当上下文关闭时,应调用以@PreDestroy注释的方法。
输出:
19:20:08.649 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'myBean' call init method for post construct call destroy method for pre destroy