首页 > 其他分享 >【踩坑记录】单测中@PostConstruct多次执行

【踩坑记录】单测中@PostConstruct多次执行

时间:2023-02-08 14:22:05浏览次数:42  
标签:初始化 记录 PostConstruct BeforeClass 单测 执行 方法

问题复现:

单测中@PostConstruct修饰的方法被多次执行

原因:

@PostConstruct在Spring中常用于在构造函数后初始化对象,执行顺序如下:

构造方法->成员变量注入->PostConstruct方法

单测中由于某些原因,只希望初始化执行一次(当然一般是使用@BeforeClass或者@BeforeAll),不过我这里因为某些不可描述的原因,不希望使用静态方法进行初始化,因此想到了PostConstruct注解,单测执行后发现,初始化执行了多次,就是PostConstruct方法执行了多次。那首先怀疑,是不是所有单测方法运行的时候,都会构造一个单测对象呢?这样每次构造单测类对象后都会执行一次PostConstruct。debug验证了一下发现,跟猜想一样,Junit使用@RunWith(SpringRunner.class)执行时,项目启动时调用了一次构造,但是此时并没有调用PostConstruct方法,PostConstruct方法和Test都是在项目启动后执行的,然后每个单测方法执行都会依次执行 构造->PostConstruct方法->Test方法。

解决:

需要保证PostConstruct方法多次执行结果相同,即幂等,比如加个标识符或者判断一个待初始化的值是否已被初始化,另外需要注意,这个待初始化的值需要是static的,保证每次执行PostConstruct方法时拿到的都是同一个变量

其实写完之后感觉,如果这样用的话,不是跟@Before效果一样了。(补充:后来测了一下确实一样)

最后还是推荐使用@BeforeClass,如果你用@BeforeClass修饰的方法不是静态的,或者不好改成静态的,多半是代码写的有问题

标签:初始化,记录,PostConstruct,BeforeClass,单测,执行,方法
From: https://www.cnblogs.com/maerpao/p/17101603.html

相关文章

  • 多终端命令行记录自动同步
    家里的iMac,Macmini,mbp,公司的mbp...多台机器之间想查看彼此执行过的命令是非常不方便,于是简单看了下#记录历史命令的文件HISTFILE="/Users/zhangtao/Library/MobileDo......
  • 计算机导论学习记录(二)
    这个作业的目标<学习内容的系列记录>这个作业属于哪个课程计算机导论这个作业要求在哪里https://www.bilibili.com/video/BV1EW411u7th/?spm_id_from=333.33......
  • Leetcode打卡记录
    23.2.8189.轮转数组解题思路1:用pythonlist的切片特性,再组合成新的字符串。——失败,未使用原地算法,判定不通过解题思路2(评论区):通过多次翻转,实现右移。1.反转整......
  • 2023-02-08 记录一下react-native app项目搭建过程
    项目开发环境:windows10项目运行系统:Android项目搭建前你得确保你有一个用于开发的IDE和已经安装好了的rn(react-native简称)脚手架,我是要用rn的脚手架来搭建项目的。请分......
  • 使用 Log4Net 记录日志
    使用Log4Net记录日志 第一步:下载Log4Net           下载地址:http://logging.apache.org/log4net/download_log4net.cgi          把下载的......
  • Java学习记录(一)
         ......
  • 课设记录
    12.jsp老师看学生信息,哪个学生报他了。实现是用jsp读取数据库用select根据老师id和status选学生。点击查看利用href向22.jsp学生id。22.jsp显示学生信息,jsp连接数据库。展......
  • 自我介绍与学习记录
    这个作业属于哪个课程https://edu.cnblogs.com/campus/fzzcxy/2023learning这个作业要求在哪里https://edu.cnblogs.com/campus/fzzcxy/2023learning/homework/1......
  • 自我介绍与学习记录
    自我介绍与学习记录这个作业属于哪个课程https://edu.cnblogs.com/campus/fzzcxy/2023learning这个作业要求在哪里https://edu.cnblogs.com/campus/fzzcxy/2023......
  • 记录一起因为阿里云waf防火墙造成公司网站出现405 Method Not Allowed
    公司商城网站是客户访问请求会先到阿里云的CDN在到阿里云的waf防火墙,最后到源站服务器公司商城网站访问刷新5-6次就会出现 405MethodNotAllowed从字面上的意思理解,很......