当前位置: 代码网 > it编程>编程语言>Java > SpringBoot启动时执行某些操作的8种方式

SpringBoot启动时执行某些操作的8种方式

2025年10月17日 Java 我要评论
实现方案一、applicationrunner1. 执行时机springboot 应用完全启动后。2. 核心特点实现 applicationrunner 接口,通过applicationargumen

实现方案

一、applicationrunner

1. 执行时机

springboot 应用完全启动后。

2. 核心特点

实现 applicationrunner 接口,通过 applicationarguments 对象访问参数,可以更方便地解析命令行参数(例如获取--key=value形式的参数值)。

如果定义了多个runner,可以使用 @order 注解来控制他们的执行顺序,数值越小优先级越高。

3. 代码示例

@component
@order(1) // 执行顺序,可选
public class myapplicationrunner implements applicationrunner {
    @override
    public void run(applicationarguments args) throws exception {
        // 这里写你的启动执行逻辑,例如初始化缓存
        // args 可以访问应用参数
    }
}

二、commandlinerunner

1. 执行时机

springboot 应用完全启动后。

2. 核心特点

实现 commandlinerunner 接口,通过 string... args 直接访问命令行原始参数数组。

如果定义了多个runner,可以使用 @order 注解来控制他们的执行顺序,数值越小优先级越高。

3. 代码示例

@component
@order(2) // 执行顺序,可选
public class mycommandlinerunner implements commandlinerunner {
    @override
    public void run(string... args) throws exception {
        // 这里写你的启动执行逻辑
        // args 可以访问命令行原始参数
    }
}

三、@postconstruct 注解

1. 执行时机

bean 初始化时,在对象依赖注入完成后执行。

2. 核心特点

注解在方法上,使用简单。

此时 spring 容器可能还未完全初始化完毕,部分 bean 可能尚未就绪,需注意可能的依赖问题。

3. 代码示例

@component
public class myinitbean {
    @autowired
    private somerepository repository; // 假设的仓库类,用于数据访问
 
    @postconstruct
    public void init() {
        // 例如,在项目启动时从数据库加载数据到静态变量
        list<somedata> data = repository.findall();
        // ... 其他处理逻辑
    }
}

四、实现 initializingbean 接口

1. 执行时机

bean 的全部属性被设置之后执行。

2. 核心特点

实现接口的 afterpropertiesset 方法。

与 @postconstruct 类似,都是 bean 生命周期中的初始化方法。

3. 代码示例

@component
public class myinitializingbean implements initializingbean {
    @autowired
    private somedependency dependency;
 
    @override
    public void afterpropertiesset() throws exception {
        // 确保属性dependency注入后,再执行初始化
        // 你的初始化逻辑
    }
}

五、实现 beanpostprocessor 接口

1. 执行时机

在 bean 的初始化前后执行。

2. 核心特点

实现接口的 postprocessbeforeinitialization 与 postprocessafterinitialization 方法。

这个接口会影响所有的 bean 初始化。

3. 代码示例

@component
public class mybeanpostprocessor implements beanpostprocessor {
    @override
    public object postprocessbeforeinitialization(object bean, string beanname) throws beansexception {
        // 在初始化之前执行的逻辑
        system.out.println("before initialization: " + beanname);
        return bean; // 返回bean本身或一个新的bean实例(可选)
    }
    @override
    public object postprocessafterinitialization(object bean, string beanname) throws beansexception {
        // 在初始化之后执行的逻辑
        system.out.println("after initialization: " + beanname);
        return bean; // 返回bean本身或一个新的bean实例(可选)
    }
}

六、实现 beanfactorypostprocessor 接口

1. 执行时机

在 spring 容器初始化时执行,此时容器中所有的 bean 定义已经加载完,但是 bean 的实例还未创建。

2. 核心特点

实现接口的 postprocessbeanfactory 方法。

这个接口只会执行一次,执行时机早于 beanpostprocessor 。

3. 代码示例

@component
public class mybeanfactorypostprocessor implements beanfactorypostprocessor {
 
    @override
    public void postprocessbeanfactory(configurablelistablebeanfactory beanfactory) throws beansexception {
        system.out.println("******************** mybeanfactorypostprocessor#postprocessbeanfactory ****************");
        system.out.println("******************** bean的数量:[{}] ****************", beanfactory.getbeandefinitioncount());
        beandefinition userbeandef = beanfactory.getbeandefinition("student");
        // 修改bean definition属性信息
    }
 
}

七、实现 servletcontextlistener 接口

1. 执行时机

web 应用启动初期,在初始化任何过滤器或 servlet 时或者销毁 web 容器时执行。

2. 核心特点

实现接口的 contextinitialized 和 contextdestroyed 方法。

适用于 web 环境,监听 servlet 上下文。

3. 代码示例

@component
public class myservletcontextlistener implements servletcontextlistener {
 
    @override
    public void contextinitialized(servletcontextevent sce) {
        // 在这里写web应用启动时的逻辑
        // 例如,初始化一些web应用级别的资源
    }
 
    @override
    public void contextdestroyed(servletcontextevent sce) {
        // 在这里写web应用关闭时的清理逻辑
    }
}

八、static 静态代码块

1. 执行时机

类被加载时执行。

2. 核心特点

仅仅是类被加载时,bean 还未被创建。

3. 代码示例

@component
public class myclass {
    static {
        system.out.println("执行静态代码块")
    }
}

以上就是springboot启动时执行某些操作的8种方式的详细内容,更多关于springboot启动时执行某些操作的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com