在spring容器的環境體系中,存在兩大實體組件,分別是環境(StandardEnvironment)和屬性解決器(PropertySourcesPropertyResolver)。
java
體系圖以下:spring
從圖中能夠看出,spring框架把兩個組件的對外提供的功能性接口和自身的配置性接口進行了拆分,組件的配置API都幾種在ConfigurableXXX接口中。框架
兩個組件都只有惟一的標準實現類,即StandardEnvironment和PropertySourcesPropertyResolver。this
兩個組件之間的關係能夠這樣理解:spa
環境對象經過持有屬性解決器對象的引用,從而實現組件複用。同時,環境對象所定義的接口繼承自屬性解決器接口,所以,環境對象也具備屬性解決器的全部功能,並且在屬性解決器的功能基礎之上,又擴展出了環境的功能。細心的讀者可能已經看出,這其實是使用了裝飾器模式,StandardEnvironment經過對PropertySourcesPropertyResolver的裝飾,進行看功能加強。.net
咱們能夠將整個體系進行以下拆分,而後分別講解:code
PropertyResolver屬性解決器component
整個環境模型定義好了,那麼spring框架是如何使用這個模型的呢?blog
經過繼承或實現EnvironmentCapable接口,能夠使得組件具備環境。接口定義以下:
public interface EnvironmentCapable { /** * Return the {@link Environment} associated with this component. */ Environment getEnvironment(); }
接口定義的惟一方法,就是獲取與當前組件相關聯的Environment環境對象。
ApplicationContext接口繼承自這個接口,也就是說全部應用上下文都是具備環境的。