成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當前位置:首頁Spring源碼筆記之SpringIOC--(3)什么是BeanFactory?

Spring源碼筆記之SpringIOC--(3)什么是BeanFactory?

來源:九壹網(wǎng)
什么是BeanFactory?

BeanFactory是SpringIOC的最頂層接口,涵蓋了IOC容器最基本的操作。ListableBeanFactory、ConfigurableBeanFactory提供了IOC容器獲取所有Bean、配置Bean的額外能力。所有BeanFactory的實現(xiàn)類持有所有Bean的定義BeanDefinition,用一個唯一的字符串(即Bean的名字)區(qū)分。BeanFactory提供單例Bean(singleton scope)與多例Bean的能力(prototype scope),自從Spring2.0后Bean的作用范圍不單單局限于單例與多例,還具有提供請求(request)與對話(session)級別的范圍。BeanFactory是IOC容器注冊Bean的入口,也是Bean配置中心。

Spring官方推薦使用構(gòu)造器注入或者Setter注入(push模式)而不是依賴Spring查找bean的注入模式(pull模式)下面是Spring原文

/* Note that it is generally better to rely on Dependency Injection
 * ("push" configuration) to configure application objects through setters
 * or constructors, rather than use any form of "pull" configuration like a
 * BeanFactory lookup. Spring's Dependency Injection functionality is
 * implemented using this BeanFactory interface and its subinterfaces.
 */

以上內(nèi)容來自BeanFactory的代碼注釋與總結(jié)

查看BeanFactory源碼

public interface BeanFactory {
    // 前綴表示,用于解引用FactoryBean,獲取FactoryBean本身而不是由其創(chuàng)建的bean
    String FACTORY_BEAN_PREFIX = "&";
    
    // 指定名字getBean
    Object getBean(String name) throws BeansException;
    
    // 指定名字和類型getBean
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
    
    // 指定名字getBean,args可以指定bean的構(gòu)造器或者工廠方法的入?yún)?/span>
    Object getBean(String name, Object... args) throws BeansException;
    
    // 指定類型getBean
    <T> T getBean(Class<T> requiredType) throws BeansException;
    
    // 指定類型getBean
    <T> T getBean(Class<T> requiredType) throws BeansException;
    
    // 指定類型獲取bean的Provider,用于按需加載、懶加載等場景
    <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
    
    // 指定類型獲取bean的Provider,ResolvableType作為通用類型入?yún)ⅲ恢С謆ean的集合
    <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
    
    // 判斷是否包含指定名稱的bean 	
    boolean containsBean(String name);
    
    // 判斷指定名稱的bean是否是單例
	boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    
    // 判斷指定名稱的bean是否是多例
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    
    // 判斷bean的名稱與類型是否匹配
    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
    
    // 判斷bean的名稱與類型是否匹配
    boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
    
    // 獲取指定名稱bean的類型
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    
    // 獲取指定名稱bean的類型,是否允許其初始化是為了獲取FactoryBean生成的類型
    Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
    
    // 獲取bean的別名
    String[] getAliases(String name);
}

看完上述代碼后可能會有幾個問題:

  • 什么是FactoryBean?

FactoryBean是一個接口,用于定義實現(xiàn)工廠模式的Bean。它允許我們自定義Bean的實例化邏輯,從而對Bean的創(chuàng)建過程進行更多的控制。FactoryBean可以使得我們在Spring容器中使用非標準的Bean對象。

  • getBean(String name)getBean(String name, Class<T> requiredType)的區(qū)別?

getBean(String name, Class<T> requiredType)getBean(String name)能力基礎(chǔ)上加了類型校驗,保證獲取的bean是期望的類型。如果類型不一致會拋出BeanNotOfRequiredTypeException

BeanFactory首先提供了多個getBean的方法,這也是IOC容器對外的核心能力。其次對Bean的作用范圍(單例or多例)、Bean的類型、Bean的懶加載等提供了能力。

BeanFactory
獲取Bean示例
獲取Bean的provider
Bean作用范圍
獲取Bean的類型
Bean的名稱管理

因篇幅問題不能全部顯示,請點此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2

違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務所王興未律師提供法律服務