亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

springbeans源碼解讀

2019-11-14 15:24:49
字體:
來源:轉載
供稿:網友

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.49028c.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.49028c.com/davidwang456/p/4187012.html

http://www.49028c.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天才基本的東西寫完,差點堅持不住呀,幾次想放棄,后續要繼續豐富內容,為了有寫繼續寫下去的動力,就直接發上去了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
少妇精69xxtheporn| 中文字幕日韩欧美精品在线观看| 粗暴蹂躏中文一区二区三区| 欧美性猛交xxxx免费看漫画| 欧美性猛交xxxx久久久| 久久精品国产欧美激情| 精品呦交小u女在线| 日韩电影中文字幕| 精品国产91久久久久久| www.99久久热国产日韩欧美.com| 久久人人爽人人爽人人片av高请| 久久精品久久久久电影| 日韩av色综合| 成人激情综合网| 中文字幕欧美精品日韩中文字幕| 555www成人网| 亚洲国产高清自拍| 国产精品777| 欧美国产日本高清在线| 日韩大片在线观看视频| 91免费人成网站在线观看18| 欧美日韩亚洲视频一区| 91福利视频网| 中文字幕久久久| 亚洲国产精品电影在线观看| 中文字幕亚洲字幕| 成人看片人aa| 亚洲美女视频网| 精品magnet| 午夜精品福利在线观看| 亚洲精品日产aⅴ| 亚洲第一二三四五区| 在线一区二区日韩| 国产欧美最新羞羞视频在线观看| 久久影视免费观看| 在线激情影院一区| 国产精品久久久久免费a∨| 国产在线观看不卡| 欧美一区二区三区艳史| 久久这里有精品视频| 欧美性猛交xxxx富婆| 视频直播国产精品| 韩国三级日本三级少妇99| 岛国av一区二区在线在线观看| 国语自产精品视频在线看| 久热精品视频在线| 综合久久五月天| 在线观看免费高清视频97| 国产美女被下药99| 日韩欧美国产成人| 亚洲激情视频网| 自拍偷拍亚洲区| 91久久精品在线| 91po在线观看91精品国产性色| 国产精品视频免费在线观看| 亚洲男人天堂久| 欧美另类在线播放| 亚洲美女www午夜| 亚洲国产婷婷香蕉久久久久久| 影音先锋欧美精品| 日韩av在线精品| 欧美性猛交xxxx免费看久久久| 国产精品视频区| 日韩成人在线视频网站| 欧美整片在线观看| 亚洲成人中文字幕| 日韩av理论片| 91久久精品国产91性色| 日韩成人激情在线| 久久中文字幕视频| 久久天天躁狠狠躁夜夜av| 欧美精品少妇videofree| 九色精品免费永久在线| 尤物yw午夜国产精品视频明星| 国产成人精品久久二区二区| 国产精品欧美风情| 久久精品国产视频| 国产精品高潮呻吟久久av黑人| 亚洲男人第一网站| 疯狂蹂躏欧美一区二区精品| 欧美xxxx综合视频| 国产精品久久久久久久久男| xxav国产精品美女主播| 欧美另类精品xxxx孕妇| 欧美激情一区二区三区在线视频观看| 国产精品一久久香蕉国产线看观看| 国产精品久久久久久影视| 国产美女精品视频| 久久精品青青大伊人av| 欧美日韩福利视频| 日韩免费在线免费观看| 国产一区二区三区久久精品| 欧美日本中文字幕| 日韩欧美精品中文字幕| 久久免费成人精品视频| 亚洲精品福利在线观看| 亚洲美女黄色片| 国产日韩欧美视频| 欧美电影免费看| 国产精品欧美日韩一区二区| 国产精品久久久久久久久免费| 亚洲欧美www| 久久久亚洲福利精品午夜| 91亚洲va在线va天堂va国| 日韩精品久久久久| 欧洲美女免费图片一区| 亚洲精品视频在线播放| 国产精品免费一区| 精品一区二区三区四区在线| 中文字幕精品久久久久| 日韩成人网免费视频| 精品女厕一区二区三区| 亚洲国产婷婷香蕉久久久久久| xxav国产精品美女主播| 久久综合国产精品台湾中文娱乐网| 91在线|亚洲| 久久精品国产成人| 欧美日韩成人在线播放| 中文字幕成人在线| 国产人妖伪娘一区91| 国产精品伦子伦免费视频| 亚洲二区中文字幕| 国产精品视频网站| 成人黄色大片在线免费观看| 美女扒开尿口让男人操亚洲视频网站| 亚洲综合一区二区不卡| 久久偷看各类女兵18女厕嘘嘘| 国产a∨精品一区二区三区不卡| 欧美在线视频导航| 5278欧美一区二区三区| 琪琪亚洲精品午夜在线| 欧美国产精品人人做人人爱| 久久精品在线播放| 国产精品成人av在线| 国产精品久久77777| 国产精品美女免费看| 国产女同一区二区| 国产在线久久久| 91国内免费在线视频| 国产精品久久久久久久7电影| 欧洲s码亚洲m码精品一区| 日韩精品在线观看网站| …久久精品99久久香蕉国产| 国产精品96久久久久久| 亚洲一区亚洲二区| 亚洲欧美国产另类| 精品少妇v888av| 91网站在线看| 欧美精品久久久久久久久久| 日韩高清电影免费观看完整版| 欧美中文在线字幕| 国产精品视频26uuu| 亚洲在线免费看| 欧美日韩另类视频| 97精品国产97久久久久久春色| 国产成人+综合亚洲+天堂| 5566成人精品视频免费| 精品日本高清在线播放| 久久久久99精品久久久久| 色777狠狠综合秋免鲁丝| 亚洲国产97在线精品一区| 中文字幕精品网| 久久人人爽人人| 欧美乱大交xxxxx另类电影|