本文主要是介绍【spring】@PostConstruct和@PreDestroy注解学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
@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文件增加
<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;/*** <p>PrePostDemo类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.preposLearn* Ceate Time 2024-04-11 15:24*/
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 ...");}@PostConstructpublic void postConstruct(){System.out.println("****** PrePostDemo postConstruct ...");}@PreDestroypublic 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;/*** <p>PrePostDemoConfig配置类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.preposLearn* Ceate Time 2024-04-11 15:25*/
@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;/*** <p>PrePostDemoTest测试类</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.annotation.preposLearn* Ceate Time 2024-04-11 15:25*/
public class PrePostDemoTest {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostDemoConfig.class);context.close();}
}
运行结果
这篇关于【spring】@PostConstruct和@PreDestroy注解学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!