日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring beans源码解读之--总结篇

發(fā)布時間:2025/4/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring beans源码解读之--总结篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

spring beans下面有如下源文件包

org.springframework.beans, 包含了操作java bean的接口和類。
org.springframework.beans.annotation, 支持包,提供對java 5注解處理bean樣式的支持。
org.springframework.beans.factory, 實現(xiàn)spring輕量級IoC容器的核心包。
org.springframework.beans.factory.access, 定位和獲取bean工程的輔助工具類。
org.springframework.beans.factory.access.el,從統(tǒng)一樣式的EL 獲取spring beanFactory的支持類
org.springframework.beans.factory.annotation, 配置基于注解驅(qū)動的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實例的元數(shù)據(jù)的機制。
org.springframework.beans.factory.xml, 包含了一個基于xml的beanFactory實現(xiàn),也包含一個標準的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:創(chuàng)建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為例,看一下它合并的實現(xiàn)方法:

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接口的抽象實現(xiàn).?

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的靜態(tài)工具方法:用來初始化bean、檢查bean的屬性,復制bean的屬性等等。
1.15?BeanWrapperImpl:BeanWrapper的默認實現(xiàn),能夠適用于絕大多數(shù)應用場合。
1.16?CachedIntrospectionResults:.內(nèi)部類,緩存一個類的javabean的屬性描述信息。使用情境:BeanWrapperImpl.java

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

1.17 DirectFieldAccessor PropertyAccessor的實現(xiàn)類,直接獲取實例的field。
1.18 ExtendedBeanInfoFactory BeanInfoFactory接口實現(xiàn),評估bean的class是否有不滿足javaBean規(guī)范的set方法,因而是否滿足spring ExtendedBeanInfo作為內(nèi)省的候選。
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:工具方法或者工具類,根據(jù)PropertyAccessor 獲取bean屬性。
1.22?PropertyEditorRegistrySupport:PropertyEditorRegistry接口的基本實現(xiàn)類。.
1.23?PropertyValue:一個對象,它保存一個bean的單獨屬性的值信息。
1.24?PropertyValuesEditor Editor for a PropertyValues object.
1.25?SimpleTypeConverter TypeConverter接口的簡單實現(xiàn)類,它不會針對一個特定的目標對象進行操作。
1.26?TypeConverterSupport TypeConverter接口的基本實現(xiàn)類,使用包私有的代理

異常處理類

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

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

AnnotationBeanUtils:javabean類型注解的通用工具方法。方法有:

public static void copyPropertiesToBean()

靜態(tài)方法,拷貝指定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
它們的共同特點是實現(xiàn)了PropertyEditorSupport,實現(xiàn)了setAsText,getAsText

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

ArgumentConvertingMethodInvoker:MethodInvoker的子類,通過TypeConverter將真實目標方法的指定參數(shù)進行轉換。
MutableSortDefinition:SortDefinition接口的可變實現(xiàn)。
PagedListHolder<E>:PagedListHolder是一個簡單的狀態(tài)保持,它處理一組對象,將它們分頁。
PropertyComparator:比較對象為兩個bean,通過BeanWrapper來比較指定bean的屬性。
ResourceEditorRegistrar:繼承了PropertyEditorRegistrar,使用資源編輯器來填充指定的PropertyEditorRegistry。

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

其中接口有:

Aware:它是一個標簽,內(nèi)部沒有任何屬性或者方法。它是一個超級接口,實現(xiàn)它的子接口的bean標志著在spring容器中可以被特定框架的對象通知到,通過回調(diào)方式的方法來完成這種通知。

繼承關系:

BeanClassLoaderAware 允許一個獲取它的classLoader(即當前bean factory加載bean類使用的class loader)的回調(diào)類,實現(xiàn)了void setBeanClassLoader(ClassLoader classLoader);方法

void setBeanClassLoader(ClassLoader classLoader);

BeanFactory:獲取spring bean容器的根接口。

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

BeanFactoryAware實現(xiàn)此接口的bean可以獲取到它們自己的Beanfactory。

void setBeanFactory(BeanFactory beanFactory) throws BeansException;

BeanNameAware實現(xiàn)此接口的bean可以在一個bean factory中獲取到它們的bean名稱。

void setBeanName(String name);

DisposableBean:實現(xiàn)此接口的bean希望在銷毀方法中釋放資源。

void destroy() throws Exception;

FactoryBean<T>:實現(xiàn)了此接口的bean不能看做一個通常意義上的bean,一個FactoryBean雖然以bean的形式來定義,但它暴露的對象(getObject())通常是它創(chuàng)建的對象。

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

HierarchicalBeanFactory:子接口,實現(xiàn)此接口的bean factory具有層次結構即可以獲取父BeanFactory。

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

InitializingBean:實現(xiàn)此接口的bean在BeanFactory設置為它們的屬性時只需要執(zhí)行一次,例如:初始化定制或者僅僅檢查必須存在的屬性是否已經(jīng)設置完成等等。

void afterPropertiesSet() throws Exception;

ListableBeanFactory:beanFactory接口的實現(xiàn),實現(xiàn)此接口的beanFactory能遍歷他們內(nèi)部的所有bean實例,而不用根據(jù)客戶請求通過名字一個一個的去搜索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>:一個對象工廠,當觸發(fā)時會返回所有對象的實例(可以是共享的或者獨立的);

T getObject() throws BeansException;

SmartFactoryBean<T>:FactoryBean接口的擴展實現(xiàn)。

boolean isPrototype(); boolean isEagerInit();

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

異常處理類

BeanCreationException:beanfactory在試圖通過bean definition創(chuàng)建一個bean時遇到錯誤而拋出的異常。
BeanCreationNotAllowedException:若當前不允許創(chuàng)建一個bean時(例如在beanFactory關閉過程中)而試圖去獲取bean的請求時拋出的異常。
BeanCurrentlyInCreationException:一個bean的引用當前正在創(chuàng)建過程中拋出的異常。
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接口來增加對注解元數(shù)據(jù)的支持。

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


AnnotationBeanWiringInfoResolver繼承自BeanWiringInfoResolver,使用配置的注解來查找哪些類需要自動綁定。實現(xiàn)了解析方法:

BeanWiringInfo resolveWiringInfo(Object beanInstance);

AutowiredAnnotationBeanPostProcessor:實現(xiàn)了BeanPostProcessor接口,它自動綁定注解的field,set方法和任意配置方法。?

BeanFactoryAnnotationUtils:關聯(lián)注解的bean的查詢的工具方法,例如spring的@Qualifier注解。

public static <T> T qualifiedBeanOfType()

CustomAutowireConfigurer:繼承了BeanFactoryPostProcessor,它使自定義的自動綁定qualifier類型的注冊更便利。.
InitDestroyAnnotationBeanPostProcessor繼承了BeanPostProcessor,實現(xiàn)了注解觸發(fā)init和destroy方法。

InjectionMetadata:管理注入元數(shù)據(jù)的內(nèi)部類。

QualifierAnnotationAutowireCandidateResolver:實現(xiàn)了AutowireCandidateResolver,功能是將qualifier注解要自動綁定的field或者參數(shù)和bean definition qualifier相匹配。
RequiredAnnotationBeanPostProcessor:實現(xiàn)了BeanPostProcessor,對配置了Required注解的javaBean屬性進行強制檢查。

枚舉類:

Autowire:決定自動綁定狀態(tài)的枚舉,即一個bean的依賴是否由spring容器使用setter方式自動注入。這個是spring DI的核心概念。

注解類:

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

Required:public @interface Required 依賴檢查;

Value:public @interface Value:用于注入SpEL表達式,可以放置在字段方法或參數(shù)上。

?

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

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

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

其中接口有:

AutowireCapableBeanFactory:beanFactory的擴展接口,實現(xiàn)了自動綁定功能。這個接口的兩個主要方法是:

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實例的描述,它含有屬性值,構造參數(shù)值。它的實現(xiàn)子類還提供更多的信息。

BeanExpressionResolver:通過計算一個表達式來解析為值的策略接口。

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

BeanFactoryPostProcessor:允許對一個applicationContext中的bean definition進行定制修改,修改context內(nèi)含的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實現(xiàn)的配置接口。

ConfigurableListableBeanFactory:將會被大部分ListablebeanFactory實現(xiàn)的配置接口。
DestructionAwareBeanPostProcessor:BeanPostProcessor的子接口,它增加了一個銷毀前回調(diào)方法。

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

InstantiationAwareBeanPostProcessor:BeanPostProcessor的子接口,它增加了一個初始化前回調(diào)方法,還有一個在初始化后但顯式設置屬性或者自動綁定發(fā)生前的回調(diào)方法。

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來產(chǎn)生,而它由LazySingletonAspectInstanceFactoryDecorator來進行包裝,保證僅返回一個aspect。

SmartInstantiationAwareBeanPostProcessor:InstantiationAwareBeanPostProcessor的擴展接口,它增加了對一個處理過bean的最終類型進行預測的回調(diào)方法。

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

?其中類有:

AbstractFactoryBean<T>:實現(xiàn)了FactoryBean的簡單模板超類,它根據(jù)標志來決定是創(chuàng)建一個單例還是一個prototype對象。
BeanDefinitionHolder:使用名稱或者別名來保存BeanDefinition。
BeanDefinitionVisitor:遍歷BeanDefinition對象的參觀者類,特別是也遍歷bean中的屬性值和構造參數(shù)值,解析bean的元數(shù)據(jù)值。
BeanExpressionContext:計算一個BeanDefinition內(nèi)部的表達式的容器對象。
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:保存構造方法的參數(shù)值,特別是作為Beandefinition的一部分。
ConstructorArgumentValues.ValueHolder:保存構造方法的一個參數(shù)值。
CustomEditorConfigurer:繼承自BeanFactoryPostProcessor,給自定義屬性編輯器的注冊提供了便利的方法。
CustomScopeConfigurer:BeanFactoryPostProcessor的簡單實現(xiàn),給自定義Scope的注冊提供了便利的方法,上面提到ConfigurableBeanFactory提供了Scope的注冊。
DependencyDescriptor:將要注入的特定依賴的描述。
DeprecatedBeanWarner:繼承自BeanFactoryPostProcessor,記錄@Deprecated bean的報警信息。
FieldRetrievingFactoryBean:檢索靜態(tài)或者非靜態(tài)Field的值的工廠bean。
InstantiationAwareBeanPostProcessorAdapter:實現(xiàn)了SmartInstantiationAwareBeanPostProcessor所有方法的適配器,它沒有任何操作,不會改變?nèi)萜鲗ean進行初始化的處理過程。
ListFactoryBean:共享一組(list)實例的簡單工廠bean。
MapFactoryBean:共享一組(map)實例的簡單工廠bean。
MethodInvokingFactoryBean:一個有返回值的工廠bean,它返回觸發(fā)一個靜態(tài)或者實例的方法的結果。
ObjectFactoryCreatingFactoryBean:一個有返回值的工廠bean,它返回ObjectFactory。
PlaceholderConfigurerSupport:屬性資源配置器的抽象基類,它解析BeanDefinition中屬性值的占位符。
PreferencesPlaceholderConfigurer:PropertyPlaceholderConfigurer的子類,支持JDK1.4中的Preferences API (java.util.prefs)
PropertiesFactoryBean:它支持從classpath位置的文件中讀取屬性實例的工廠bean。
PropertyOverrideConfigurer:屬性資源配置器,它支持在applicationContext中重寫一個bean的屬性值。
PropertyPathFactoryBean:通過給定目標對象計算屬性路徑的工廠bean。
PropertyPlaceholderConfigurer:PlaceholderConfigurerSupport的子類,它解析本地屬性或者系統(tǒng)屬性或者環(huán)境變量定義的占位符(以${}描述)。
PropertyResourceConfigurer:支持從一個屬性資源中對單個bean的屬性值進行配置。
ProviderCreatingFactoryBean:返回一個JSR-330 Provider的工廠bean,JSR-330 Provider反過來從beanFactory返回一個bean資源。
RuntimeBeanNameReference:固定占位符類,當在beanfactory中作為另外一個bean名稱的引用時,作為屬性值對象,將在運行時進行解析。
RuntimeBeanReference:固定占位符類,當在beanfactory中作為另外一個bean的引用時,作為屬性值對象,將在運行時進行解析。
ServiceLocatorFactoryBean:繼承自FactoryBean,在beanFactory中創(chuàng)建一個動態(tài)代理,來代理一個具有一個或者多個服務或者類型的接口。
SetFactoryBean;共享set實例的簡單工廠bean
TypedStringValue:保存一個類型的屬性值。

上述類信息,可以參考FactoryBean的實現(xiàn)接口或者類。

8.?org.springframework.beans.factory.parsing 解析beanDefinition所需的基本類和接口。

包含的接口有:

ComponentDefinition:描述在同一配置的Context中一組BeanDefinition和BeanReference的邏輯視圖的接口。
DefaultsDefinition:一個默認definition標識接口,繼承了BeanMetadataElement,沒有實現(xiàn)任何方法。
ParseState.Entry:ParseState的入口標識接口
ProblemReporter:spi接口,支持tool或者外部進程處理在beanDefinition解析期間報出的錯誤或者異常。.
ReaderEventListener:接受在讀取BeanDefinition進程中注冊組件、別名、import時的回調(diào)接口。
SourceExtractor:簡單策略接口,允許工具控制source元數(shù)據(jù)關聯(lián)到bean definition元數(shù)據(jù)。

包含的類有:

AbstractComponentDefinition:ComponentDefinition接口的基本實現(xiàn),提供了AbstractComponentDefinition.getDescription()來代理ComponentDefinition.getName()方法。
AliasDefinition:代表在解析進程中一個別名已經(jīng)被注冊。
BeanComponentDefinition:基于一個標準BeanDefinition的ComponentDefinition,暴露指定bean的指定beanDefinition,內(nèi)部BeanDefinition和BeanReference。
BeanEntry:代表了一個BeanDefinition。
CompositeComponentDefinition:保存了一個或者多個內(nèi)嵌ComponentDefinition實例的ComponentDefinition實現(xiàn),它把這些ComponentDefinition實例聚合成具有命名的組。
ConstructorArgumentEntry:代表了構造參數(shù)。
EmptyReaderEventListener:ReaderEventListener接口的空實現(xiàn),所有回調(diào)方法都沒有提供可執(zhí)行操作。
FailFastProblemReporter:ProblemReporter接口的簡單實現(xiàn),當遇到錯誤發(fā)生時展示fail-fast行為。
ImportDefinition:在解析進程中,代表一個import已經(jīng)被處理。
Location:模型接口,一個資源位置的模型。
NullSourceExtractor:SourceExtractor接口的簡單實現(xiàn),返回null作為source元數(shù)據(jù)。
ParseState:在解析進程中作為一個簡單的基于棧結構的追蹤邏輯位置類。
PassThroughSourceExtractor:SourceExtractor的簡單實現(xiàn),它通過一個attachment來傳遞備選的源數(shù)據(jù)類型對象。
Problem:代表了一個beanDefinition配置問題。
PropertyEntry:代表了一個javaBean的屬性。
QualifierEntry:代表了一個自動綁定的備選qualifier。
ReaderContext:bean definition讀取進程中傳遞的一個Context,封裝了所有相關的配置,包括狀態(tài)。

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

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

AbstractServiceLoaderBasedFactoryBean:FactoryBean的抽象基類,它是操作JDK1.6 ServiceLoader的基礎工具。
ServiceFactoryBean:暴露指定配置的服務類的基礎服務的FactoryBean,通過JDK1.6 serviceLoader基礎類來獲取這些服務。
ServiceListFactoryBean:暴露配置的服務類的所有基礎服務的FactoryBea,表現(xiàn)為一組服務對象,可以通過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的擴展接口,允許在常規(guī)BeanFactoryPostProcessor檢查之前注冊更多bean definition。
BeanNameGenerator:對beanDefinition產(chǎn)生bean名稱的策略接口。
InstantiationStrategy:負責根據(jù)相應的根bean definition創(chuàng)建實例的接口。
MergedBeanDefinitionPostProcessor:后處理回調(diào)接口,在運行時合并bean definition。
MethodReplacer:一個可以重新定義Ioc容器對象的所有方法的接口:方法注入是依賴注入的一種形式。
SecurityContextProvider:運行在beanFactory中的安全Context的提供者。

其中類有:
AbstractAutowireCapableBeanFactory:抽象beanFactory的超類,它使用指定的RootBeanDefinition類的所有方法實現(xiàn)創(chuàng)建默認bean。
AbstractBeanDefinition:具體、成熟BeanDefinition類的基類,構造出RootBeanDefinition和ChildBeanDefinition的通用屬性。
AbstractBeanDefinitionReader:實現(xiàn)了BeanDefinitionReader接口,是beanDefinitionReader的抽象基類。
AbstractBeanFactory:BeanFactory的抽象基類實現(xiàn),提供ConfigurableBeanFactory SPI的全部功能。
AutowireCandidateQualifier解析自動綁定備選項Qualifier。
BeanDefinitionBuilder:使用建造者模式構建BeanDefinition的編程方法。
BeanDefinitionDefaults:簡單保持BeanDefinition的默認屬性類。
BeanDefinitionReaderUtils:BeanDefinitionReader實現(xiàn)使用的工具方法類。
CglibSubclassingInstantiationStrategy:BeanFactory默認對象初始化策略。
ChildBeanDefinition:從父類繼承各種設置的bean的beanDefinition。
DefaultBeanNameGenerator:BeanNameGenerator接口的默認實現(xiàn),代理BeanDefinitionReaderUtils.generateBeanName(BeanDefinition, BeanDefinitionRegistry)方法。
DefaultListableBeanFactory:ListableBeanFactory接口和BeanDefinitionRegistry接口的默認實現(xiàn):基于beanDefinition對象的一個成熟的beanFactory。
DefaultSingletonBeanRegistry:共享bean實例的通用注冊,實現(xiàn)了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,當出現(xiàn)不支持的注解時使用。
SimpleBeanDefinitionRegistry:BeanDefinitionRegistry接口的簡單實現(xiàn)。
SimpleInstantiationStrategy:BeanFactory中簡單對象的初始化策略。
SimpleSecurityContextProvider:SecurityContextProvider的簡單擴展。
StaticListableBeanFactory:靜態(tài)BeanFactory的實現(xiàn),用來編程實現(xiàn)注冊已經(jīng)存在的單例實例。

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

BeanWiringInfoResolver:策略接口,能夠根據(jù)給定的一個新初始化的bean對象解析bean的名稱信息。
BeanConfigurerSupport:配置bean的便利基類,它可以對對象進行依賴注入。
BeanWiringInfo:保存特定類的bean的綁定元數(shù)據(jù)信息。
ClassNameBeanWiringInfoResolver:BeanWiringInfoResolver的簡單默認實現(xiàn),查找一個和全限定名同名的bean的名稱。

12.org.springframework.beans.factory.xml

其中,接口有:
BeanDefinitionDecorator:DefaultBeanDefinitionDocumentReader用來處理自定義的,內(nèi)嵌的<bean>標簽的接口
BeanDefinitionDocumentReader:解析包含spring BeanDefinition的xml文件的SPI.
BeanDefinitionParser:DefaultBeanDefinitionDocumentReader用來處理自定義的,高層的<beans>標簽的接口
DocumentLoader:加載xml文件的策略接口。
NamespaceHandler:DefaultBeanDefinitionDocumentReader用來處理在spring xml配置文件中的自定義命名空間的基礎接口。
NamespaceHandlerResolver:DefaultBeanDefinitionDocumentReader用來定位NamespaceHandler的接口,NamespaceHandler實現(xiàn)了特定的URI命名空間。

其中,類有:
AbstractBeanDefinitionParser:BeanDefinitionParser的抽象實現(xiàn),提供了許多便利方法和模板方法,模板方法需要在子類進行重寫來提供具體的邏輯實現(xiàn)。
AbstractSimpleBeanDefinitionParser:AbstractBeanDefinitionParser的簡單實現(xiàn),當將要解析元素的屬性名和配置類的屬性名一一對應的時候,可以用到該類。
AbstractSingleBeanDefinitionParser:BeanDefinitionParser的基類,需要解析和定義單獨的BeanDefinition
BeanDefinitionParserDelegate:狀態(tài)代理類,用來解析xml BeanDefinition。
BeansDtdResolver:spring bean dtd解析器EntityResolver的實現(xiàn),用來從classpath或者jar文件加載dtd。
DefaultBeanDefinitionDocumentReader:BeanDefinitionDocumentReader接口的默認實現(xiàn)。
DefaultDocumentLoader:spring 的DocumentLoader默認實現(xiàn)。
DefaultNamespaceHandlerResolver:NamespaceHandlerResolver接口的默認實現(xiàn)。
DelegatingEntityResolver:EntityResolver的實現(xiàn),分別代理了dtd的BeansDtdResolver和xml schemas的 PluggableSchemaResolver。
DocumentDefaultsDefinition:簡單的javaBean,它保存標準的spring xml文件中<bean>級別的屬性,如:default-lazy-init, default-autowire等等
NamespaceHandlerSupport:支持實現(xiàn)自定義的NamespaceHandler。
ParserContext:傳遞一個beanDefinition 解析進程到此上下文,封裝了所有的相關配置也包括狀態(tài)。
PluggableSchemaResolver:繼承自EntityResolver,使用一系列map文件將schema url解析到本地classpath資源。
ResourceEntityResolver:繼承自EntityResolver,通過ResourceLoader來解析實體的引用。
SimpleConstructorNamespaceHandler:單NamespaceHandler實現(xiàn),它將自定義屬性直接映射到bean屬性。
SimplePropertyNamespaceHandler:簡單NamespaceHandler實現(xiàn),它將自定義屬性直接映射到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)的查詢、使用、釋放的協(xié)議。
BeanFactoryReference:用來追蹤一個通過BeanFactoryLocator獲得的BeanFactory的引用。
SingletonBeanFactoryLocator:BeanFactoryLocator的keyed-singleton實現(xiàn),它可以訪問共享的spring beanFactory實例。

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

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

?

小結:

spring beans 是Ioc容器實現(xiàn)的最初形態(tài),深入理解spring beans模塊有助于加深對IoC容器的認識,而基于web應用的IoC容器Application又是構建與BeanFactory之上的,這樣的話,我怎么強調(diào)它的重要性都不為過吧。

spring beans最重要的兩個東西要搞定即BeanFactory的繼承關系和FactoryBean的繼續(xù)關系,在閱讀源碼中,你會發(fā)現(xiàn)應用了很多設計模式,如工廠模式,建造者模式,適配器模式,模板方法模式,單例模式、代理模式等等,我就不一一列舉了,自己去探索吧。

注:這篇博客我寫了8天才基本的東西寫完,差點堅持不住呀,幾次想放棄,后續(xù)要繼續(xù)豐富內(nèi)容,為了有寫繼續(xù)寫下去的動力,就直接發(fā)上去了。

?

轉載于:https://www.cnblogs.com/davidwang456/p/4213652.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的spring beans源码解读之--总结篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。