国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring中IOC容器常用的接口和具體的實現(xiàn)類

這篇具有很好參考價值的文章主要介紹了Spring中IOC容器常用的接口和具體的實現(xiàn)類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在Spring框架沒有出現(xiàn)之前,在Java語言中,程序員們創(chuàng)建對象一般都是通過關(guān)鍵字new來完成,那時流行一句話“萬物即可new,包括女朋友”。但是這種創(chuàng)建對象的方式維護成本很高,而且對于類之間的相互關(guān)聯(lián)關(guān)系很不友好。鑒于這種情況,Spring框架應(yīng)運而生,Spring框架絕對是一款偉大、設(shè)計優(yōu)秀的框架,它的底層設(shè)計思想和應(yīng)用策略使它一直火熱到現(xiàn)在,并逐漸發(fā)展成為Spring生態(tài)。本篇內(nèi)容就為大家來介紹下Spring框架中IOC容器相關(guān)的接口和API解析。

一、IOC思想介紹

IOC,其實是Inversion of Control單詞的縮寫,中文的意思是控制反轉(zhuǎn),也被稱為依賴注入(DI)。這是一個過程,就是翻轉(zhuǎn)資源獲取的方向。把我們自己創(chuàng)建資源、向環(huán)境索取資源變成環(huán)境將資源準(zhǔn)備好,我們享受資源注入。

IOC容器介紹

在Spring框架提供的功能模塊中有一個功能叫做核心容器(Core Container)功能,這個核心容器的作用就是在Spring環(huán)境下使用任何功能都必須基于IOC容器。而這里的IOC容器主要包含管理組件對象的生命周期、實例化組件對象、管理組件對象之間的依賴關(guān)系等。該容器的設(shè)計替程序員屏蔽了組件創(chuàng)建過程中的大量細節(jié),極大的降低了使用門檻,大幅度提高了開發(fā)效率。

Spring中IOC容器常用的接口和具體的實現(xiàn)類,spring,java,rpc

該容器的主要實現(xiàn)依賴于工廠模式(BeanFactory)+反射。

IOC容器類型

上述IOC容器介紹中說到,IOC容器主要是依賴于工廠模式+反射,在Spring框架中,其實也確實為我們提供了一個頂層接口:BeanFactory工廠接口。該接口是頂層接口,其內(nèi)部提供了能夠管理任何類型對象的高級配置機制(API)。

API介紹如下:

public interface BeanFactory {

/**

* 用于取消引用FactoryBean實例,并將其與FactoryBean創(chuàng)建的bean區(qū)分開來。

*/

String FACTORY_BEAN_PREFIX = "&";

/**

* 返回指定bean的實例,該實例可以是共享的或獨立的。此方法允許Spring BeanFactory用作Singleton或Prototype設(shè)計模式的替代。* 在Singleton bean的情況下,調(diào)用者可以保留對返回對象的引用。將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean名稱。

* @param 命名要檢索的bean的名稱

* @return bean的一個實例

* @throws 如果沒有具有指定名稱的bean,拋出
NoSuchBeanDefinitionException

* @throws 如果無法獲取bean,拋出BeansException

*/

Object getBean(String name) throws BeansException;

/**

* 返回指定bean的實例,該實例可以是共享的或獨立的。

* 與getBean(String)的行為相同,但如果bean不是所需類型,則通過拋出
BeanNotOfRequiredTypeException來提供類型安全性的度量。

* 這意味著在轉(zhuǎn)換結(jié)果正確時不能拋出ClassCastException,就像#getBean(String)一樣。將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean名稱。將詢問父工廠是否在此工廠實例中找不到bean。

* @param 命名要檢索的bean的名稱

* @param bean要匹配的類型,可以是接口或是超類

* @return 一個bean實例

* @throws 如果沒有具有指定名稱的bean,拋出
NoSuchBeanDefinitionException

* @throws 如果bean不是要求的類型,拋出
BeanNotOfRequiredTypeException

* @throws 如果bean不能創(chuàng)建,拋出BeansException

*/

<T> T getBean(String name, Class<T> requiredType) throws BeansException;

/**

* 返回指定bean的實例,該實例可以是共享的或獨立的。

* 允許指定顯式構(gòu)造函數(shù)參數(shù)/工廠方法參數(shù),覆蓋bean定義中指定的默認參數(shù)(如果有)。

* @param 命名要檢索的bean的名稱

* @param args 使用顯式參數(shù)創(chuàng)建bean實例時使用的參數(shù)(僅在創(chuàng)建新實例時應(yīng)用,而不是在檢索現(xiàn)有實例時應(yīng)用)

* @return 一個bean實例

* @throws 如果沒有具有指定名稱的bean,拋出
NoSuchBeanDefinitionException

* @throws 如果已經(jīng)給出了參數(shù)但受影響的bean不是Prototype,拋出
BeanDefinitionStoreException

* @throws 如果bean不能創(chuàng)建,拋出BeansException

*/

Object getBean(String name, Object... args) throws BeansException;

/**

* 返回唯一匹配給定對象類型的bean實例(如果有)。此方法進入ListableBeanFactory按類型查找區(qū)域,但也可以根據(jù)給定類型的名稱轉(zhuǎn)換為常規(guī)的按名稱查找。

* @param bean要匹配的類型,可以是接口或是超類

* @return 匹配所需類型的單個bean的實例

* @throws 如果沒有找到給定類型的bean,拋出
NoSuchBeanDefinitionException

* @throws 如果找到多個給定類型的bean,拋出
NoUniqueBeanDefinitionException

* @throws 如果無法創(chuàng)建bean,拋出BeansException

*/

<T> T getBean(Class<T> requiredType) throws BeansException;

/**

* 返回指定bean的實例,該實例可以是共享的或獨立的。

* 允許指定顯式構(gòu)造函數(shù)參數(shù)/工廠方法參數(shù),覆蓋bean定義中指定的默認參數(shù)(如果有)。此方法進入ListableBeanFactory按類型查找區(qū)域,但也可以轉(zhuǎn)換為傳統(tǒng)的按名稱查找 基于給定類型的名稱。

* @param requiredType bean要匹配的類型,可以是接口或是超類

* @param args 使用顯式參數(shù)創(chuàng)建bean實例時使用的參數(shù)(僅在創(chuàng)建新實例時應(yīng)用,而不是在檢索現(xiàn)有實例時應(yīng)用)

* @return 一個bean實例

* @throws 如果沒有找到給定類型的bean,拋出
NoSuchBeanDefinitionException

* @throws 如果已經(jīng)給出了參數(shù)但受影響的bean不是Prototype,拋出
BeanDefinitionStoreException

* @throws 如果無法創(chuàng)建bean,拋出BeansException

* @since 4.1

*/

<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;

/**

* 返回指定bean的提供程序,允許對實例進行惰性按需檢索,包括可用性和唯一性選項。

* @param requiredType bean要匹配的類型,可以是接口或是超類

* @return 相應(yīng)的提供者句柄

*/

<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);

/**

* 返回指定bean的提供程序,允許對實例進行惰性按需檢索,包括可用性和唯一性選項。

* @param requiredType bean要匹配的類型。可以是泛型類型聲明。請注意,此處不支持集合類型,與反射注入點相反。* 要以編程方式檢索與特定類型匹配的bean列表,請在此處將實際bean類型指定為參數(shù),然后使用
ObjectProvider.orderedStream()或其延遲流/迭代選項。

* @return 相應(yīng)的提供者句柄

*/

<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);

/**

* 此bean工廠是否包含bean定義或具有給定名稱的外部注冊的bean的singleton實例

* 如果給定的名稱是別名,它將被轉(zhuǎn)換回相應(yīng)的規(guī)范bean名稱。

* 如果此工廠是分層的,將詢問任何父工廠是否在這個工廠實例中找不到bean。如果找到匹配給定名稱的bean定義或單例實例,則此方法將返回true。

* 無論命名bean定義是具體的還是抽象的,lazy還是eager的,作用域與否。因此,請注意此方法的true返回值不一定表示getBean將能夠獲取同名的實例。

* @param name 查詢的bean的名稱

* @return 給定名稱的bean是否存在

*/

boolean containsBean(String name);

/**

* 該Bean是否是共享的單例? 也就是說, getBean()方法總是返回相同的實例

* 注意:返回false的此方法不能清楚地表明是獨立的實例。它表示非單例實例,也可以對應(yīng)于作用域的bean。

* 使用isPrototype操作顯式檢查是否是獨立的實例。將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean名稱。將詢問父工廠是否在此工廠實例中找不到bean。

* @param name 查詢的bean的名稱

* @return 該bean是否有單例實例

* @throws 如果沒有給定名稱的Bean,拋出
NoSuchBeanDefinitionException

*/

boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

/**

* 該bean是否是Prototype? 也就是說,getBean總會返回獨立實例嗎

* 注意:返回false的此方法不能清楚地指示單個對象。它表示非獨立實例,也可以對應(yīng)于范圍內(nèi)的bean。

* 使用isSingleton操作顯式檢查共享單例實例。將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean名稱。將詢問父工廠是否在此工廠實例中找不到bean。

* @param name 查詢的bean的名稱

* @return 這個bean是否總是提供獨立的實例

* @throws 如果沒有給定名稱的Bean,拋出
NoSuchBeanDefinitionException

*/

boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

/**

* 檢查具有給定名稱的bean是否與指定的類型匹配。更具體地說,檢查對給定名稱的getBean調(diào)用是否將返回可分配給指定目標(biāo)類型的對象。

* 將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean的名稱.將詢問父工廠是否在此工廠實例中找不到bean。

* @param name 查詢bean的名稱

* @param typeToMatch 要匹配的類型

* @return 如果Bean類型匹配,返回true;如果bean類型不匹配或不確定,返回false。

* @throws 如果沒有給定名稱的Bean,拋出
NoSuchBeanDefinitionException

*/

boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;

/**

* 檢查具有給定名稱的bean是否與指定的類型匹配。更具體地說,檢查對給定名稱的getBean調(diào)用是否將返回可分配給指定目標(biāo)類型的對象。

* 將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean的名稱.將詢問父工廠是否在此工廠實例中找不到bean。

* @param name 查詢bean的名稱

* @param typeToMatch 要匹配的類型

* @return 如果Bean類型匹配,返回true;如果bean類型不匹配或不確定,返回false。

* @throws 如果沒有給定名稱的Bean,拋出
NoSuchBeanDefinitionException

*/

boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;

/**

* 確定給定名稱的bean的類型。進一步來說,確定getBean方法為給定bean名稱返回的對象類型。對于FactoryBean,返回FactoryBean創(chuàng)建的對象類型,由FactoryBean.getObjectType()公開。

* 將別名轉(zhuǎn)換回相應(yīng)的規(guī)范bean名稱。將詢問父工廠是否在此工廠實例中找不到bean。

* @param name 查詢的bean的名稱

* @return bean的類型, 或者不可確定返回null。

* @throws 如果沒有給定名稱的Bean,拋出
NoSuchBeanDefinitionException

*/

@Nullable

Class<?> getType(String name) throws NoSuchBeanDefinitionException;

/**

* 返回給定bean名稱的別名(如果有)。所有這些別名在getBean調(diào)用中使用時指向同一個bean。

* 如果給定名稱是別名,則對應(yīng)原始bean名稱和其他別名( 如果有的話)將返回,原始bean名稱是數(shù)組中的第一個元素。將詢問父工廠是否在此工廠實例中找不到bean。

* @param name 用于檢查別名的bean名稱

* @return 別名,如果沒有,則為空數(shù)組

*/

String[] getAliases(String name);

}

BeanFactory頂層接口內(nèi)部設(shè)計了上述API方法,所以它需要具體的實現(xiàn)類來實現(xiàn)這些方法,說到具體的實現(xiàn)類,那么我們就需要查看下該接口的子接口和相關(guān)實現(xiàn)類。我們借助開發(fā)工具IDEA來查看BeanFactory頂層接口的子接口和具體實現(xiàn)。

Spring中IOC容器常用的接口和具體的實現(xiàn)類,spring,java,rpc

圖解:

Spring中IOC容器常用的接口和具體的實現(xiàn)類,spring,java,rpc

我們可以看到,BeanFactory有三大派生的直屬接口,分別是:ListableBeanFactory,HierarchicalBeanFactory,AutowireCapableBeanFactory。其中

(1)ListableBeanFactory子接口:提供容器中bean迭代的功能。如返回所有Bean的名字、容器中Bean的數(shù)量等。

(2)HierarchicalBeanFactory子接口:提供父容器的訪問功能,可通過 ConfigurableBeanFactory的setParentBeanFactory方法設(shè)置父容器,主要是為了實現(xiàn)Bean工廠的分層。

其中子容器可通過接口方法訪問父容器;通過 HierarchicalBeanFactory 接口, Spring 的 IOC 容器可以建立父子層級關(guān)聯(lián)的容器體系,子容器可以訪問父容器中的Bean,但父容器不能訪問子容器的Bean。

Spring 使用父子容器實現(xiàn)了很多功能,比如在 Spring MVC 中,展現(xiàn)層Bean位于一個子容器中,而業(yè)務(wù)層和持久層的Bean位于父容器中。這樣,展現(xiàn)層Bean就可引用業(yè)務(wù)層和持久層的Bean,而業(yè)務(wù)層和持久層的 Bean 則看不到展現(xiàn)層的Bean。

(3)AutowireCapableBeanFactory子接口:為 Spring 容器之外的Bean ,也就是處理未交由Spring管理的Bean ,提供依賴注入的功能。

二、接口具體分析

HierarchicalBeanFactory接口分析

// 繼承BeanFactory接口,父子級聯(lián)IOC容器的接口

public interface HierarchicalBeanFactory extends BeanFactory {

// 返回父Bean工廠,如果沒有,則返回null

@Nullable BeanFactory getParentBeanFactory();

/** 返回本地bean工廠, * 判斷是否包含給定名稱的bean,忽略父Bean工廠中定義的bean。這是containsBean的替代方案,忽略來自父bean工廠的給定名稱的bean。 */

boolean containsLocalBean(String name);}

ListableBeanFactory接口分析

//擴展了BeanFactory接口,提供了對bean的枚舉能力,

//即可以返回bean的實例集合,而不用像BeanFactory只能返回單個bean的實例

//注意:如果存在父容器的話該接口不會考慮父容器中的bean,只會返回當(dāng)前容器中的

beanpublic interface ListableBeanFactory extends BeanFactory {

// 根據(jù)Bean的名稱,判斷容器中是否包含bean的描述信息

boolean containsBeanDefinition(String beanName);

// 獲取容器中對應(yīng)組件對象Bean的描述信息數(shù)量

int getBeanDefinitionCount();

// 獲取容器中所有組件對象的Bean的描述信息

String[] getBeanDefinitionNames();

// 根據(jù)類型獲取容器中所有組件對象的bean名稱

String[] getBeanNamesForType(ResolvableType type);

String[] getBeanNamesForType(ResolvableType type, boolean includeNonSingletons, boolean allowEagerInit);

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

String[] getBeanNamesForType(@Nullable Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);

// 根據(jù)類型 獲取容器中的Bean對象

<T> Map<String, T> getBeansOfType(@Nullable Class<T> type) throws BeansException;

<T> Map<String, T> getBeansOfType(@Nullable Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException;

// 根據(jù)注解類型,獲取容器中Bean組件對象的名稱

String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);

Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;

@Nullable <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) throws NoSuchBeanDefinitionException;}

AutowireCapableBeanFactory接口分析

//擴展了BeanFactory,主要提供了自動裝配能力,包含了bean的創(chuàng)建、注入配置、屬性配置、依賴解析、后置處理器前后的實例化、bean的實例化、bean的銷毀登

public interface AutowireCapableBeanFactory extends BeanFactory {

//無自動裝配

int AUTOWIRE_NO = 0;

//by-name裝配

int AUTOWIRE_BY_NAME = 1;

//by-type裝配

int AUTOWIRE_BY_TYPE = 2;

//constructor構(gòu)造函數(shù)裝配

int AUTOWIRE_CONSTRUCTOR = 3;

//自動裝配,已被標(biāo)記為過時

@Deprecated

int AUTOWIRE_AUTODETECT = 4;

// 用給定的class創(chuàng)建一個Bean實例,完整經(jīng)歷一個Bean創(chuàng)建過程的生命周期節(jié)點回調(diào),但不執(zhí)行傳統(tǒng)的autowiring

<T> T createBean(Class<T> beanClass) throws BeansException;

// 用于(再次)填充指定Bean被注解的元素或方法(如@Resource @Autowired),不執(zhí)行傳統(tǒng)的autowiring

void autowireBean(Object existingBean) throws BeansException;

// 配置Bean

Object configureBean(Object existingBean, String beanName) throws BeansException;

// 用于細粒度控制bean生命周期的方法

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

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

// 將傳入的第一個參數(shù)按照spring中按name或者按type裝備的方法將傳入的Bean的各個properties給裝配上

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

void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException;

// 初始化容器中的Bean

Object initializeBean(Object existingBean, String beanName) throws BeansException;

// 對Bean初始化前后應(yīng)用邏輯處理器

// 執(zhí)行BeanPostProcessor前置處理邏輯

Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) throws BeansException;

// 執(zhí)行BeanPostProcessor后置處理邏輯

Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException;

// 銷毀容器中的Bean

void destroyBean(Object existingBean);

// 根據(jù)傳入的類型,從Spring容器(包括父子容器)中查找出指定類型下唯一的Bean,并將beanName與beanInstance包裝成NamedBeanHolder對象返回

<T> NamedBeanHolder<T> resolveNamedBean(Class<T> requiredType) throws BeansException;

// 解析Bean需要的依賴

@Nullable

Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName) throws BeansException;

@Nullable

Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Nullable Set<String> autowiredBeanNames,@Nullable TypeConverter typeConverter) throws BeansException;

}

SimpleJndiBeanFactory實現(xiàn)類分析

該實現(xiàn)類是基于JndiLocatorSupport的BeanFactory實現(xiàn),并使用HashMap進行緩存處理。

這里需要注意的是SimpleJndiBeanFactory不支持枚舉的Bean定義,因此沒有實現(xiàn)ListableBeanFactory,而是直接實現(xiàn)的BeanFactory。

ApplicationContext接口分析

通過上述BeanFactory接口層級圖,我們可以看到,在HierarchicalBeanFactory接口下,有一子接口叫做ApplicationContext。

這里我們也說一下為什么單獨將該接口進行說明。

ApplicationContext隸屬于org.springframework.context,它在繼承BeanFactory接口的同時,同時還繼承了如下接口:

EnvironmentCapable, ListableBeanFactory,HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver

使ApplicationContext接口包含了IOC完整實現(xiàn)的同時,還在其基礎(chǔ)上擴展了許多功能。比如資源訪問、事件機制、國際化(il8n)等。而我們一般都稱ApplicationContext接口的具體實現(xiàn)類對象為ApplicationContext上下文,它為我們程序員良好運用Spring框架提供了很好的支持。

ApplicationContext接口源碼解析:

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {

// 返回此應(yīng)用程序上下文的唯一id。返回:上下文的唯一id,如果沒有則返回null @Nullable String getId(); // 返回此上下文所屬的已部署應(yīng)用程序的名稱。返回:已部署應(yīng)用程序的名稱,默認情況下為空

String String getApplicationName();

// 返回此上下文的友好名稱。返回:該上下文的顯示名稱(從不為空)

String getDisplayName();

// 返回第一次加載此上下文時的時間戳。返回:該上下文第一次加載時的時間戳(毫秒)

getStartupDate();

// 返回父上下文,如果沒有父上下文并且這是上下文層次結(jié)構(gòu)的根,則返回null。返回:父上下文,如果沒有父上下文則返回null

@Nullable

ApplicationContext getParent();

/**

* 為此上下文公開
AutowireCapableBeanFactory功能。

* 除了初始化位于應(yīng)用程序上下文之外的bean實例,將Spring bean生命周期(全部或部分)應(yīng)用于它們之外,應(yīng)用程序代碼通常不使用它。

*/

AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;

}

接下來我們分析一下ApplicationContext繼承的接口,分析一下這些接口的作用及各自接口內(nèi)API方法的意義。

EnvironmentCapable接口分析

// EnvironmentCapable提供了getEnvironment方法,獲取當(dāng)前Spring的配置信息(環(huán)境變量、application.properties等)

public interface EnvironmentCapable {

// 讀取配置資源

Environment getEnvironment();

}

ApplicationEventPublisher接口分析

// 封裝事件發(fā)布功能的接口

@FunctionalInterfacepublic interface ApplicationEventPublisher {

// 將應(yīng)用程序事件通知與此應(yīng)用程序注冊的所有匹配偵聽器。事件可以是框架事件(例如ContextRefreshedEvent)或特定于應(yīng)用程序的事件

default void publishEvent(ApplicationEvent event) {

publishEvent((Object) event);

}

// 通知所有與此應(yīng)用程序注冊的事件匹配的偵聽器。如果指定的事件不是一個ApplicationEvent,它將被包裝在一個PayloadApplicationEvent中

// 這樣的事件發(fā)布步驟實際上是一個多播程序的交接,并不意味著同步或異步執(zhí)行,甚至根本不意味著立即執(zhí)行。我們鼓勵事件偵聽器盡可能高效,單獨使用異步執(zhí)行來進行長時間運行和可能阻塞的操作。

void publishEvent(Object event);

}

MessageSource接口分析

// 用于解析消息的策略接口,支持此類消息的參數(shù)化和國際化

public interface MessageSource {

// 嘗試解析該消息。如果沒有找到消息,則返回默認消息

@Nullable

String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);

// 嘗試解析該消息。如果無法找到該消息,則將其視為錯誤

String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;

// 嘗試使用傳入的MessageSourceResolvable參數(shù)中包含的所有屬性來解析消息。

// 注意:我們必須在此方法上拋出NoSuchMessageException,因為在調(diào)用此方法時,我們無法確定可解析對象的defaultMessage屬性是否為null。

String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;}

ResourcePatternResolver接口分析

/**

* 根據(jù)路徑或者通配符獲取多個資源,用于將位置模式解析為Resource對象的策略接口。

* 可以用于任何類型的位置模式,該接口還建議為類路徑中的所有匹配資源添加一個新的資源前綴“classpath:”。

*/

public interface ResourcePatternResolver extends ResourceLoader {

String CLASSPATH_ALL_URL_PREFIX = "classpath*:";

// 用于讀取(指定位置下的)配置文件

Resource[] getResources(String locationPattern) throws IOException;

}

總結(jié)

上述內(nèi)容,為大家介紹了BeanFactory頂層接口下其相關(guān)子接口具體的作用以及接口提供的抽象api的作用。幫助大家在源碼層面理解Spring框架底層結(jié)構(gòu)設(shè)計。我們在知曉底層設(shè)計結(jié)構(gòu)之后,重點關(guān)注應(yīng)是在ApplicationContext接口及其實現(xiàn)上。文章來源地址http://www.zghlxwxcb.cn/news/detail-614394.html

到了這里,關(guān)于Spring中IOC容器常用的接口和具體的實現(xiàn)類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spring IoC容器、IoC與DI

    Spring IoC容器、IoC與DI

    目錄 Spring是什么? 理解容器? 什么是IoC(Inversion of Control) 傳統(tǒng)的new創(chuàng)建對象的方式中類與類的耦合程度很大。? IoC的優(yōu)勢:? Spring IoC容器最核心的功能? 什么是DI (Dependency Injection) IoC和DI的區(qū)別? Spring是指Spring Framework(Spring框架),它是開源的框架,有著很龐大的社區(qū),通過

    2023年04月21日
    瀏覽(25)
  • Spring——Spring是什么?IoC容器是什么?

    Spring——Spring是什么?IoC容器是什么?

    本人是一個普通程序猿!分享一點自己的見解,如果有錯誤的地方歡迎各位大佬蒞臨指導(dǎo),如果你也對編程感興趣的話,互關(guān)一下,以后互相學(xué)習(xí),共同進步。這篇文章能夠幫助到你的話,勞請大家點贊轉(zhuǎn)發(fā)支持一下! 我們通常所說的 Spring 指的是 Spring Framework(Spring 框架) ,它是

    2024年02月15日
    瀏覽(19)
  • spring ioc容器

    ioc是 inversion of Control的簡寫,意為控制反轉(zhuǎn)。通過其對所有的Java對象的實例化和初始化,控制對象與對象之間的依賴關(guān)系。 (1)控制反轉(zhuǎn)是一種思想。 (2)控制反轉(zhuǎn)是為了 降低程序耦合度,提高程序擴展力。 (3)控制反轉(zhuǎn),反轉(zhuǎn)的是什么? 答:將對象的創(chuàng)建權(quán)利交出去

    2024年01月17日
    瀏覽(17)
  • 3、Spring 之IOC 容器 詳解

    3、Spring 之IOC 容器 詳解

    IoC 是 Inversion of Control 的簡寫,譯為“控制反轉(zhuǎn)”,它不是一門技術(shù),而是一種 設(shè)計思想 ,是一個重要的面向?qū)ο缶幊谭▌t,能夠指導(dǎo)我們?nèi)绾卧O(shè)計出松耦合、更優(yōu)良的程序。 Spring 通過 IoC 容器 來管理 所有 Java 對象的實例化和初始化 , 控制對象與對象之間的依賴關(guān)系 。我

    2024年02月09日
    瀏覽(16)
  • Spring 6.X IoC 容器

    Spring 6.X IoC 容器

    下面主要介紹 Spring 框架對控制反轉(zhuǎn) (IoC) 原理的實現(xiàn) 首先要說明的是:IoC 也稱為依賴注入,這是一個過程。 其次依賴項的定義:對象僅通過構(gòu)造函數(shù)參數(shù)、工廠方法的參數(shù),或在構(gòu)造對象實例、工廠方法返回后在對象實例上設(shè)置的屬性來定義其依賴項(即它們使用的其他對

    2024年02月09日
    瀏覽(18)
  • Spring核心容器IOC案例講解,帶你理解IOC

    Universe Infinity inc. 什么是IOC容器,先把IOC給忽略到,其實就是個容器。 什么?容器又是個啥玩意?容器是用來放東西的東西啊。 各個領(lǐng)域都喜歡起一些專業(yè)術(shù)語,顯得很高級。給你講IOC是不是很高級,給你講Map是不是就明白了。 bean對象最終存儲在spring容器中,在spring源碼底

    2024年01月24日
    瀏覽(20)
  • Spring 核心之 IOC 容器學(xué)習(xí)二

    Annotation 的前世今生 定位 Bean 掃描路徑 讀取 Annotation 元數(shù)據(jù) 掃描指定包并解析為 BeanDefinition

    2024年01月19日
    瀏覽(24)
  • Spring 核心之 IOC 容器學(xué)習(xí)一

    Spring 核心之 IOC 容器學(xué)習(xí)一

    1、BeanFactory 其中 BeanFactory 作為最頂層的一個接口類,它定義了 IOC 容器的基本功能規(guī)范,BeanFactory 有三個重要的子類:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。但是從類圖中我們可以發(fā)現(xiàn)最終的默認實現(xiàn)類是 DefaultListableBeanFactory,它實現(xiàn)了所有的接口。 那

    2024年01月19日
    瀏覽(20)
  • Spring IOC 入門簡介【自定義容器實例】

    Spring IOC 入門簡介【自定義容器實例】

    目錄 相關(guān)導(dǎo)讀 1. Maven專欄系列文章 2. Mybatis專欄系列文章 3. Spring系列專欄文章 前言 Spring簡介 Spring體系結(jié)構(gòu) 一、IOC控制反轉(zhuǎn)思想 二、IOC自定義對象容器 1. 創(chuàng)建實體類,Dao接口,實現(xiàn)類 2.?創(chuàng)建配置文件bean.properties 3.?創(chuàng)建容器管理類 4. 創(chuàng)建StudentService類 5. 測試方法 6. 測試結(jié)

    2023年04月21日
    瀏覽(34)
  • Spring的簡介ioc容器及注入方式

    Spring的簡介ioc容器及注入方式

    Spring是一個開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。 ???Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。 ???然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Sprin

    2024年02月11日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包