ConfigurableApplicationContext


此接口結合了所有ApplicationContext需要實現的接口。因此大多數的ApplicationContext都要實現此接口。它在ApplicationContext的基礎上增加了一系列配置應用上下文的功能。配置應用上下文和控制應用上下文生命周期的方法在此接口中被封裝起來,以免客戶端程序直接使用。

 
         

public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {

 
         

/**
* 應用上下文配置時,這些符號用於分割多個配置路徑
*/
String CONFIG_LOCATION_DELIMITERS = ",; \t\n";

 
         

/**
* BeanFactory中,ConversionService類所對應的bean的名字。如果沒有此類的實例的話
* 則使用默認的轉換規則
*/
String CONVERSION_SERVICE_BEAN_NAME = "conversionService";

 
         

/**
* LoadTimeWaver類所對應的Bean在容器中的名字。如果提供了該實例,上下文會使用臨時的ClassLoader
* 這樣,LoadTimeWaver就可以使用bean確切的類型了
*/
String LOAD_TIME_WEAVER_BEAN_NAME = "loadTimeWeaver";

 
         

/**
* Environment類在容器中實例的名字
*/
String ENVIRONMENT_BEAN_NAME = "environment";

 
         

/**
* System系統變量在容器中對應的Bean的名字
*/
String SYSTEM_PROPERTIES_BEAN_NAME = "systemProperties";

 
         

/**
* System 環境變量在容器中對應的Bean的名字
*/
String SYSTEM_ENVIRONMENT_BEAN_NAME = "systemEnvironment";

 
         


/**
* 設置容器的唯一ID
*/
void setId(String id);

 
         

/**
* 設置此容器的父容器
* 需要注意的是,父容器一經設定就不應該修改,並且一般不會在構造方法中對其進行配置
* 其父容器還不可用。
*/
void setParent(ApplicationContext parent);

 
         

/**
* 設置容器的Environment變量
*/
void setEnvironment(ConfigurableEnvironment environment);

 
         

/**
* 以可配置的形式返回此容器的環境變量,用戶可以更好的進行配置
*/
@Override
ConfigurableEnvironment getEnvironment();

 
         

/**
* 此方法一般在讀取應用上下文配置的時候調用,用以向此容器中增加BeanFactoryPostProcessor。
* 增加的Processor會在容器refresh的時候使用。
*/
void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor);

 
         

/**
* 向容器增加一個ApplicationListener,增加的Listener用於發布上下文事件如refresh和shutdown等
* 需要注意的是,如果此上下文還沒有啟動,那么在此注冊的Listener將會在上下文refresh的時候,全部被調用
* 如果上下文已經是active狀態的了,就會在multicaster中使用
*/
void addApplicationListener(ApplicationListener<?> listener);

 
         

/**
* 向容器中注入給定的Protocol resolver,允許多個實例同時存在。
* 在此注冊的每一個resolver都將會在上下的標准解析規則之前使用。因此,某種程度上來說
* 這里注冊的resolver可以覆蓋上下文的resolver
*/
void addProtocolResolver(ProtocolResolver resolver);

 
         

/**
* 加載資源配置文件(XML、properties,Whatever)。
* 由於此方法是一個初始化方法,因此如果調用此方法失敗的情況下,要將其已經創建的Bean銷毀。
* 換句話說,調用此方法以后,要么所有的Bean都實例化好了,要么就一個都沒有實例化
*/
void refresh() throws BeansException, IllegalStateException;

 
         

/**
* 向JVM注冊一個回調函數,用以在JVM關閉時,銷毀此應用上下文。
*/
void registerShutdownHook();

 
         

/**
* 關閉此應用上下文,釋放其所占有的所有資源和鎖。並銷毀其所有創建好的singleton Beans
* 實現的時候,此方法不應該調用其父上下文的close方法,因為其父上下文具有自己獨立的生命周期
* 多次調用此方法,除了第一次,后面的調用應該被忽略。
*/
@Override
void close();

 
         

/**
* 檢測此FactoryBean是否被啟動過。
*/
boolean isActive();

 
         

/**
* 返回此應用上下文的容器。
* 千萬不要使用此方法來對BeanFactory生成的Bean做后置處理,因為單例Bean在此之前已經生成。
* 這種情況下應該使用BeanFactoryPostProcessor來在Bean生成之前對其進行處理。
* 通常情況下,內容容器只有在上下文是激活的情況下才能使用。因此,在使用此方法前,可以調用
* isActive來判斷容器是如可用
*/
ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;

 
         

}

 

 

ConfigurableEnvironment :提供設置活動和默認配置文件以及操作底層屬性源的工具。

BeanFactoryPostProcessor :允許自定義修改應用程序上下文的bean定義,調整上下文的底層bean工廠的bean屬性值。應用程序上下文可以在它們的bean定義中自動檢測BeanFactoryPostProcessor bean,並在創建任何其他bean之前應用它們。BeanFactoryPostProcessor可以與bean定義交互和修改,但從不實例化bean。因為這樣做可能導致過早BEAN實例化,違反容器,並造成意想不到的副作用。如果需要與bean實例交互,建議實現BeanPostProcessor

ProtocolResolver:協議專用資源句柄的解析策略。用作{@link DefaultResourceLoader}的SPI,允許在不對加載器實現(或應用程序上下文實現)進行子類的情況下處理自定義協議

ConfigurableListableBeanFactory :配置接口由最大多數的bean工廠來實現。基於{@link ConfigurableBeanFactory},它還提供了分析和修改bean定義以及預實例化單例的工具。

ApplicationListener :父類EventListener,用於被應用的事件監聽器實現,基於{@code java.util.EventListener} 接口的觀察者模式的實現,從Spring3.0開始ApplicationListener可以聲明它感興趣的事件類型,當在Spring ApplicationContext中注冊時,將相應地過濾事件,只調用偵聽器來匹配事件對象。

ConfigurableApplicationContext:父類 Lifecycle, Closeable,ApplicationContext

SPI接口由大多數甚至不是所有的應用程序上下文來實現。除了{@link org.springframework.context.ApplicationContext}接口中的應用程序上下文客戶端方法之外,還提供配置應用程序上下文的工具。配置和生命周期方法被封裝在這里,以避免使它們對ApplicationContext client暴露,本方法僅適用於啟動和關閉代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM