@PostConstruct 和 @PreDestroy 使用

news2024/9/24 12:26:18

目录

    • 1.简介
    • 2.使用
    • 3.注意事项
    • 4.执行顺序
    • 5.测试
    • 6.测试结果

1.简介

@PostConstruct: Java 自带的注解,在方法上使用该注解,会在项目启动的时候执行被修饰的方法。

@PreDestroy: Java 自带的注解,在方法上使用该注解,会在项目停止的时候执行被修饰的方法。

Java EE5 开始,@PostConstruct 和 @PreDestroy 被增加用来影响 Servlet 的生命周期,这两个注解用来修饰一个非静态的 void() 方法。

2.使用

用法1:

@PostConstruct
public void someMethod(){}

用法2:

public @PostConstruct void someMethod(){}

3.注意事项

  1. 注解修饰的方法,不能有入参。
    否则抛出异常:Lifecycle method annotation requires a no-arg method
  2. 注解所在类必须保证会注入,一般用@Component注解修饰,否则不生效。
  3. 注解修饰的方法,返回值是 void。
    只是建议,实际上是可以有返回值,springboot启动没有报错,但@PostConstruct 一般仅用于初始化bean、预加载常规数据用,所以一般不需要返回值。

4.执行顺序

  • 从依赖注入(DI)的概念我们知道,要将一个对象注入到另一个对象中,那么首先必须得生成这两个对象的实例。所以,当类 a 中有一个对象 p 的成员变量被 @Autowired 注解修饰,那么 @Autowired 注入对象 p 是在对象 a 的构造方法执行完毕之后进行的。
  • 如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。此时可以使用 @PostConstruct 注解修饰一个方法来完成初始化,@PostConstruct 注解会让方法在依赖注入完成后被自动调用。

5.测试

AnnotationTest.java

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * <p> @Title AnnotationTest
 * <p> @Description Bean记载测试类
 *
 * @author ACGkaka
 * @date 2023/1/5 10:45
 */
@Slf4j
@Component
public class AnnotationTest implements InitializingBean, DisposableBean {

    @PostConstruct
    public void postConstruct() {
        log.info("PPPPPostConstruct........");
    }

    @PreDestroy
    public void preDestroy() throws InterruptedException {
        log.info("PPPPPreDestroy.......");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        log.info("IIIIIInitializingBean........");
    }

    @Override
    public void destroy() throws Exception {
        log.info("DDDDDisposable.......");
    }
}

6.测试结果

项目启动日志:

在这里插入图片描述

项目停止日志:

在这里插入图片描述

测试结果证实如下顺序:

  • @PostConstruct -> InitializingBean
  • @PreDestroy -> DisposableBean

整理完毕,完结撒花~





参考地址:

1.@PostConstruct详解,https://blog.csdn.net/sunayn/article/details/92840439

2.java:@PostConstruct注解使用,https://blog.csdn.net/a232884c/article/details/122683275

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

element 日期选择器数据更改,第一次进入页面,页面上没有回显(数据格式问题导致)

需求 页面列表数据&#xff0c;默认是展示一个月的数据 遇到的问题 一进来页面&#xff0c;日期选择器上是空的&#xff0c;但绑定的值是有数据的&#xff0c;页面上并没正确回显&#xff0c;但是去手动选择日期&#xff0c;也是可以正常回显的 思考 其实&#xff0c;选择…

【MySQL进阶教程】 索引详细介绍

前言 本文为 【MySQL进阶教程】 索引 相关知识介绍&#xff0c;下边具体将对索引概述&#xff0c;索引结构&#xff08;包括&#xff1a;索引结构概述&#xff0c;二叉树&#xff0c;B-Tree&#xff0c;BTree&#xff0c;Hash&#xff09;&#xff0c;索引分类&#xff0c;索引…

leetcode练习之商品折扣后的最终价格(单调栈算法)

题目描述 给你一个数组 prices &#xff0c;其中 prices[i] 是商店里第 i 件商品的价格。 商店里正在进行促销活动&#xff0c;如果你要买第 i 件商品&#xff0c;那么你可以得到与 prices[j] 相等的折扣&#xff0c;其中 j 是满足 j > i 且 prices[j] < prices[i] 的 最…

JdbcUtils工具类的优化升级——通过配置文件连接mysql8.0,并对mysql8.0中的表进行[简单查询]操作

目录 一、在DogDao中新增查询的功能 二、在DogDaoImpl类中继承基类&#xff0c;并实现接口的功能 三、创建工具接口RowMapper 四、重新定义一个基类BaseDao2 五、新建一个DogDaoImpl2实现类&#xff0c;继承基类BaseDao2&#xff0c;实现DogDao接口的两个查询功能 六、在…

【Kotlin】函数 ⑧ ( 函数引用 作为函数参数 | ::函数名 | 函数类型 作为函数返回值类型 )

文章目录一、函数引用作为函数参数二、函数类型作为函数返回值一、函数引用作为函数参数 函数 作为参数 , 有两种方式 : 传递 Lambda 表达式 , 也就是 匿名函数 作为参数值 ;传递 函数引用 作为参数值 ; 函数引用 可以将 具名函数 转为 函数的参数值 , 只要可以使用 Lambda 表…

程序员真是越来越懒了,Api 文档都懒得写?程序员:Api工具惯的!

关于大多数程序员不爱写文档问题&#xff0c; 我觉得可以从两个方面去拆解&#xff1a;主观原因、客观原因。 1. 客观 - 时间紧任务重&#xff0c;需求变化快 需求方每次都是紧急需求&#xff0c;老板每次都要求敏捷开发&#xff0c;快速响应。 按时交付的压力已经让大多数程…

区分: 小程序组件 and 小程序插件

近期发现有不少小伙伴分不清小程序组件和小程序插件&#xff0c;以为它们是一回事&#xff0c;只是措辞不一样。但实际上&#xff0c;小程序组件和小程序插件完全是两回事——插件是可以直接提供服务的&#xff0c;组件是给开发者提供的轮子&#xff0c;不能直接提供服务。下面…

Java--基本数据类型

文章目录前言一、数据类型-byte二、数据类型-short三、数据类型-int四、数据类型-long五、数据类型-float六、数据类型-double七、数据类型-char八、数据类型-boolean九、数据类型实例前言 Java提供了八种基本类型&#xff0c;六种数字类型&#xff08;四个整数型&#xff0c;…

LoRa无线远传水表方案ASR6500S/LLCC68

LoRa无线远传水表就是普通机械水表加上电子采集发讯模块而组成&#xff0c;电子模块完成信号采集、数据处理、存储并将数据通过通信线路上传给中继器、或手持式的抄表器。LoRa无线远传水表作为市面上比较火的智能水表&#xff1b;由主站通过传输媒体将多个户用仪表的数据集中抄…

MyBatis讲解,批量删除1

一、批量删除1 入参字符串 ”id1,id2,id3” 批量删除的关键字是 in 1.书写BookMapper 1.1先在navicat的新建查询里书写批量删除的sql语句 批量删除的sql语句 delete from book where id in (12,22); 1.2将sql语句复制到BookMapper里 2.书写BookDao批量删除方法 *书写dao…

【安全硬件】Chap.4 如何插入一个硬件木马到芯片的时序逻辑电路的漏洞里?如何构建可信赖的状态机?

【安全硬件】Chap.4 如何插入一个硬件木马到芯片的时序逻辑电路的漏洞里&#xff1f;如何构建可信赖的状态机&#xff1f;前言&#xff1a;硬件木马1. 时序逻辑电路中的设计漏洞Design Vulnerabilities序列检测器的设计漏洞——以智能门锁的虚位密码漏洞为例易受攻击的状态机写…

Qt基础之十八:WebEngine与JavaScript交互

Qt从5.6开始就用Qt Webengine替换了Qt WebKit,据说加载速度较Qt WebKit更快。 需在pro中添加QT += webenginewidgets 一.效果 二.实现 1.JavaScript调用Qt函数 在MainWindow中定义成员变量QWebChannel *m_channel;作为和web通信的数据通道 ①加载网页 void MainWindow::l…

多线程案例-阻塞式队列

1.什么是阻塞队列阻塞队列是一种特殊的队列,在"先进先出"的原则下又引入了"阻塞"功能阻塞队列能是一种线程安全的数据结构,具有以下特性:当队列满的时候,继续入队列就会阻塞,直到其它线程从队列中取走元素当队列空的时候,继续出队列就会阻塞,直到其它队列向…

内蒙古大学计算机考研893计算机考研真题分享

内蒙古大学计算机学院成立于1997年&#xff0c;软件学院成立于2005年&#xff0c;与计算机学院为一个实体&#xff0c;两个牌子。 目前&#xff0c;学院由计算机科学系、软件工程系、信息管理系和计算中心&#xff08;实验中心&#xff09;组成&#xff0c;设有计算机科学与技…

uniapp开发小程序引入微信快递跟踪(快递100)插件

目录 1.小程序插件接入 2.代码示例 3.页面接收参数 4.常用快递100公司编码表 1.小程序插件接入 微信快递100插件地址&#xff1a;快递100-快递查询&#xff08;免费接入&#xff09; | 微信服务市场 (qq.com) 1&#xff09;进入链接地址 2&#xff09;登陆开发小程序的账…

二叉树18:从中序与后序遍历序列构造二叉树

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;344. 反转字符串 题目&#xff1a; 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的…

最全Go select底层原理,一文学透高频用法

导语 |在日常开发中&#xff0c;select语句被高频使用。但目前&#xff0c;全网分析select在编译期和运行时的完整底层原理资料&#xff0c;非常匮乏。本文基于Go1.18.1版本的源码&#xff0c;讲解select访问Channel在编译期和运行时的底层原理——select编译器优化用到的src/c…

2022年第十二届APMCM亚太杯1月增赛E题发布

2022年亚洲及太平洋地区建模数学竞赛问题E 有多少颗核弹可以摧毁地球? 1945年8月6日&#xff0c;第二次世界大战接近尾声。为了尽快结束战争&#xff0c;美国在日本广岛投下了名为"小男孩"的下一颗原子弹。这样一颗原子弹炸死了广岛的200000人&#xff0c;广岛的所有…

【数据结构Java版】对象的比较之Comparable与Comparator比较器

目录 一、基本类型的比较 二、对象类型的比较 &#xff08;1&#xff09;对象类型比较出现的问题 &#xff08;2&#xff09;重写基类equals方法 &#xff08;3&#xff09;基于Comparable接口的比较 1.实现Comparable接口&#xff0c;重写compareTo方法 &#xff08;4&a…

Flask框架中常规漏洞防范方法

一、前言 Double Fetch是一种条件竞争类型的漏洞&#xff0c;其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差&#xff0c;我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy_from_user&#xff0c;而如果要拷贝的数据过于复杂的话…