java(框架)面試要點6

  • BeanFactory 和 ApplicationContext 有什麼區別   

第一, BeanFactoryhtml

BeanFactory其實是實例化,配置和管理衆多bean的容器。 這些bean一般會彼此合做,於是它們之間會產生依賴。 BeanFactory使用的配置數據能夠反映這些依賴關係中 (一些依賴可能不像配置數據同樣可見,而是在運行期做爲bean之間程序交互的函數)。web

一個BeanFactory能夠用接口org.springframework.beans.factory.BeanFactory表示, 這個接口有多個實現。 最常使用的的簡單的eanFactory實現是org.springframework.beans.factory.xml.XmlBeanFactory。 (這裏提醒一下:ApplicationContext是BeanFactory的子類, 因此大多數的用戶更喜歡使用ApplicationContext的XML形式)。spring

要建立XmlBeanFactory,須要傳遞一個org.springframework.core.io.Resource實例個構造函數。此Resource對象提供XML文件給工廠。編程

Spring提供了有用的Resource實現。設計模式

org.springframework.core.io.ByteArrayResource定義內容有一組字節給定的資源app

org.springframework.core.io.ClassPathResource定義能夠從classpath提取的資源框架

org.springframework.core.io.DescriptiveResource定義包含資源描述符可是實際沒有能夠讀取的資源eclipse

org.springframework.core.io.FileSystemRescource定義能夠從文件系統提取的資源函數

org.springframework.core.io.InputStreamResource定義能夠從輸入流提取的資源測試

org.springframework.web.portlet.context.PortletContextResource定義可用在portlet上下文的資源

org.springframework.web.portlet.context.suport.servletContextRescource定義可用在Servlet上下文中的資源

org.springframework.core.io.UrlRescource定義可從給定的URl提取的資源

ApplicationContext 和Resource 路徑

1.ClassPathResource:

只有一種方式new ClassPathResource("applicationContext.xml");

取得Resource接口的實例 後,可使用getFile(),getInputStream()等方法來操做資源文件Resource 接口的事例只是資源文件一個抽象表明,指定的資源有可能不存在,可使用exists()進行測試。

 

以文件系統絕對路徑和相對路徑的兩種方式進行訪問;

如:

(1)絕對路徑:Resource resource = context.getResource("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml")。

(2)相對路徑:可是若是使用相對路徑要注意其根目錄。例如在eclipse中,它的根目錄就是你工程目錄做爲你的根目錄。Resource resource = context.getResource("src/applicationContext.xml")。

 

2.FileSystemResource:有兩種方式;
3.ServletContextResource:經過 ServletContextResource 以相對於Web應用根目錄的方式進行訪問。如:Resource resource = context.getResource("src/applicationContext.xml")。

 

4.UrlResource :經過Java.NET.URL來訪問資源,固然它也支持File格式:"file:"

 

 

第二,ApplicationContext

beans包提供了以編程的方式管理和操控bean的基本功能,而context包增長了ApplicationContext,它以一種更加面向框架的方式加強了BeanFactory的功能。多數用戶能夠以一種徹底的聲明式方式來使用ApplicationContext,甚至不用去手工建立它,可是卻去依賴像ContextLoader的支持類,在J2EE的Web應用的啓動進程中用它啓動ApplicationContext。固然,這種狀況下還能夠以編程的方式建立一個ApplicationContext。
Context包的基礎是位於org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而來,提供BeanFactory全部的功能。爲了以一種更像面向框架的方式工做,context包使用分層和有繼承關係的上下文類,包括:

1.MessageSource,提供對i18n消息的訪問;

2.資源訪問,好比URL和文件;

3.事件傳遞給實現了ApplicationListener接口的bean;

4.載入多個(有繼承關係)上下文類,使得每個上下文類都專一於一個特定的層次,好比應用的Web層

在ApplicationContext的諸多實現中,有三個常常用到:

1。ClassPathXmlApplicationContext:從類路徑中的XML文件載入上下文定義信息,把上下文定義文件看成類路徑資源。

2。FileSystemXmlApplicationContext:從文件系統中的XML文件載入上下文定義信息。

3。XmlWebApplicationContext:從Web系統中的XMl文件載入上下文信息。

例如:

//經過ApplicationContext來獲取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
//經過Bean的id來獲取bean
Hello hello=(Hello)actx.getBean("HelloWorld");

 

不管是那種實現,都是用getBean()方法,這不要奇怪,由於ApplicationContext接口擴展自BeanFactory接口。

應用上下文與Bean工廠的另外一個重要的區別就是關於單實例Bean是如何載入的。Bean工廠延遲載入全部的Bean,直到getbean()方法被調用是Bean才被建立。應用上下文則會在上下文啓動後預載入全部的單實例Bean。經過預載入單實例bean ,確保當你須要的時候,你就不用等待,由於它們已經建立好了。

在spring中,兩個最基本最重要的包是 org.springframework.beans 和 org.springframework.context. 這兩個包中的代碼爲Spring的反向控制 特性(也叫做依賴注射)提供了基礎。

第一, BeanFactory

BeanFactory其實是實例化,配置和管理衆多bean的容器。 這些bean一般會彼此合做,於是它們之間會產生依賴。 BeanFactory使用的配置數據能夠反映這些依賴關係中 (一些依賴可能不像配置數據同樣可見,而是在運行期做爲bean之間程序交互的函數)。

一個BeanFactory能夠用接口org.springframework.beans.factory.BeanFactory表示, 這個接口有多個實現。 最常使用的的簡單的eanFactory實現是org.springframework.beans.factory.xml.XmlBeanFactory。 (這裏提醒一下:ApplicationContext是BeanFactory的子類, 因此大多數的用戶更喜歡使用ApplicationContext的XML形式)。

要建立XmlBeanFactory,須要傳遞一個org.springframework.core.io.Resource實例個構造函數。此Resource對象提供XML文件給工廠。

Spring提供了有用的Resource實現。

org.springframework.core.io.ByteArrayResource定義內容有一組字節給定的資源

org.springframework.core.io.ClassPathResource定義能夠從classpath提取的資源

org.springframework.core.io.DescriptiveResource定義包含資源描述符可是實際沒有能夠讀取的資源

org.springframework.core.io.FileSystemRescource定義能夠從文件系統提取的資源

org.springframework.core.io.InputStreamResource定義能夠從輸入流提取的資源

org.springframework.web.portlet.context.PortletContextResource定義可用在portlet上下文的資源

org.springframework.web.portlet.context.suport.servletContextRescource定義可用在Servlet上下文中的資源

org.springframework.core.io.UrlRescource定義可從給定的URl提取的資源

ApplicationContext 和Resource 路徑

1.ClassPathResource:

只有一種方式new ClassPathResource("applicationContext.xml");

取得Resource接口的實例 後,可使用getFile(),getInputStream()等方法來操做資源文件Resource 接口的事例只是資源文件一個抽象表明,指定的資源有可能不存在,可使用exists()進行測試。

 

以文件系統絕對路徑和相對路徑的兩種方式進行訪問;

如:

(1)絕對路徑:Resource resource = context.getResource("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml")。

(2)相對路徑:可是若是使用相對路徑要注意其根目錄。例如在eclipse中,它的根目錄就是你工程目錄做爲你的根目錄。Resource resource = context.getResource("src/applicationContext.xml")。

 

2.FileSystemResource:有兩種方式;
3.ServletContextResource:經過 ServletContextResource 以相對於Web應用根目錄的方式進行訪問。如:Resource resource = context.getResource("src/applicationContext.xml")。

 

4.UrlResource :經過Java.NET.URL來訪問資源,固然它也支持File格式:"file:"

 

 

第二,ApplicationContext

beans包提供了以編程的方式管理和操控bean的基本功能,而context包增長了ApplicationContext,它以一種更加面向框架的方式加強了BeanFactory的功能。多數用戶能夠以一種徹底的聲明式方式來使用ApplicationContext,甚至不用去手工建立它,可是卻去依賴像ContextLoader的支持類,在J2EE的Web應用的啓動進程中用它啓動ApplicationContext。固然,這種狀況下還能夠以編程的方式建立一個ApplicationContext。
Context包的基礎是位於org.springframework.context包中的ApplicationContext接口。它是由BeanFactory接口集成而來,提供BeanFactory全部的功能。爲了以一種更像面向框架的方式工做,context包使用分層和有繼承關係的上下文類,包括:

1.MessageSource,提供對i18n消息的訪問;

2.資源訪問,好比URL和文件;

3.事件傳遞給實現了ApplicationListener接口的bean;

4.載入多個(有繼承關係)上下文類,使得每個上下文類都專一於一個特定的層次,好比應用的Web層

在ApplicationContext的諸多實現中,有三個常常用到:

1。ClassPathXmlApplicationContext:從類路徑中的XML文件載入上下文定義信息,把上下文定義文件看成類路徑資源。

2。FileSystemXmlApplicationContext:從文件系統中的XML文件載入上下文定義信息。

3。XmlWebApplicationContext:從Web系統中的XMl文件載入上下文信息。

例如:

//經過ApplicationContext來獲取Spring的配置文件
ApplicationContext actx=new FileSystemXmlApplicationContext("applicationContext.xml.xml");
//經過Bean的id來獲取bean
Hello hello=(Hello)actx.getBean("HelloWorld");

 

不管是那種實現,都是用getBean()方法,這不要奇怪,由於ApplicationContext接口擴展自BeanFactory接口。

應用上下文與Bean工廠的另外一個重要的區別就是關於單實例Bean是如何載入的。Bean工廠延遲載入全部的Bean,直到getbean()方法被調用是Bean才被建立。應用上下文則會在上下文啓動後預載入全部的單實例Bean。經過預載入單實例bean ,確保當你須要的時候,你就不用等待,由於它們已經建立好了。

 

下面我總結下載入配置文件的方法:
ApplicationContext

1. ClassPathXmlApplicationContext 編譯路徑總有三種方式:
1) ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
2)ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");

3)ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
2. FileSystemXmlApplicationContext用文件系統的路徑總有兩種相對與絕對路徑
1) ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml");
2) ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
3. XmlWebApplicationContext 是專爲Web工程定製的。
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );

 

下面我總結下載入配置文件的方法:
ApplicationContext

1. ClassPathXmlApplicationContext 編譯路徑總有三種方式:
1) ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
2)ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");

3)ApplicationContext factory=new ClassPathXmlApplicationContext("file:E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
2. FileSystemXmlApplicationContext用文件系統的路徑總有兩種相對與絕對路徑
1) ApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml");
2) ApplicationContext factory=new FileSystemXmlApplicationContext("E:/Workspaces/MyEclipse 8.5/Hello/src/applicationContext.xml");
3. XmlWebApplicationContext 是專爲Web工程定製的。
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );

  • Spring Bean 的生命週期

    

  

 

  • Spring IOC 如何實現

    https://www.cnblogs.com/ITtangtang/p/3978349.html

  • 說說 Spring AOP
  • Spring AOP 實現原理
  • 動態代理(cglib 與 JDK)
  • Spring 事務實現方式
  • Spring 事務底層原理
  • 如何自定義註解實現功能

    

  • Spring MVC 運行流程
  • Spring MVC 啓動流程
  • Spring 的單例實現原理
  • Spring 框架中用到了哪些設計模式
  • Spring 其餘產品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)
相關文章
相關標籤/搜索