1. 程式人生 > >關於Spring IOC容器

關於Spring IOC容器

版權 spm size align cto ccf 文件絕對路徑 推薦 sse

註:都是從net的各個角落找到的,如涉及到版權請聯系我,君並無意冒犯。

1,spring容器的三種加載方式:

(1)FileSystemXmlApplicationContext
這個方法是從文件絕對路徑加載配置文件,例如:
ApplicationContext ctx = new FileSystemXmlApplicationContext( "G:/Test/applicationcontext.xml ");
如果在參數中寫的不是絕對路徑,那麽方法調用的時候也會默認用絕對路徑來找,我測試的時候發現默認的絕對路徑是eclipse所在的路徑。
采用絕對路徑的話,程序的靈活性就很差了,所以這個方法一般不推薦。(如果要使用classpath路徑,需要加入前綴classpath: )
(2)ClassPathXmlApplicationContext


這個方法是從classpath下加載配置文件(適合於相對路徑方式加載),例如:
ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationcontext.xml ");
該方法參數中classpath: 前綴是不需要的,默認就是指項目的classpath路徑下面;

這也就是說用ClassPathXmlApplicationContext時默認的根目錄是在WEB-INF/classes下面,而不是項目根目錄。這個需要註意!

(3)XmlWebApplicationContext
專為web工程定制的方法,推薦Web項目中使用。例如:
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

2,關於applicationContext與beanFactory的區別:

(口語)applicationContext是對beanFactory的強化,增加了很多功能。

(專業) --a) BeanFactory負責讀取bean配置文檔,管理bean的加載,實例化,維護bean之間的依賴關系,負責bean的聲明周期。

--b)ApplicationContext除了提供上述BeanFactory所能提供的功能之外,還提供了更完整的框架功能:

1. 國際化支持
2. 資源訪問:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”


3. 事件傳遞:通過實現ApplicationContextAware接口

(總結)Spring的IoC容器就是一個實現了BeanFactory接口的可實例化類。事實上,Spring提供了兩種不同的容器:一種是最基本的BeanFactory,另一種是擴展的 ApplicationContext。BeanFactory 僅提供了最基本的依賴註入支持,而 ApplicationContext 則擴展了BeanFactory ,提供了更多的額外功能。

(區別)BeanFactory在初始化容器時,並未實例化Bean,直到第一次訪問某個Bean時才實例目標Bean;而ApplicationContext則在初始化應用上下文時就實例化所有的單實例 的Bean。因此ApplicationContext的初始化時間會比BeanFactory稍長一些.

關於Spring IOC容器