SpringBoot项目启动之前操作,启动之后操作

本文详细介绍了在SpringBoot项目中如何进行应用的生命周期管理,包括Bean对象初始化前后的操作、项目启动前后可执行的任务,以及如何利用Spring提供的接口实现自定义的初始化逻辑。

1、在Bean对象初始化之前可以做的操作

@Component
public class InitBean implements BeanDefinitionRegistryPostProcessor {
    private static final Logger logger = LoggerFactory.getLogger(InitBean.class);


    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        logger.info(" init bean1..");
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        logger.info(" init bean2..");
    }
}

 

2、在Bean对象初试完之后可以做的操作

@Component
public class InitBean implements InitializingBean {
    private static final Logger logger = LoggerFactory.getLogger(InitBean.class);

    @Override
    public void afterPropertiesSet() throws Exception {
        logger.info(" init bean..");
    }
}

3、在项目启动之前可以做的操作

@Service
public class StartAddDataListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event){
        System.out.println("=========================初始化");
    }

}

4、在项目启动之后可以做的操作(项目已经启动成功)

Component
public class InitProject implements CommandLineRunner {
    private static final Logger logger = LoggerFactory.getLogger(InitProject.class);

    @Override
    public void run(String... args) {
        logger.info("==========init project===========");
    }
}

 

转载于:https://www.cnblogs.com/longpizi/p/10529645.html

### Spring Boot 项目启动原理流程解释 #### 1. 应用程序入口 应用程序通常由 `main` 方法中的 `SpringApplication.run()` 调用来触发整个启动过程。此方法负责创建并刷新应用上下文,从而完成各种初始化工作[^1]。 ```java public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } ``` #### 2. 创建 `ApplicationContext` 当调用了 `run` 方法之后,框架内部会依据不同的条件选择合适的 `ApplicationContext` 类型来构建容器实例。对于 Web 应用,默认会选择 `AnnotationConfigServletWebServerApplicationContext`;而对于非 Web 应用,则可能使用其他类型的上下文实现类[^3]。 #### 3. 加载配置元数据 紧接着就是解析和加载来自不同来源的应用属性文件(如 application.properties 或者 .yml 文件),以及通过命令行参数传递给 JVM 的环境变量等外部化配置信息。这一步骤确保了开发者能够灵活地调整运行时行为而无需修改源码本身。 #### 4. 执行监听器与事件发布机制 在整个生命周期内,Spring Boot 利用了丰富的监听器接口 (`ApplicationListener`) 和事件体系结构,在特定时刻向注册过的监听对象广播相应的消息通知。比如在准备刷新上下文之前、之后都会发出对应的事件让感兴趣的组件做出响应动作。 #### 5. Bean 定义扫描与注入 随着上下文被逐步填充完善,接下来便是对标注有 @Component 及其衍生注解 (例如@Service,@Repository 等) 的 Java 类进行自动发现,并将其转化为实际可用的 bean 对象存入到 IoC 容器之中待后续按需获取引用。与此同时还会处理诸如循环依赖等问题以保障系统的稳定性和可靠性。 #### 6. 自动装配功能启用 得益于一系列预定义好的 starter pom 模块的支持,使得许多常见的第三方库和服务集成变得异常简单快捷——只需引入相应坐标即可享受开箱即用的良好体验。更重要的是借助于条件化的bean定义方式实现了高度定制化的自动配置能力,极大地方便了用户的开发工作流。 #### 7. 启动完成后回调钩子函数执行 最后,在所有的准备工作都顺利完成以后,如果存在任何实现了 CommandLineRunner 接口或是 ApplicationRunner 接口的对象的话,那么此时就会按照优先级顺序依次调用其中的方法作为最终收尾操作的一部分被执行起来。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值