1、.簡述java
ApplicationContextInitializer是Spring框架原有的概念, 這個類的主要目的就是在 ConfigurableApplicationContext類型(或者子類型)的ApplicationContext作refresh以前,容許咱們 對ConfigurableApplicationContext的實例作進一步的設置或者處理。
2、 ApplicationContextInitializer 接口源碼:就一個方法web
package org.springframework.context; /* 註釋部分第一段的大概意思刷新以前回調接口初始化spring,ConfigurableApplicationContext類型(或者子類型)的ApplicationContext作refresh以前,容許咱們對ConfigurableApplicationContext的實例作進一步的設置或者處理。 Callback interface for initializing a Spring {@link ConfigurableApplicationContext} prior to being {@linkplain ConfigurableApplicationContext#refresh() refreshed}.... */ public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> { /** * Initialize the given application context. * @param applicationContext the application to configure */ void initialize(C applicationContext); }
三.簡單的實現使用,自定義初始化器
3.1 用maven建好後建立的類以下
spring
pom文件:apache
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.fai</groupId> <artifactId>springboot04</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!--spring boot 環境:方法二:依賴管理加上導入import pom。代替繼承,注意 [scope,type]標籤--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.10.RELEASE</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <!--<artifactId>springboot-boot-starter-web</artifactId>--> <artifactId>spring-boot-starter</artifactId> <version>1.5.10.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> </project>
3.2.1 ApplicationContextInitializerImpl.javaspringboot
/** * ApplicationContextInitializer的實現類 * ApplicationContextInitializer接口是在spring容器刷新以前執行的一個回調函數。 */ @Order(111) // @Order的value值越小->越早執行。注:在類上標註,不是方法上 public class ApplicationContextInitializerImpl implements ApplicationContextInitializer { /** * applicationContext.getBeanDefinitionCount() * getBeanDefinitionCount()方法 是ListableBeanFactory 接口的方法, ConfigurableApplicationContext 經過繼承和實現 * 擁有了該方法 */ @Override public void initialize(ConfigurableApplicationContext applicationContext) { // 打印容器裏面有多少個bean System.out.println("bean count====="+applicationContext.getBeanDefinitionCount()); // 打印人全部 beanName System.out.println(applicationContext.getBeanDefinitionCount()+"個Bean的名字以下:"); String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); for (String beanName : beanDefinitionNames) { System.out.println(beanName); } }
}app
3.2.2 ApplicationContextInitializerImpl2.java框架
/** * ApplicationContextInitializer的實現類 * ApplicationContextInitializer接口是在spring容器刷新以前執行的一個回調函數。 */ @Order(1) // @Order的value值越小->越早執行,注:在類上標註,不是方法上 public class ApplicationContextInitializerImpl2 implements ApplicationContextInitializer { /** * applicationContext.getBeanDefinitionCount() * getBeanDefinitionCount()方法 是ListableBeanFactory 接口的方法,ConfigurableApplicationContext 經過繼承和實現 * 擁有了該方法 */ @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("applicationContext.getApplicationName(),默認爲空(看源碼):"+applicationContext.getApplicationName()); System.out.println("applicationContext.getDisplayName(),即context的name:"+applicationContext.getDisplayName()); }
}maven
3.2.3 MainApp.javaide
/** * ApplicationContextInitializer 理解 * 一、寫一個類實現該接口 * 二、註冊ApplicationContextInitializer * 2.1 方法一:springApplication.addInitializers(new ApplicationContextInitializerImpl()); * 2.2 方法二:配置文件添加 context.initializer.classes=com.fai.test.ApplicationContextInitializerImpl context.initializer.classes=com.fai.test.ApplicationContextInitializerImpl2 2.3 方法三:經過spring.factories文件配置(前面咱們註冊自定義監聽器也能夠用這個方法) # key : 全類名,value : 實現類 org.springframework.context.ApplicationContextInitializer=\ com.fai.test.ApplicationContextInitializerImpl,\ com.fai.test.ApplicationContextInitializerImpl2 */ @SpringBootApplication public class MainApp { public static void main(String[] args) { SpringApplication application = new SpringApplication(MainApp.class); // 2.1 方法一:添加自定義的 ApplicationContextInitializer 實現類的實例(註冊ApplicationContextInitializer) // 2.2 方法二:配置文件添加context.initializer.classes=com.fai.test.ApplicationContextInitializerImpl,context.initializer.classes=com.fai.test.ApplicationContextInitializerImpl2 application.addInitializers(new ApplicationContextInitializerImpl()); application.addInitializers(new ApplicationContextInitializerImpl2()); ConfigurableApplicationContext context = application.run(args); context.close(); }
}函數
3.2.4 附錄配置文件application.properties添加內容。用方法一就不須要該配置該內容,用法二要添加下面的內容context.initializer.classes=全類名,而且測試方法裏面不用代碼顯示註冊初始化器
#註冊ApplicationContextInitializer #context.initializer.classes=\ com.fai.test.ApplicationContextInitializerImpl,\ com.fai.test.ApplicationContextInitializerImpl2
4.測試結果:
5.小提示:IDEA 查看UML圖
5.1 Ctr + Alt + S 查看是UML Support否打上勾
5.2 在你想要查看的類上右鍵-->Diagrams,快捷鍵Ctrl + Shift+ Alt + U
5.3 導出圖片
導出的圖片效果
六、聲明:我這裏的測試是 常規下,不是web應用下哦!
參考了 http://blog.csdn.net/dm_vince...
http://www.jianshu.com/p/3828...