摘要:注在類上標注,不是方法上方法是接口的方法,通過繼承和實現擁有了該方法打印容器里面有多少個打印人所有個的名字如下的實現類接口是在容器刷新之前執行的一個回調函數。
一、.簡述
ApplicationContextInitializer是Spring框架原有的概念, 這個類的主要目的就是在 ConfigurableApplicationContext類型(或者子類型)的ApplicationContext做refresh之前,允許我們 對ConfigurableApplicationContext的實例做進一步的設置或者處理。
二、 ApplicationContextInitializer 接口源碼:就一個方法
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{ /** * Initialize the given application context. * @param applicationContext the application to configure */ void initialize(C applicationContext); }
三.簡單的實現使用,自定義初始化器
3.1 用maven建好后創建的類如下
pom文件:
4.0.0 com.fai springboot04 1.0-SNAPSHOT jar UTF-8 1.8 1.8 org.springframework.boot spring-boot-dependencies 1.5.10.RELEASE import pom org.springframework.boot spring-boot-starter 1.5.10.RELEASE org.springframework.boot spring-boot-configuration-processor true
3.2.1 ApplicationContextInitializerImpl.java
/** * 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); } }
}
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()); }
}
3.2.3 MainApp.java
/** * ApplicationContextInitializer 理解 * 1、寫一個類實現該接口 * 2、注冊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 導出圖片
導出的圖片效果
6、聲明:我這里的測試是 常規下,不是web應用下哦!
參考了 http://blog.csdn.net/dm_vince...
http://www.jianshu.com/p/3828...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71040.html
摘要:簡介是框架提供的接口該接口的主要功能就是在接口刷新之前,允許用戶對實例做一定的操作。該接口只有一個方法。實現該接口實現該接口,并在方法中打印容器中初始化了多少個對象。啟動程序啟動程序,打印日志容器中初始化數量原文鏈接 簡介 ApplicationContextInitializer是Spring框架提供的接口, 該接口的主要功能就是在接口ConfigurableApplicationC...
摘要:簡介是框架提供的接口該接口的主要功能就是在接口刷新之前,允許用戶對實例做一定的操作。該接口只有一個方法。實現該接口實現該接口,并在方法中打印容器中初始化了多少個對象。啟動程序啟動程序,打印日志容器中初始化數量原文鏈接 簡介 ApplicationContextInitializer是Spring框架提供的接口, 該接口的主要功能就是在接口ConfigurableApplicationC...
摘要:設置應用上線文初始化器的作用是什么源碼如下。來看下方法源碼,其實就是初始化一個應用上下文初始化器實例的集合。設置監聽器和設置初始化器調用的方法是一樣的,只是傳入的類型不一樣,設置監聽器的接口類型為,對應的文件配置內容請見下方。 Spring Boot 的應用教程我們已經分享過很多了,今天來通過源碼來分析下它的啟動過程,探究下 Spring Boot 為什么這么簡便的奧秘。 本篇基于 S...
摘要:創建及準備創建。目前已知關心這個事件的有要注意的是在這個階段,里只有,是的加載工作的起點。原因是注入這些回調接口本身沒有什么意義。在其構造函數內部間接的給注冊了幾個與相關注解的處理器。 相關代碼在: https://github.com/chanjarster/spring-boot-all-callbacks 注:本文基于spring-boot 1.4.1.RELEASE, spri...
摘要:額外知識點參考知識點加載策略資源后,容器啟動時會調用的方法。從獲取對象對象,如果存在則拋異常。這個是重點核心的知識點,參考知識點。看到這里應該知道每一層的作用吧,一層一層往上遞進第四步正在研讀 1.根據我們常用的web.xml里,我們找到的org.springframework.web.context.ContextLoaderListener。web.xml如下 moo...
閱讀 3477·2021-09-06 15:13
閱讀 1527·2021-09-02 10:19
閱讀 2473·2019-08-30 15:52
閱讀 918·2019-08-29 15:25
閱讀 1565·2019-08-26 18:36
閱讀 495·2019-08-26 13:23
閱讀 1331·2019-08-26 10:46
閱讀 3498·2019-08-26 10:41