自定义ApplicationContextInitializer接口实现

简介: 自定义ApplicationContextInitializer接口实现

简介

ApplicationContextInitializer是Spring框架提供的接口, 该接口的主要功能就是在接口ConfigurableApplicationContext刷新之前,允许用户对ConfigurableApplicationContext实例做一定的操作。该接口只有一个initialize方法。


ApplicationContextInitializer接口源代码

该接口只定义了一个initialize方法。


public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {

void initialize(C applicationContext);


}


实现该接口

实现该接口,并在initialize方法中打印容器中初始化了多少个Bean对象。


@Order(123) // @Order的value值越小越早执行
public class LearnApplicationContextInitializer implements ApplicationContextInitializer {
   @Override
   public void initialize(ConfigurableApplicationContext applicationContext) {
      // 打印容器里面初始化了多少个Bean
      System.out.println("容器中初始化Bean数量:" + applicationContext.getBeanDefinitionCount());
   }
}

接口配置使用

第一种方法

仿照Spring Boot初始化配置使用该接口实现类的方法,在项目的classpath下创建META-INF/spring.factories文件。并仿照Spring Boot的配置格式进行配置:


# Application Context Initializers

org.springframework.context.ApplicationContextInitializer=\

com.secbro2.learn.initializer.LearnApplicationContextInitializer



第二种方法

通过application.properties或application.yml文件进行配置。格式如下:


context.initializer.classes=com.secbro2.learn.initializer.LearnApplicationContextInitializer


第三种方法

通过SpringApplication提供的addInitializers方法进行追加配置的。


public static void main(String[] args) {
   SpringApplication app = new SpringApplication(SpringLearnApplication.class, Person.class);
   app.addInitializers(new LearnApplicationContextInitializer());
   app.run(args);
}

启动程序

启动Spring Boot程序,打印日志:

容器中初始化Bean数量:6
目录
相关文章
|
8月前
|
编译器 C++
【C++】—— c++11新的类功能
【C++】—— c++11新的类功能
|
8月前
|
数据安全/隐私保护 流计算
可以创建一个自定义的`AssignerWithPeriodicWatermarks`实现类
可以创建一个自定义的`AssignerWithPeriodicWatermarks`实现类
90 2
使用自定义的类CSetODBC(一)
使用自定义的类CSetODBC(一)
|
SQL 数据库连接 数据库
使用自定义的类CSetODBC(二)
使用自定义的类CSetODBC(二)
|
Java
类与接口介绍
在Java中,类和接口是两种重要的概念,用于描述对象的属性和行为。它们是面向对象编程的基础,用于组织和管理代码。 类(Class)是一种模板或蓝图,用于创建对象。它定义了对象的属性和行为。类是Java中最基本的组织单元,所有的对象都是根据类来创建的。类由字段(属性)和方法组成。字段表示对象的状态或属性,而方法表示对象的行为或操作。 以下是一个简单的Java类的示例: ```java public class Person { // 字段 private String name; private int age; // 构造方法 publi
71 0
|
8月前
|
Java
如何在类中实现并调用多个接口中的共享方法。
如何在类中实现并调用多个接口中的共享方法。
64 1
课外作业(2)接口+工厂方法 文件上传题 1. 接口作业题
课外作业(2)接口+工厂方法 文件上传题 1. 接口作业题
|
编译器 C#
c# 自定义扩展方法
c# 自定义扩展方法
|
8月前
|
SQL Java 数据库连接
JAVAJDBC中常用的接口和类
JAVAJDBC中常用的接口和类
120 0
|
Java
教你如何封装自定义函数式接口
前言 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包,和传统数学上的意义有区别。【摘自百度百科】
199 0