一个神奇的标签-@PostConstruct
2021/8/8 23:38:52
本文主要是介绍一个神奇的标签-@PostConstruct,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、问题描述
项目中封装了个restTemplate的静态调用类,统一调用外围接口,但是发现外围系统有些接口反应时间不稳定,还存在失败的情况,为了便于追踪问题,将对外围系统的入参和出参以及响应时间写入到数据库中,但是项目中都是通过静态类调用的,写入数据的方法是动态方法,无法使用,记录下解决方案,希望能帮助需要的朋友。
2、解决方案
2.1 简单介绍
简单说就是用使用jdk提供的@PostConstruct这个标签来实现,先介绍下@PostConstruct这个神奇的标签。
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
重点说下执行顺序:
通常我们会是在Spring框架中使用到@PostConstruct注解,该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
这个顺序很重要,这样我们就可以利用@Autowired注入的bean了。
2.2 代码介绍
package com.laowang.spcrud.service; import com.laowang.spcrud.db.entity.LPageInfo; import com.laowang.spcrud.db.entity.TLaowang; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.List; /** * 软件老王静态调用service测试类 */ @Component public class StatisTest { public static StatisTest statisTest = new StatisTest(); //声明对象 //Spring注入 @Autowired TestService testService; //初始化 @PostConstruct public void init() { statisTest.testService = testService; } public static void staticPrint() { System.out.println("软件老王是个大帅哥!"); } public static void testMain() { StatisTest.staticPrint(); List<TLaowang> list = statisTest.testService.selectAll(new LPageInfo(1, 2)); System.out.println(list.toString()); } }
通过以上代码可以看出来主要是以下三行代码:
(1)new 一个静态对象,这个时候对象里面的testService是空值
public static StatisTest statisTest = new StatisTest(); //声明对象
(2)spring通过标签@Autowired注入servicebean
@Autowired TestService testService;
(3)通过 @PostConstruct,将Spring注入的bean赋给new出来的StatisTest对象的testService
//初始化 @PostConstruct public void init() { statisTest.testService = testService; }
2.3 项目启动
当项目启动的时候,这个时候进入@PostConstruct的init方法的时候,发现statisTest对象的service是空的, 通过spring标签@Autowired注入的TestService(bean),已经有值;
2.4 代码验证
2.4.1 controller中直接通过类.方法调用
@RequestMapping(value ="/test", method = RequestMethod.POST) @ResponseBody public void test() { StatisTest.testMain(); }
2.4.2 swagger验证
2.4.3 进入testmain方法
2.4.4 数据已经从数据库中获取到
更多信息请关注公众号:「软件老王」,关注不迷路,软件老王和他的IT朋友们,分享一些他们的技术见解和生活故事。
这篇关于一个神奇的标签-@PostConstruct的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升