Spring容器會使用XML解析器讀取改屬性值,並利用反射來創建該實現類的實例。
Spring有兩個核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。它們都可以代表Spring容器。Spring容器是生成Bean實例的工廠,並管理容器中的Bean。Bean是Spring管理的基本單元。
創建BeanFactory實例時,必須使用Spring容器管理的Bean詳細配置信息(XML配置文件)。XML配置文件通常使用Resource對象傳入。
Resource接口是Spring提供的資源訪問接口,通過使用該接口,Spring能以簡單,透明的方式訪問子盤,類路徑,已經網絡上的資源。
大部分Java EE應用,在啓動Web應用時自動加載Application實例。對於獨立的應用程序,可通過如下方法來實例化BeanFactory。
1.
//搜索當前文件路徑下的beans.xml文件,創建Resource對象
InputStreamResource isr = new FileSystemResource("beans.xml");
//以Resource對象作爲參數,創建BeanFactory實例
XmlBeanFactory factory = new XmlBeanFactory(isr);
2.
//搜索類加載路徑,以類加載路徑下的beans.xml文件創建Resource對象
ClassPathResource res = new ClassPathResource("beans.xml");
//以Resource對象爲參數,創建BeanFactory實例
XmlBeanFactory factory = new XmlBeanFactory(res);
ApplicationContext允許以聲明式方式操作容器,無需手動創建它。可利用如ContextLoader得支持類,在Web應用啓動時自動創建ApplicationContext。當然,也可以採用編程方式創建ApplicationContext.
除了提供BeanFactory所支持的全部功能外,ApplicationContext還有如下額外功能:
1.ApplicationContext繼承MessageSource接口,因此提供國際化支持。
2.資源訪問,比如URL和文件
3.事件機制
4.載入多個配置文件。
ApplicationContext經常用到的三個實現:
1.ClassPathXmlApplicationContext:從類路徑中的XML文件載入上下文定義信息。把上下文定義文件當成類路徑資源。
2.FileSystemXmlApplicationContext:從文件系統中的XML文件載入上下文定義信息。
3.XmlWebApplicationContext:從Web系統中的XML文件載入上下文定義信息。
BeanFactory延遲加載所有的Bean,知道getBean()方法被調用時,Bean才被創建。
當系統創建ApplicationContext容器時,默認會預初始化所有singleton Bean (prototype類型Bean當需要的時候纔會創建)。