springMvc原始碼學習之:spring原始碼總結

Love Lenka發表於2016-11-04

轉載自:http://www.cnblogs.com/davidwang456/p/4213652.html

 

spring beans下面有如下原始檔包

org.springframework.beans, 包含了操作java bean的介面和類。
org.springframework.beans.annotation, 支援包,提供對java 5註解處理bean樣式的支援。
org.springframework.beans.factory, 實現spring輕量級IoC容器的核心包。
org.springframework.beans.factory.access, 定位和獲取bean工程的輔助工具類。
org.springframework.beans.factory.access.el,從統一樣式的EL 獲取spring beanFactory的支援類
org.springframework.beans.factory.annotation, 配置基於註解驅動的bean的支援包。
org.springframework.beans.factory.config, bean工廠的SPI介面和配置相關的處理類。
org.springframework.beans.factory.parsing, bean definition解析的支援基礎類
org.springframework.beans.factory.serviceloader, jdk1.6 ServiceLoader基礎類的支援包。
org.springframework.beans.factory.support,org.springframework.beans.factory包的支援類
org.springframework.beans.factory.wiring, 一種決定一個bean例項的後設資料的機制。
org.springframework.beans.factory.xml, 包含了一個基於xml的beanFactory實現,也包含一個標準的spring-beans的dtd
org.springframework.beans.propertyeditors, 屬性編輯器,用來將string型別的值轉換為object型別,例如:java.util.Properties
org.springframework.beans.support,org.springframework.beans的支援包,像:一組bean的排序和保持工具類等。

1.org.springframework.beans包含的類和介面有:

其中介面有:

1.1 BeanInfoFactory:建立java.beans.BeanInfo例項的策略。
1.2 BeanMetadataElement:傳送配置源物件的超級介面。定義了唯一的方法:Object getSource();其子類和子介面如下:

 

 

 

1.3 PropertyAccessor:獲取和設定屬性(例如物件bean的屬性,物件的Field)的通用介面,它用來作為BeanWrapper的基礎介面。主要方法有:

Class getPropertyType(String propertyName) 
TypeDescriptor getPropertyTypeDescriptor(String propertyName) 
Object getPropertyValue(String propertyName) 
boolean isReadableProperty(String propertyName) 
boolean isWritableProperty(String propertyName) 
void setPropertyValue(PropertyValue pv)

 繼承關係:

1.4 BeanWrapper: spring 底層JavaBean公共基礎的核心介面。
1.5 ConfigurablePropertyAccessor: PropertyAccessor配置方法的封裝介面。
1.6 Mergeable 代表一個物件的值組可以和父物件的值組合並的介面。其主要子類有:anagedList, MManagedArray, ManagedMap, ManagedProperties, ManagedSet。為了加深對這個介面的理解,我們以ManagedList為例,看一下它合併的實現方法:

    public List<E> merge(Object parent) {
        List<E> merged = new ManagedList<E>();
        merged.addAll((List<E>) parent);
        merged.addAll(this);
        return merged;
    }

1.7 PropertyEditorRegistrar: 用一個屬性編輯註冊器(PropertyEditorRegistry)註冊一個自定義的屬性編輯器(PropertyEditor)的策略介面。

1.8 PropertyEditorRegistry: 封裝了javabean屬性編輯器的註冊方法。
1.9 PropertyValues:包含了一個或者多個PropertyValue物件,通常用作特定的一個目的bean的屬性更新,主要方法是:PropertyValues changesSince(PropertyValues old);
1.10 TypeConverter:定義了型別轉換方法的介面。

 其中有:

1.11  AbstractPropertyAccessor: PropertyAccessor介面的抽象實現. 

1.12 BeanMetadataAttribute:bean definition定義中屬性鍵值對容器.
1.13 BeanMetadataAttributeAccessor:AttributeAccessorSupport 的擴充套件,為了追蹤物件定義源 holding attributes as BeanMetadataAttribute objects in order to keep track of the definition source.
1.14 BeanUtils: javabean的靜態工具方法:用來初始化bean、檢查bean的屬性,複製bean的屬性等等。
1.15 BeanWrapperImpl:BeanWrapper的預設實現,能夠適用於絕大多數應用場合。
1.16 CachedIntrospectionResults:.內部類,快取一個類的javabean的屬性描述資訊。使用情境:BeanWrapperImpl.java

    public PropertyDescriptor[] getPropertyDescriptors() {
        return getCachedIntrospectionResults().getPropertyDescriptors();
    }

1.17 DirectFieldAccessor PropertyAccessor的實現類,直接獲取例項的field。
1.18 ExtendedBeanInfoFactory BeanInfoFactory介面實現,評估bean的class是否有不滿足javaBean規範的set方法,因而是否滿足spring ExtendedBeanInfo作為內省的候選。
1.19 MutablePropertyValues Default implementation of the PropertyValues interface.

1.20 PropertyAccessorFactory:獲取PropertyAccessor例項的簡單工廠門面, 特別是獲取BeanWrapper例項。PropertyAccessorFactory.java

    public static BeanWrapper forBeanPropertyAccess(Object target) {
        return new BeanWrapperImpl(target);
    }

1.21 PropertyAccessorUtils:工具方法或者工具類,根據PropertyAccessor 獲取bean屬性。
1.22 PropertyEditorRegistrySupport:PropertyEditorRegistry介面的基本實現類。.
1.23 PropertyValue:一個物件,它儲存一個bean的單獨屬性的值資訊。
1.24 PropertyValuesEditor Editor for a PropertyValues object.
1.25 SimpleTypeConverter TypeConverter介面的簡單實現類,它不會針對一個特定的目標物件進行操作。
1.26 TypeConverterSupport TypeConverter介面的基本實現類,使用包私有的代理

異常處理類

BeanInstantiationException: bean初始化失敗時丟擲的異常。
BeansException:在beans包和子包中所丟擲的所有異常的抽象超類。
ConversionNotSupportedException:當一個bean的屬性沒有適合的編輯器或者轉換器時所丟擲的異常。
FatalBeanException:在bean包和子包中遇到的不可恢復問題丟擲的異常,例如:當引用一個無效的bean屬性時丟擲的InvalidPropertyException異常。
MethodInvocationException:當一個bean屬性的get和set方法丟擲異常時丟擲該異常,類似於InvocationTargetException。
NotReadablePropertyException:當試圖獲取一個不可讀屬性的屬性值時丟擲的異常,典型場景bean屬性沒有get方法。
NotWritablePropertyException:當試圖向一個不可寫屬性寫入屬性值時丟擲的異常,典型場景bean屬性沒有set方法。 .
NullValueInNestedPathException:當獲取一個內嵌屬性路徑的屬性時遇到空指標異常時丟擲的異常。
PropertyAccessException:獲取屬性相關的異常超類,例如型別不匹配或者目標呼叫異常。
PropertyBatchUpdateException組合異常,由多個的單個PropertyAccessException例項組成。
TypeMismatchException:當試圖設定bean屬性時丟擲的型別不匹配異常。

2. org.springframework.beans.annotation包含的類有:

AnnotationBeanUtils:javabean型別註解的通用工具方法。方法有:

public static void copyPropertiesToBean()

靜態方法,拷貝指定Annotation的屬性到給定的目標bean。

3. org.springframework.beans.propertyeditors屬性編輯器,用來將string型別的值轉換為object型別,例如:java.util.Properties。包含的類有:

ByteArrayPropertyEditor.java,CharacterEditor.java,CharArrayPropertyEditor.java,CharsetEditor.java,ClassArrayEditor.java,ClassEditor.java,CurrencyEditor.java,CustomBooleanEditor.java,CustomCollectionEditor.java,CustomDateEditor.java,CustomMapEditor.java,CustomNumberEditor.java,FileEditor.java,InputSourceEditor.java,InputStreamEditor.java,LocaleEditor.java,PatternEditor.java,PropertiesEditor.java,ResourceBundleEditor.java,StringArrayPropertyEditor.java,StringTrimmerEditor.java,TimeZoneEditor.java,URIEditor.java,URLEditor.java,UUIDEditor.java,ZoneIdEditor.java
它們的共同特點是實現了PropertyEditorSupport,實現了setAsText,getAsText

4. org.springframework.beans.support包含的類有:

ArgumentConvertingMethodInvoker:MethodInvoker的子類,通過TypeConverter將真實目標方法的指定引數進行轉換。
MutableSortDefinition:SortDefinition介面的可變實現。
PagedListHolder<E>:PagedListHolder是一個簡單的狀態保持,它處理一組物件,將它們分頁。
PropertyComparator:比較物件為兩個bean,通過BeanWrapper來比較指定bean的屬性。
ResourceEditorRegistrar:繼承了PropertyEditorRegistrar,使用資源編輯器來填充指定的PropertyEditorRegistry。

5.org.springframework.beans.factory包含類有:

其中介面有:

Aware:它是一個標籤,內部沒有任何屬性或者方法。它是一個超級介面,實現它的子介面的bean標誌著在spring容器中可以被特定框架的物件通知到,通過回撥方式的方法來完成這種通知。

繼承關係:

BeanClassLoaderAware 允許一個獲取它的classLoader(即當前bean factory載入bean類使用的class loader)的回撥類,實現了void setBeanClassLoader(ClassLoader classLoader);方法

void setBeanClassLoader(ClassLoader classLoader);

BeanFactory:獲取spring bean容器的根介面。

    (圖片來源:http://www.myexception.cn/software-architecture-design/925888.html)

BeanFactoryAware實現此介面的bean可以獲取到它們自己的Beanfactory。

void setBeanFactory(BeanFactory beanFactory) throws BeansException;

BeanNameAware實現此介面的bean可以在一個bean factory中獲取到它們的bean名稱。

void setBeanName(String name);

DisposableBean:實現此介面的bean希望在銷燬方法中釋放資源。

void destroy() throws Exception;

FactoryBean<T>:實現了此介面的bean不能看做一個通常意義上的bean,一個FactoryBean雖然以bean的形式來定義,但它暴露的物件(getObject())通常是它建立的物件。

T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();

HierarchicalBeanFactory:子介面,實現此介面的bean factory具有層次結構即可以獲取父BeanFactory。

BeanFactory getParentBeanFactory();
boolean containsLocalBean(String name);

InitializingBean:實現此介面的bean在BeanFactory設定為它們的屬性時只需要執行一次,例如:初始化定製或者僅僅檢查必須存在的屬性是否已經設定完成等等。

void afterPropertiesSet() throws Exception;

ListableBeanFactory:beanFactory介面的實現,實現此介面的beanFactory能遍歷他們內部的所有bean例項,而不用根據客戶請求通過名字一個一個的去搜尋bean。

String[] getBeanDefinitionNames();
String[] getBeanNamesForType(Class<?> type);

NamedBean:對應BeanNameAware介面,返回bean的名稱。

    /**
     * Return the name of this bean in a Spring bean factory.
     */
    String getBeanName();

ObjectFactory<T>:一個物件工廠,當觸發時會返回所有物件的例項(可以是共享的或者獨立的);

T getObject() throws BeansException;

SmartFactoryBean<T>:FactoryBean介面的擴充套件實現。

boolean isPrototype();
boolean isEagerInit();

 其中有:
BeanFactoryUtils:beanFactory上的操作方法工具類,特別是在ListableBeanFactory介面上。

異常處理類

BeanCreationException:beanfactory在試圖通過bean definition建立一個bean時遇到錯誤而丟擲的異常。
BeanCreationNotAllowedException:若當前不允許建立一個bean時(例如在beanFactory關閉過程中)而試圖去獲取bean的請求時丟擲的異常。
BeanCurrentlyInCreationException:一個bean的引用當前正在建立過程中丟擲的異常。
BeanDefinitionStoreException:beanFactory遇到一個無效的bean definition丟擲的異常.
BeanExpressionException:獲取一個表示式的值失敗時丟擲的異常。
BeanInitializationException:bean初始化異常時丟擲
BeanIsAbstractException:當試圖獲取一個定義為abstract的bean definition時丟擲的異常。
BeanIsNotAFactoryException:當一個bean不是工廠,但使用者試圖通過給定bean名稱訪問工廠。
BeanNotOfRequiredTypeException:當一個bean的型別和期望型別不匹配時丟擲的異常。
CannotLoadBeanClassException:BeanFactory不能載入指定bean的class類時丟擲的異常。
FactoryBeanNotInitializedException:工廠bean沒有初始化異常。
NoSuchBeanDefinitionException:沒有該bean definition異常
NoUniqueBeanDefinitionException:返回多個bean definition異常。
UnsatisfiedDependencyException:當有依賴檢查時,在bean factory定義中,bean的依賴或者屬性沒有指定時丟擲的異常

 

6.org.springframework.beans.factory.annotation

參見:http://www.cnblogs.com/davidwang456/p/4199459.html

其中介面有:

AnnotatedBeanDefinition:BeanDefinition介面的擴充套件,它暴露了它的bean 類的AnnotationMetadata,不需要載入類。

AnnotationMetadata getMetadata();

其中類有:
AnnotatedGenericBeanDefinition:GernericBeanDefinition介面的擴充套件,通過暴露AnnotatedBeanDefinition介面來增加對註解後設資料的支援。

    public AnnotatedGenericBeanDefinition(Class<?> beanClass) {
        setBeanClass(beanClass);
        this.metadata = new StandardAnnotationMetadata(beanClass, true);
    }


AnnotationBeanWiringInfoResolver繼承自BeanWiringInfoResolver,使用配置的註解來查詢哪些類需要自動繫結。實現瞭解析方法:

BeanWiringInfo resolveWiringInfo(Object beanInstance);

AutowiredAnnotationBeanPostProcessor:實現了BeanPostProcessor介面,它自動繫結註解的field,set方法和任意配置方法。 

BeanFactoryAnnotationUtils:關聯註解的bean的查詢的工具方法,例如spring的@Qualifier註解。

public static <T> T qualifiedBeanOfType()

CustomAutowireConfigurer:繼承了BeanFactoryPostProcessor,它使自定義的自動繫結qualifier型別的註冊更便利。.
InitDestroyAnnotationBeanPostProcessor繼承了BeanPostProcessor,實現了註解觸發init和destroy方法。

InjectionMetadata:管理注入後設資料的內部類。

QualifierAnnotationAutowireCandidateResolver:實現了 AutowireCandidateResolver,功能是將qualifier註解要自動繫結的field或者引數和bean definition qualifier相匹配。
RequiredAnnotationBeanPostProcessor:實現了BeanPostProcessor,對配置了Required註解的javaBean屬性進行強制檢查。

列舉類:

Autowire:決定自動繫結狀態的列舉,即一個bean的依賴是否由spring容器使用setter方式自動注入。這個是spring DI的核心概念。

註解類:

Autowired:public @interface Autowired:可以對成員變數、方法和建構函式進行標註,來完成自動裝配的工作。
Configurable:@Configurable 註解中的autowire屬性就可以讓Spring來自動裝配
Qualifier:@Qualifier(value = "限定識別符號") 。

Required:public @interface Required 依賴檢查;

Value:public @interface Value:用於注入SpEL表示式,可以放置在欄位方法或引數上。

 

7. org.springframework.beans.factory.config包含的類有:

http://www.cnblogs.com/davidwang456/p/4187012.html

http://www.cnblogs.com/davidwang456/p/4192318.html

其中介面有:

AutowireCapableBeanFactory:beanFactory的擴充套件介面,實現了自動繫結功能。這個介面的兩個主要方法是:

    Object autowire(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;

   void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck)throws BeansException;

autowire:使用給定的自動繫結策略,來給一個類的新例項進行初始化。
autowireBeanProperties:使用名稱或者型別來自動繫結給定bean例項的屬性。

BeanDefinition;一個bean例項的描述,它含有屬性值,構造引數值。它的實現子類還提供更多的資訊。

BeanExpressionResolver:通過計算一個表示式來解析為值的策略介面。

Object evaluate(String value, BeanExpressionContext evalContext) throws BeansException;

BeanFactoryPostProcessor:允許對一個applicationContext中的bean definition進行定製修改,修改context內含的bean factory中bean的屬性值。

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

BeanPostProcessor:允許對一個新的bean例項進行定製修改的工廠鉤子。

Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

BeanReference:暴露了bean名稱的引用介面。

String getBeanName();

ConfigurableBeanFactory:將會被大部分beanFactory實現的配置介面。

ConfigurableListableBeanFactory:將會被大部分ListablebeanFactory實現的配置介面。
DestructionAwareBeanPostProcessor:BeanPostProcessor的子介面,它增加了一個銷燬前回撥方法。

void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;

InstantiationAwareBeanPostProcessor:BeanPostProcessor的子介面,它增加了一個初始化前回撥方法,還有一個在初始化後但顯式設定屬性或者自動繫結發生前的回撥方法。

Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException;
boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException;

 PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)throws BeansException;

Scope:ConfigurableBeanFactory使用的策略介面,代表了bean例項所在的目標域。我們來從ConfigurableBeanFactory來看Scope的使用情況:

String SCOPE_SINGLETON = "singleton";
String SCOPE_PROTOTYPE = "prototype";
void registerScope(String scopeName, Scope scope);
String[] getRegisteredScopeNames();
Scope getRegisteredScope(String scopeName);

從上述程式碼中我們可以得知,預設有兩種策略,singleton 單例即只有一個bean例項;prototype 原型即多個bean例項。如果想增加scope,可以通過registerScope來註冊新的scope。

SingletonBeanRegistry:定義了共享bean例項的註冊介面。

void registerSingleton(String beanName, Object singletonObject);

注意:prototype 例項是通過PrototypeAspectInstanceFactory來產生,而它由LazySingletonAspectInstanceFactoryDecorator來進行包裝,保證僅返回一個aspect。

SmartInstantiationAwareBeanPostProcessor:InstantiationAwareBeanPostProcessor的擴充套件介面,它增加了對一個處理過bean的最終型別進行預測的回撥方法。

Class<?> predictBeanType(Class<?> beanClass, String beanName) throws BeansException;

 其中類有:

AbstractFactoryBean<T>:實現了FactoryBean的簡單模板超類,它根據標誌來決定是建立一個單例還是一個prototype物件。
BeanDefinitionHolder:使用名稱或者別名來儲存BeanDefinition。
BeanDefinitionVisitor:遍歷BeanDefinition物件的參觀者類,特別是也遍歷bean中的屬性值和構造引數值,解析bean的後設資料值。
BeanExpressionContext:計算一個BeanDefinition內部的表示式的容器物件。
BeanReferenceFactoryBean:過期。 它是一個通過不同名稱來暴露一個bean物件的工廠bean。從spring 3.2以後,開始使用別名(從spring 2.5開始支援解析佔位符)來替代它
CommonsLogFactoryBean:過期。它是org.apache.commons.logging.Log例項的工廠bean,用來在多個bean物件中共享log例項,而不是每一個類使用一個log例項。從spring 3.2後,使用org.apache.commons.logging.LogFactory來代替了。
ConstructorArgumentValues:儲存構造方法的引數值,特別是作為Beandefinition的一部分。
ConstructorArgumentValues.ValueHolder:儲存構造方法的一個引數值。
CustomEditorConfigurer:繼承自BeanFactoryPostProcessor,給自定義屬性編輯器的註冊提供了便利的方法。
CustomScopeConfigurer:BeanFactoryPostProcessor的簡單實現,給自定義Scope的註冊提供了便利的方法,上面提到ConfigurableBeanFactory提供了Scope的註冊。
DependencyDescriptor:將要注入的特定依賴的描述。
DeprecatedBeanWarner:繼承自BeanFactoryPostProcessor,記錄@Deprecated bean的報警資訊。
FieldRetrievingFactoryBean:檢索靜態或者非靜態Field的值的工廠bean。
InstantiationAwareBeanPostProcessorAdapter:實現了SmartInstantiationAwareBeanPostProcessor所有方法的介面卡,它沒有任何操作,不會改變容器對bean進行初始化的處理過程。
ListFactoryBean:共享一組(list)例項的簡單工廠bean。
MapFactoryBean:共享一組(map)例項的簡單工廠bean。
MethodInvokingFactoryBean:一個有返回值的工廠bean,它返回觸發一個靜態或者例項的方法的結果。
ObjectFactoryCreatingFactoryBean:一個有返回值的工廠bean,它返回ObjectFactory。
PlaceholderConfigurerSupport:屬性資源配置器的抽象基類,它解析BeanDefinition中屬性值的佔位符。
PreferencesPlaceholderConfigurer:PropertyPlaceholderConfigurer的子類,支援JDK1.4中的Preferences API (java.util.prefs)
PropertiesFactoryBean:它支援從classpath位置的檔案中讀取屬性例項的工廠bean。
PropertyOverrideConfigurer:屬性資源配置器,它支援在applicationContext中重寫一個bean的屬性值。
PropertyPathFactoryBean:通過給定目標物件計算屬性路徑的工廠bean。
PropertyPlaceholderConfigurer:PlaceholderConfigurerSupport的子類,它解析本地屬性或者系統屬性或者環境變數定義的佔位符(以${}描述)。
PropertyResourceConfigurer:支援從一個屬性資源中對單個bean的屬性值進行配置。
ProviderCreatingFactoryBean:返回一個JSR-330 Provider的工廠bean,JSR-330 Provider反過來從beanFactory返回一個bean資源。
RuntimeBeanNameReference:固定佔位符類,當在beanfactory中作為另外一個bean名稱的引用時,作為屬性值物件,將在執行時進行解析。
RuntimeBeanReference:固定佔位符類,當在beanfactory中作為另外一個bean的引用時,作為屬性值物件,將在執行時進行解析。
ServiceLocatorFactoryBean:繼承自FactoryBean,在beanFactory中建立一個動態代理,來代理一個具有一個或者多個服務或者型別的介面。
SetFactoryBean;共享set例項的簡單工廠bean
TypedStringValue:儲存一個型別的屬性值。

上述類資訊,可以參考FactoryBean的實現介面或者類。

8. org.springframework.beans.factory.parsing 解析beanDefinition所需的基本類和介面。

包含的介面有:

ComponentDefinition:描述在同一配置的Context中一組BeanDefinition和BeanReference的邏輯檢視的介面。
DefaultsDefinition:一個預設definition標識介面,繼承了BeanMetadataElement,沒有實現任何方法。
ParseState.Entry:ParseState的入口標識介面
ProblemReporter:spi介面,支援tool或者外部程式處理在beanDefinition解析期間報出的錯誤或者異常。.
ReaderEventListener:接受在讀取BeanDefinition程式中註冊元件、別名、import時的回撥介面。
SourceExtractor:簡單策略介面,允許工具控制source後設資料關聯到bean definition後設資料。

包含的類有:

AbstractComponentDefinition:ComponentDefinition介面的基本實現,提供了AbstractComponentDefinition.getDescription()來代理ComponentDefinition.getName()方法。
AliasDefinition:代表在解析程式中一個別名已經被註冊。
BeanComponentDefinition:基於一個標準BeanDefinition的ComponentDefinition,暴露指定bean的指定beanDefinition,內部BeanDefinition和BeanReference。
BeanEntry:代表了一個BeanDefinition。
CompositeComponentDefinition:儲存了一個或者多個內嵌ComponentDefinition例項的ComponentDefinition實現,它把這些ComponentDefinition例項聚合成具有命名的組。
ConstructorArgumentEntry:代表了構造引數。
EmptyReaderEventListener:ReaderEventListener介面的空實現,所有回撥方法都沒有提供可執行操作。
FailFastProblemReporter:ProblemReporter介面的簡單實現,當遇到錯誤發生時展示fail-fast行為。
ImportDefinition:在解析程式中,代表一個import已經被處理。
Location:模型介面,一個資源位置的模型。
NullSourceExtractor:SourceExtractor介面的簡單實現,返回null作為source後設資料。
ParseState:在解析程式中作為一個簡單的基於棧結構的追蹤邏輯位置類。
PassThroughSourceExtractor:SourceExtractor的簡單實現,它通過一個attachment來傳遞備選的源資料型別物件。
Problem:代表了一個beanDefinition配置問題。
PropertyEntry:代表了一個javaBean的屬性。
QualifierEntry:代表了一個自動繫結的備選qualifier。
ReaderContext:bean definition讀取程式中傳遞的一個Context,封裝了所有相關的配置,包括狀態。

BeanDefinitionValidationException:一個bean definition驗證失敗時丟擲異常的異常類。

9. org.springframework.beans.factory.serviceloader包含的類有:

AbstractServiceLoaderBasedFactoryBean:FactoryBean的抽象基類,它是操作JDK1.6 ServiceLoader的基礎工具。
ServiceFactoryBean:暴露指定配置的服務類的基礎服務的FactoryBean,通過JDK1.6 serviceLoader基礎類來獲取這些服務。
ServiceListFactoryBean:暴露配置的服務類的所有基礎服務的FactoryBea,表現為一組服務物件,可以通過JDK1.6 serviceLoader基礎類來獲取這些服務。
ServiceLoaderFactoryBean:暴露指定配置服務類的JDK1.6 serviceLoader的FactoryBean。

10.org.springframework.beans.factory.support:

其中介面有:
AutowireCandidateResolver:策略介面,對特定的依賴,這個介面決定一個特定的bean definition是否滿足作為自動繫結的備選項。
BeanDefinitionReader:bean definition解析器的簡單介面。
BeanDefinitionRegistry:持有beanDefinition的註冊介面,例如RootBeanDefinition和ChildBeanDefinition例項。
BeanDefinitionRegistryPostProcessor:標準BeanFactoryPostProcessor SPI的擴充套件介面,允許在常規BeanFactoryPostProcessor檢查之前註冊更多bean definition。
BeanNameGenerator:對beanDefinition產生bean名稱的策略介面。
InstantiationStrategy:負責根據相應的根bean definition建立例項的介面。
MergedBeanDefinitionPostProcessor:後處理回撥介面,在執行時合併bean definition。
MethodReplacer:一個可以重新定義Ioc容器物件的所有方法的介面:方法注入是依賴注入的一種形式。
SecurityContextProvider:執行在beanFactory中的安全Context的提供者。

其中類有:
AbstractAutowireCapableBeanFactory:抽象beanFactory的超類,它使用指定的RootBeanDefinition類的所有方法實現建立預設bean。
AbstractBeanDefinition:具體、成熟BeanDefinition類的基類,構造出RootBeanDefinition和ChildBeanDefinition的通用屬性。
AbstractBeanDefinitionReader:實現了BeanDefinitionReader介面,是beanDefinitionReader的抽象基類。
AbstractBeanFactory:BeanFactory的抽象基類實現,提供ConfigurableBeanFactory SPI的全部功能。
AutowireCandidateQualifier解析自動繫結備選項Qualifier。
BeanDefinitionBuilder:使用建造者模式構建BeanDefinition的程式設計方法。
BeanDefinitionDefaults:簡單保持BeanDefinition的預設屬性類。
BeanDefinitionReaderUtils:BeanDefinitionReader實現使用的工具方法類。
CglibSubclassingInstantiationStrategy:BeanFactory預設物件初始化策略。
ChildBeanDefinition:從父類繼承各種設定的bean的beanDefinition。
DefaultBeanNameGenerator:BeanNameGenerator介面的預設實現,代理BeanDefinitionReaderUtils.generateBeanName(BeanDefinition, BeanDefinitionRegistry)方法。
DefaultListableBeanFactory:ListableBeanFactory介面和BeanDefinitionRegistry介面的預設實現:基於beanDefinition物件的一個成熟的beanFactory。
DefaultSingletonBeanRegistry:共享bean例項的通用註冊,實現了SingletonBeanRegistry。
FactoryBeanRegistrySupport:一個支援單例註冊(需要處理FactoryBean例項)的基類,集合了DefaultSingletonBeanRegistry對單例的管理功能。
GenericBeanDefinition:通用BeanDefinition是一站式的標準bean Definition。
LookupOverride:表示可以重寫一個在同一個Ioc上下文中查詢物件的方法。
ManagedArray:集合類,用來儲存它所管理的array元素,它可以包含執行時期的bean引用(將被解析為bean物件)
ManagedList<E> 集合類,用來儲存它所管理的List元素,它可以包含執行時期的bean引用(將被解析為bean物件).
ManagedMap<K,V> 集合類,用來儲存它所管理的array值,它可以包含執行時期的bean引用(將被解析為bean物件)
ManagedProperties:表示一個spring管理的屬性例項,它支援父/子 definition的合併。
ManagedSet<E> 集合類,用來儲存它所管理的set值,它可以包含執行時期的bean引用(將被解析為bean物件)
MethodOverride:表示重寫物件,它針對Ioc容器所管理物件的方法的重寫。
MethodOverrides:一組方法重寫,決定了在執行時期對spring ioc容器管理物件的重寫方法(如果存在的話)。
PropertiesBeanDefinitionReader:簡單屬性格式的BeanDefinitionReader。
ReplaceOverride:MethodOverride的擴充套件,表示一個Ioc容器方法的任意重寫。
RootBeanDefinition:根BeanDefinition,表示在執行時期的spring BeanFactory中一個合併的BeanDefinition。
SimpleAutowireCandidateResolver:繼承自AutowireCandidateResolver,當出現不支援的註解時使用。
SimpleBeanDefinitionRegistry:BeanDefinitionRegistry介面的簡單實現。
SimpleInstantiationStrategy:BeanFactory中簡單物件的初始化策略。
SimpleSecurityContextProvider:SecurityContextProvider的簡單擴充套件。
StaticListableBeanFactory:靜態BeanFactory的實現,用來程式設計實現註冊已經存在的單例例項。

11.org.springframework.beans.factory.wiring包含的類有;

BeanWiringInfoResolver:策略介面,能夠根據給定的一個新初始化的bean物件解析bean的名稱資訊。
BeanConfigurerSupport:配置bean的便利基類,它可以對物件進行依賴注入。
BeanWiringInfo:儲存特定類的bean的繫結後設資料資訊。
ClassNameBeanWiringInfoResolver:BeanWiringInfoResolver的簡單預設實現,查詢一個和全限定名同名的bean的名稱。

12.org.springframework.beans.factory.xml

其中,介面有:
BeanDefinitionDecorator:DefaultBeanDefinitionDocumentReader用來處理自定義的,內嵌的<bean>標籤的介面
BeanDefinitionDocumentReader:解析包含spring BeanDefinition的xml檔案的SPI.
BeanDefinitionParser:DefaultBeanDefinitionDocumentReader用來處理自定義的,高層的<beans>標籤的介面
DocumentLoader:載入xml檔案的策略介面。
NamespaceHandler:DefaultBeanDefinitionDocumentReader用來處理在spring xml配置檔案中的自定義名稱空間的基礎介面。
NamespaceHandlerResolver:DefaultBeanDefinitionDocumentReader用來定位NamespaceHandler的介面,NamespaceHandler實現了特定的URI名稱空間。

其中,類有:
AbstractBeanDefinitionParser:BeanDefinitionParser的抽象實現,提供了許多便利方法和模板方法,模板方法需要在子類進行重寫來提供具體的邏輯實現。
AbstractSimpleBeanDefinitionParser:AbstractBeanDefinitionParser的簡單實現,當將要解析元素的屬性名和配置類的屬性名一一對應的時候,可以用到該類。
AbstractSingleBeanDefinitionParser:BeanDefinitionParser的基類,需要解析和定義單獨的BeanDefinition
BeanDefinitionParserDelegate:狀態代理類,用來解析xml BeanDefinition。
BeansDtdResolver:spring bean dtd解析器EntityResolver的實現,用來從classpath或者jar檔案載入dtd。
DefaultBeanDefinitionDocumentReader:BeanDefinitionDocumentReader介面的預設實現。
DefaultDocumentLoader:spring 的DocumentLoader預設實現。
DefaultNamespaceHandlerResolver:NamespaceHandlerResolver介面的預設實現。
DelegatingEntityResolver:EntityResolver的實現,分別代理了dtd的BeansDtdResolver和xml schemas的 PluggableSchemaResolver。
DocumentDefaultsDefinition:簡單的javaBean,它儲存標準的spring xml檔案中<bean>級別的屬性,如:default-lazy-init, default-autowire等等
NamespaceHandlerSupport:支援實現自定義的NamespaceHandler。
ParserContext:傳遞一個beanDefinition 解析程式到此上下文,封裝了所有的相關配置也包括狀態。
PluggableSchemaResolver:繼承自EntityResolver,使用一系列map檔案將schema url解析到本地classpath資源。
ResourceEntityResolver:繼承自EntityResolver,通過ResourceLoader來解析實體的引用。
SimpleConstructorNamespaceHandler:單NamespaceHandler實現,它將自定義屬性直接對映到bean屬性。
SimplePropertyNamespaceHandler:簡單NamespaceHandler實現,它將自定義屬性直接對映到bean屬性。
UtilNamespaceHandler:工具名稱空間的NamespaceHandler
XmlBeanDefinitionReader
Bean definition reader for XML bean definitions.
XmlBeanFactory 過期。從spring 3.2 後推薦使用DefaultListableBeanFactory和XmlBeanDefinitionReader來代替它。
XmlReaderContext:ReaderContext的擴充套件,一般和XmlBeanDefinitionReader一起使用。

13. org.springframework.beans.factory.access包含的類有:

BeanFactoryLocator:定義一個BeanFactory及其子類(如ApplicationContext)的查詢、使用、釋放的協議。
BeanFactoryReference:用來追蹤一個通過BeanFactoryLocator獲得的BeanFactory的引用。
SingletonBeanFactoryLocator:BeanFactoryLocator的keyed-singleton實現,它可以訪問共享的spring beanFactory例項。

14. org.springframework.beans.factory.access.el

SimpleSpringBeanELResolver:SpringBeanELResolver的簡單實現,代理一個使用解析器構造的BeanFactory。
SpringBeanELResolver:通用EL的ELResolver,代理一個spring BeanFactory,將名稱引用解析為spring定義的bean。

 

小結:

spring beans 是Ioc容器實現的最初形態,深入理解spring beans模組有助於加深對IoC容器的認識,而基於web應用的IoC容器Application又是構建與BeanFactory之上的,這樣的話,我怎麼強調它的重要性都不為過吧。

spring beans最重要的兩個東西要搞定即BeanFactory的繼承關係和FactoryBean的繼續關係,在閱讀原始碼中,你會發現應用了很多設計模式,如工廠模式,建造者模式,介面卡模式,模板方法模式,單例模式、代理模式等等,我就不一一列舉了,自己去探索吧。

注:這篇部落格我寫了8天才基本的東西寫完,差點堅持不住呀,幾次想放棄,後續要繼續豐富內容,為了有寫繼續寫下去的動力,就直接發上去了。

相關文章