Spring中@PostConstruct和@PreDestroy注解详解与实战
创作时间:
作者:
@小白创作中心
Spring中@PostConstruct和@PreDestroy注解详解与实战
引用
CSDN
1.
https://blog.csdn.net/wochunyang/article/details/137560813
@PostConstruct和@PreDestroy介绍
@PostConstruct和@PreDestroy是Java EE(Enterprise Edition)和Java SE(Standard Edition)中的注解,它们用于指定一个bean在其生命周期的特定点应该执行的方法。这两个注解是JSR250规范中提供的注解。
- @PostConstruct:
- 这个注解用于标记一个方法,该方法将在依赖注入完成后立即执行。
- 它通常用于执行对象的初始化操作,比如设置默认值、连接数据库、打开文件等。
- 这个注解可以应用于任何方法,但通常建议只应用于无参数的方法。
- 当一个类被实例化并注入依赖后,容器会自动调用标记有@PostConstruct的方法。
- @PreDestroy:
- 这个注解用于标记一个方法,该方法将在对象被销毁之前执行。
- 它通常用于执行清理操作,比如关闭数据库连接、释放资源等。
- 与@PostConstruct类似,@PreDestroy也可以应用于任何方法,但通常建议只应用于无参数的方法。
- 当容器决定销毁一个对象时,它会自动调用标记有@PreDestroy的方法。
@PostConstruct和@PreDestroy源码
@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PostConstruct {
}
@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PreDestroy {
}
@PostConstruct和@PreDestroy属性介绍
无属性。
@PostConstruct和@PreDestroy注解使用场景
- 资源初始化和配置:
- 在对象创建后,可能需要初始化一些资源,如数据库连接、网络连接、文件句柄等。@PostConstruct注解可以用来确保这些资源在对象准备好使用之前被正确地初始化。
- 依赖注入后的设置:
- 在依赖注入完成后,可能需要对注入的依赖进行一些额外的设置或验证。@PostConstruct注解可以用来执行这些操作。
- 对象销毁前的清理:
- 当对象不再需要时,可能需要执行一些清理操作,如关闭数据库连接、释放内存、清理临时文件等。@PreDestroy注解可以用来确保这些清理操作在对象被销毁之前执行。
- 状态保存:
- 在对象销毁之前,可能需要保存对象的状态,以便在下次启动时恢复。@PreDestroy注解可以用来执行这些保存操作。
- 日志记录:
- 在对象创建和销毁时,可能需要记录日志,以便跟踪对象的生命周期。@PostConstruct和@PreDestroy注解可以用来记录这些事件。
- 事务管理:
- 在某些情况下,可能需要在对象创建后立即开始一个事务,或者在对象销毁前提交或回滚事务。@PostConstruct和@PreDestroy注解可以用来管理这些事务。
- 安全性和权限检查:
- 在对象创建后,可能需要执行安全性和权限检查,以确保对象只能被授权的用户访问。@PostConstruct注解可以用来执行这些检查。
- 依赖检查:
- 在对象创建后,可能需要检查依赖是否存在或是否满足特定的条件。@PostConstruct注解可以用来执行这些检查。
- 性能优化:
- 在对象创建后,可能需要进行一些性能优化,如缓存配置、调整线程池大小等。@PostConstruct注解可以用来执行这些优化。
- 测试和验证:
- 在对象创建后,可能需要进行一些测试和验证,以确保对象的正确性。@PostConstruct注解可以用来执行这些测试。
@PostConstruct和@PreDestroy测试示例代码
Maven依赖
在pom.xml中添加以下依赖:
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>
PrePostDemo类
package com.yang.SpringTest.annotation.preposLearn;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class PrePostDemo {
public PrePostDemo() {
System.out.println("****** PrePostDemo constructor ...");
}
public void initMethod() {
System.out.println("****** PrePostDemo init ...");
}
public void destroyMethod() {
System.out.println("****** PrePostDemo destroy ...");
}
@PostConstruct
public void postConstruct(){
System.out.println("****** PrePostDemo postConstruct ...");
}
@PreDestroy
public void preDestroy(){
System.out.println("****** PrePostDemo preDestroy ...");
}
}
PrePostDemoConfig配置类
package com.yang.SpringTest.annotation.preposLearn;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class PrePostDemoConfig {
@Bean(initMethod = "initMethod", destroyMethod = "destroyMethod")
public PrePostDemo prePostDemo(){
return new PrePostDemo();
}
}
PrePostDemoTest测试类
package com.yang.SpringTest.annotation.preposLearn;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class PrePostDemoTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostDemoConfig.class);
context.close();
}
}
运行结果
热门推荐
歼-20:中国最先进战斗机的隐形技术解析
元素周期表中的主族元素特性与应用
AI智能写作时代来临:如何高效提升你的文案创作能力
电压力锅怎么选?买电压力锅的10大忠告
私募基金信息披露指南:规范性文件、原则与操作流程详解
维生素D早上吃还是晚上吃?饭前吃还是饭后吃?一文带你说清楚!
木箱包装结构设计:关键要素与案例分析
"科学种族主义"并不科学
八字算命中的“命”与“运”:两者有何不同
让孩子友谊的小船升级为巨轮!家长助力同伴关系发展的五大策略
【唐诗小课堂】白居易《钱塘湖春行》
青少年走进社会“大课堂”,看一支钢笔如何承载“匠心”
缔约过失责任的法规适用情况
《反恐精英CS2》炼金系统详解:概率计算与期望值分析
北京—蔚县高速公路全线通车运营
人类未来的星际殖民道路,迈向星系级文明,从征服月球到征服虫洞
23楼和26楼哪个楼层好?理性选择提升生活品质
很久没联系的人,突然又联系你,原因往往只有这3个
企业贷逾期后主要谁来承担后果
哪些因素决定奥运选手的巅峰期?
23省份人口数据出炉:浙江海南增量领跑,中西部仅贵州正增长
运动减肥难坚持?针灸按摩来支招
投资交易中的胜率、赔率和频率:一个不可能三角的解析
电子产品选购指南:手机、电脑、相机,如何挑选最适合你的那一款
唐朝人如何评价隋炀帝?名副其实的暴君还是功大于过的帝王?
谁该背锅?明星基金经理刚离职,接任者14天巨亏16%遭基民集体声讨
Y染色体序列揭示美洲土著创始者短暂的白令停滞与快速扩张
成都三星堆详细游览路线 参观三星堆博物馆保姆级攻略
考研复习中的休息与放松:保持高效学习的秘诀
潮汕卤水拼盘:传统美食的匠心制作