Spring BeanFactory與ApplicationContext 介紹
目錄
一、BeanFactory
Spring 使用 BeanFactory 來例項化、配置和管理 Bean,它是IOC容器的核心介面,主要定義了getBean方法。
BeanFactory 只能管理單例(Singleton)Bean 的生命週期。它不能管理非單例Bean的生命週期,這是因為原型Bean例項被建立之後便被傳給了客戶端,容器失去了對它們的引用。
BeanFactory有著龐大的繼承、實現體系,有眾多的子介面、實現類。來看一下BeanFactory的基本類體系結構(介面為主):
BeanFactory最常見的實現類有 XmlBeanFactory 和 DefaultListableBeanFactory ,可以從classpath或檔案系統等獲取資源。
具體獲取Bean程式碼如下(beans.xml檔案和實體類程式碼自己寫):
//通過資源載入器獲取載入檔案資源
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource resource = resolver.getResource("beans/beans.xml");
System.out.println(resource.getURL());
//獲取beanFactory二種方式
//方式一 XmlBeanFactory廢棄,不建議使用
BeanFactory factory1 = new XmlBeanFactory(resource);
//方式二 DefaultListableBeanFactory
DefaultListableBeanFactory factory2 = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory2);
reader.loadBeanDefinitions(resource);
Car car = (Car)factory2.getBean("car");//第一次呼叫factory.getBean方法才會呼叫預設構造器生成例項
//spring在DefaultSingletonBeanRegistry類中提供了快取單例bean,用HashMap實現的,以beanName為key進行儲存,所以第二次get物件的時候不會呼叫構造器
Car car2 = (Car)factory2.getBean("car");
System.out.println(car==car2);//true,bean定義的預設是單例
總結:
1、XmlBeanFactory通過Resource裝載Spring配置資訊冰啟動IoC容器,然後就可以通過factory.getBean從IoC容器中獲取Bean了。
2、通過BeanFactory啟動IoC容器時,並不會初始化配置檔案中定義的Bean,初始化動作發生在第一個呼叫時。
3、對於單例項(singleton)的Bean來說,BeanFactory會快取Bean例項,所以第二次使用getBean時直接從IoC容器快取中獲取Bean。
二、ApplicationContext(應用上下文)
ApplicationContext,也是介面,由BeanFactory派生而來,它繼承了BeanFactory的基本功能,同時也擴充套件了部分功能。
在BeanFactory中,很多功能需要以程式設計的方式實現,而在ApplicationContext中則可以通過配置實現。
BeanFactory面向的是Spring框架,而ApplicationContext面向的是使用Spring框架的開發者。
相較於BeanFactorty,ApplicationContext提供了以下的功能:
(1)MessageSource, 提供國際化的訊息訪問
(2)資源訪問,如URL和檔案
(3)事件傳播特性,即支援aop特性
(4)載入多個(有繼承關係)上下文 ,使得每一個上下文都專注於一個特定的層次,比如應用的web層
ApplicationContext的實現類主要有:
1、ClassPathXmlApplicationContext
配置檔案放在類路徑上
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans/beans.xml");
Car car = (Car)applicationContext.getBean("car");
2、FileSystemXmlApplicationContext
配置檔案放在檔案系統下
ApplicationContext ac = new FileSystemXmlApplicationContext("beans/beans.xml");
Car car2 = (Car)ac.getBean("car");
3、AnnotationConfigApplicationContext
@Configuration註解獲取ApplicaitonContext方式
ApplicationContext ac = new AnnotationConfigApplicationContext(Car.class);
Car car2 = (Car)ac.getBean("car");
BeanFactroy與ApplicationContext的區別:
(例項化Bean的時機不同)BeanFactroy採用的是延遲載入形式來注入Bean的,即只有在使用到某個Bean時(呼叫getBean()),才對該Bean進行載入例項化,這樣,我們就不能發現一些存在的Spring的配置問題。而ApplicationContext則相反,它是在容器啟動時,一次性建立了所有的Bean。這樣,在容器啟動時,我們就可以發現Spring中存在的配置錯誤。 相對於基本的BeanFactory,ApplicationContext 唯一的不足是佔用記憶體空間。當應用程式配置Bean較多時,程式啟動較慢。
參考:https://www.cnblogs.com/xiaoxi/p/5846416.html
相關文章
- spring beanFactory與ApplicationContext區別SpringBeanAPPContext
- Spring BeanFactory和ApplicationContextSpringBeanAPPContext
- Spring(ApplicationContext&BeanFactory)SpringAPPContextBean
- spring的BeanFactory和ApplicationContextSpringBeanAPPContext
- ApplicationContext 與 BeanFactory 區別APPContextBean
- ApplicationContext 詳細介紹APPContext
- BeanFactory 和 ApplicationContext 的區別BeanAPPContext
- Spring 中的 BeanFactory 與 FactoryBeanSpringBean
- Spring之ApplicationContextSpringAPPContext
- 面試還不知道BeanFactory和ApplicationContext的區別?面試BeanAPPContext
- 4、Spring+AOP介紹與使用Spring
- 為什麼大多數IOC容器使用ApplicationContext,而不用BeanFactoryAPPContextBean
- Spring容器——BeanFactory詳解SpringBean
- Spring AOT介紹Spring
- Spring Cache 介紹Spring
- Spring WebApplicationContext 介紹SpringWebAPPContext
- Spring AOP介紹Spring
- Spring之BeanFactory:解析getBean()方法SpringBean
- 【Spring】BeanFactory 解析 bean 詳解SpringBean
- spring框架的介紹Spring框架
- Spring Data JDBC介紹SpringJDBC
- Spring Cloud認知學習(一):Spring Cloud介紹與Eureka使用SpringCloud
- 掌握Spring中的beanfactory與factorybean有什麼好處?SpringBean
- spring applicationContext家族層級梳理SpringAPPContext
- Spring框架之IOC介紹Spring框架
- (2)Spring Cloud版本介紹SpringCloud
- Spring Shell入門介紹Spring
- Spring bean詳細介紹SpringBean
- Spring AOP 增強介紹Spring
- Spring Boot學習(一)——Spring Boot介紹Spring Boot
- Spring中的BeanFactory與FactoryBean看這一篇就夠了SpringBean
- Spring 原始碼(3)Spring BeanFactory 是怎麼建立的?Spring原始碼Bean
- Spring Reactor基本介紹和案例SpringReact
- Spring的Factories機制介紹Spring
- Java之Spring Cloud概念介紹JavaSpringCloud
- Spring Cloud 中的元件介紹SpringCloud元件
- 介紹Spring Cloud斷路器SpringCloud
- 陪你解讀Spring Batch(一)Spring Batch介紹SpringBAT