目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 git docker windows idea maven esp8266 python Arduino

存档:

X

springboot 5个扩展点

1、初始化器ApplicationContextInitializer

ApplicationContextInitializer 是 Spring 框架中的一个接口,它允许你在 Spring 的 ApplicationContext 被刷新(refresh)之前执行一些自定义的初始化操作。通常,这在你需要在 Spring 的 bean 定义被加载和解析之前执行一些特定的逻辑时非常有用。

使用场景

  1. 修改环境属性:你可以使用 ApplicationContextInitializer 来修改 Spring 的环境属性,例如添加或覆盖属性源。
  2. 注册自定义的 BeanPostProcessor:在 ApplicationContext 被刷新之前,你可能需要注册自定义的 BeanPostProcessor
  3. 执行一些早期的初始化操作:有些操作需要在 Spring 容器完全初始化之前执行,例如初始化某些资源或执行一些预加载的任务。

如何使用

要使用 ApplicationContextInitializer,你需要实现该接口,并重写 initialize 方法。然后,你需要将这个实现类注册到 Spring 容器中。

下面是一个简单的例子:

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;

public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        // 在这里执行你的初始化逻辑
        System.out.println("ApplicationContextInitializer 执行了!");
    }
}

注册到 Spring 容器中:

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;

public class MainApp {

    public static void main(String[] args) {
        AbstractApplicationContext context = new AnnotationConfigApplicationContext();
        context.addInitializer(new MyApplicationContextInitializer());
        context.register(AppConfig.class);
        context.refresh();
    }
}

在上面的例子中,MyApplicationContextInitializer 会在 AppConfig 中的 bean 定义被加载和解析之前执行。

注意

  • ApplicationContextInitializer 的执行顺序是按照它们被添加到 ApplicationContext 中的顺序来确定的。
  • 如果你想在 Spring 容器完全初始化之后执行某些操作,可以考虑使用 ApplicationListener 监听 ContextRefreshedEvent 事件。

总的来说,ApplicationContextInitializer 提供了一个机制,允许你在 Spring 的 ApplicationContext 被刷新之前执行自定义的初始化操作。

2、监听器ApplicationListener

ApplicationListener 是 Spring 框架中的一个接口,用于监听 ApplicationContext 发出的事件。这是 Spring 提供的事件驱动机制的一部分。ApplicationListener 可以监听内置事件和自定义事件。

内置事件

内置事件主要是围绕 ApplicationContext 的生命周期触发的。与 ApplicationListener 配合使用的是 ApplicationContextEvent,它分为以下几种:

  1. ContextRefreshedEvent:当 ApplicationContext 被初始化或刷新时触发。
  2. ContextStartedEvent:当 ApplicationContext 启动时触发。
  3. RequestHandledEvent:这是一个特定于 web 的事件,告诉所有 bean HTTP 请求已经被服务。它只能应用于使用 DispatcherServlet 的 Web 应用。

自定义事件

除了内置事件,你还可以定义自己的事件,并通过实现 ApplicationListener 接口来监听它们。例如,你可以创建一个名为 MyApplicationListener 的类,实现 ApplicationListener 接口,并指定它要监听的事件类型。

使用场景

ApplicationListener 通常用于实现事件驱动模型开发。例如,你可能想在 ApplicationContext 刷新或启动时执行某些操作,或者在处理 HTTP 请求后执行某些操作。通过监听相应的事件,你可以在这些事件发生时执行自定义的逻辑。

如何使用

要使用 ApplicationListener,你需要创建一个类并实现 ApplicationListener 接口,然后指定要监听的事件类型。然后,你可以将这个监听器注册到 Spring 容器中,或者使用注解(如 @Component)将其声明为一个 bean。

例如:

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 在这里执行你的逻辑
        System.out.println("ContextRefreshedEvent 被触发了!");
    }
}

在上面的例子中,MyApplicationListener 是一个监听 ContextRefreshedEvent 的监听器。当 ApplicationContext 被刷新时,它的 onApplicationEvent 方法将被调用。

3、Runner

4、BeanFactoryPostProcessor

5、BeanPostProcessor


标题:springboot 5个扩展点
作者:llilei
地址:http://solo.llilei.work/articles/2024/02/23/1708656037358.html