Fork me on GitHub

Java项目启动时执行指定方法的几种方式

很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等。这里给出几种解决方案供大家参考。

1. 使用@PostConstruct注解

这个注解呢,可以在Spring加载这个类的时候执行一次。来看一下下方代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Component
public class Test {

public Test(){
System.out.println("我最先执行");
}

/**
*我第二个执行
*/
@Autowired
private T t;

/**
*我第三个个执行
*/
@PostConstruct
private void init(){
//假装有代码
}
}

上方就是@PostConstruct注解的使用方法了,同时也表示了此类被加载时的执行顺序。

2. CommandLineRunner接口

使用CommandLineRunner接口类似于Main方法启动,可以接受一个字符串数组的命令行参数,来看一下实现

1
2
3
4
5
6
7
8
@Component
public class MyCommandLineRunner implements CommandLineRunner{

@Override
public void run(String... args) throws Exception{
//假装有代码
}
}

3. ApplicationRunner 接口

此种方式与实现CommandLineRunner接口的区别就是他的参数是ApplicationArguments

1
2
3
4
5
6
7
8
9
10

@Order(value = 1)
@Component
public class MyApplicationRunner implements ApplicationRunner{

@Override
public void run(ApplicationArguments args) throws Exception{
//假装有代码
}
}

我们可以看到,此类相比较于第二种方式还增加一个@Order注解,这个注解其实第二种方式也是能加的。

它的作用就是控制类的加载顺序,这个顺序是从小到大的。比如说启动时先去加载Order的value等于1的类,然后去加载等于2的类。

 

 

本文出自http://zhixiang.org.cn,转载请保留。

posted @   石玉军  阅读(25524)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
阅读排行:
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束
点击右上角即可分享
微信分享提示