java 面試-- java框架-spring

一、spring是如何管理事務的

Spring並非直接管理事務,而是提供了多種事務管理器,他們將事務管理的職責委託給持久化機制所提供的相關平臺框架的事務來實現,spring爲不一樣的事務API提供一致的編程模型。
Spring的事務分爲編程式事務和聲明式事務,編程式事務容許用戶在代碼中精肯定義事務的邊界,而聲明式事務(基於AOP)有助於將用戶操做與事務規則進行解耦。
Spring提供兩種方式的編程式事務管理,分別是使用transactionTemplate(線程安全的)和platformTransactionManager。html

 

二、什麼是AOP,AOP的做用是什麼?

AOP,面向切面編程,就是把可重用的功能提取出來,而後將這些通用功能在合適的時候織入到應用程序中,好比事務管理、權限控制、日誌記錄、性能統計等。
AOP的做用
AOP並無幫助咱們解決任何新的問題,它只是提供了一種更好的辦法,可以用更少的工做量來解決現有的一些問題,使得系統更加健壯,可維護性更好。java

三、說一下spring的bean的生命週期?

1)Spring一般經過配置文件定義Bean
2)初始化Bean。 經過方法或則經過接口
3)Bean的調用 。經過BeanFactoy 或則 ApplicationContext
4)Bean的銷燬 。經過方法或則接口來實現web


四、過濾器、攔截器、AOP的區別?

過濾器 做用於最外層,根據url配置進行過濾能拿到request,response,不能拿處處理的controller的類和方法信息,spring

攔截器能夠拿到類和方法信息,拿不到方法的參數,編程

AOP能夠拿到類,方法以及方法裏的參數設計模式

 
5. Spring MVC 的運行流程
 
   > 若一個請求匹配 DispatcherServlet 的請求映射路徑(在 web.xml 中指定), WEB 容器將該請求轉交給 DispatcherServlet 處理
 
   > DispatcherServlet 接收到請求後, 將根據請求信息(包括 URL、HTTP 方法、請求頭、請求參數、Cookie 等)及 HandlerMapping 的配置找處處理請求 的處理器(Handler).
            可將 HandlerMapping 當作路由控制器,將 Handler 當作 目標主機。
 
   > 當 DispatcherServlet 根據 HandlerMapping 獲得對應當前請求的 Handler 後,經過 HandlerAdapter 對 Handler 進行封裝,再以統一的適配器 接口調用 Handler。
 
   > 處 理 器 完 成 業 務 邏 輯 的 處 理 後 將 返 回 一 個 ModelAndView 給DispatcherServlet, ModelAndView 包含了視圖邏輯名和模型數據信息
 
  > DispatcherServlet 藉助 ViewResoler 完成邏輯視圖名到真實視圖 對象的解析
 
  > 獲得真實視圖對象 View 後, DispatcherServlet 使用這個 View 對 ModelAndView 中的模型數據進行視圖渲染
    

 

8.Spring的核心類有哪些,各有什麼做用?

BeanFactory:產生一個新的實例,能夠實現單例模式安全

BeanWrapper:提供統一的get及set方法網絡

ApplicationContext:提供框架的實現,包括BeanFactory的全部功能session

 

九、什麼是Spring框架?Spring框架有哪些主要模塊?app

        Spring框架是一個爲Java應用程序的開發提供了綜合、普遍的基礎性支持的Java平臺。Spring幫助開發者解決了開發中基礎性的問題,使得開發人員能夠專一於應用程序的開發。Spring框架自己亦                    是按照設計模式精心打造,這使得咱們能夠在開發環境中安心的集成Spring框架,沒必要擔憂Spring是如何在後臺進行工做的。

       Spring框架至今已集成了20多個模塊。這些模塊主要被分以下圖所示的核心容器、數據訪問/集成,、Web、AOP(面向切面編程)、工具、消息和測試模塊。

 

十、使用Spring框架能帶來哪些好處?

下面列舉了一些使用Spring框架帶來的主要好處:

          Dependency Injection(DI) 方法使得構造器和JavaBean properties文件中的依賴關係一目瞭然。
          與EJB容器相比較,IoC容器更加趨向於輕量級。這樣一來IoC容器在有限的內存和CPU資源的狀況下進行應用程序的開發和發佈就變得十分有利。
         Spring並無閉門造車,Spring利用了已有的技術好比ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其餘視圖技術。
Spring框架是按照模塊的形式來組織的。由包和類的編號就能夠看出其所屬的模塊,開發者僅僅須要選用他們須要的模塊便可。
要測試一項用Spring開發的應用程序十分簡單,由於測試相關的環境代碼都已經囊括在框架中了。更加簡單的是,利用JavaBean形式的POJO類,能夠很方便的利用依賴注入來寫入測試數據。
         Spring的Web框架亦是一個精心設計的Web MVC框架,爲開發者們在web框架的選擇上提供了一個除了主流框架好比Struts、過分設計的、不流行web框架的之外的有力選項。
Spring提供了一個便捷的事務管理接口,適用於小型的本地事物處理(好比在單DB的環境下)和複雜的共同事物處理(好比利用JTA的複雜DB環境)。

 

三、什麼是控制反轉(IOC)?什麼是依賴注入?

         控制反轉是應用於軟件工程領域中的,在運行時被裝配器對象來綁定耦合對象的一種編程技巧,對象之間耦合關係在編譯時一般是未知的。在傳統的編程方式中,業務邏輯的流程是由應用程序中的早已被設定好關聯關係的對象來決定的。在使用控制反轉的狀況下,業務邏輯的流程是由對象關係圖來決定的,該對象關係圖由裝配器負責實例化,這種實現方式還能夠將對象之間的關聯關係的定義抽象化。而綁定的過程是經過「依賴注入」實現的。

         控制反轉是一種以給予應用程序中目標組件更多控制爲目的設計範式,並在咱們的實際工做中起到了有效的做用。

   依賴注入是在編譯階段還沒有知所需的功能是來自哪一個的類的狀況下,將其餘對象所依賴的功能對象實例化的模式。這就須要一種機制用來激活相應的組件以提供特定的功能,因此依賴注入是控制反轉的基礎。不然若是在組件不受框架控制的狀況下,框架又怎麼知道要建立哪一個組件?

在Java中依然注入有如下三種實現方式:

構造器注入
Setter方法注入
接口注入

四、請解釋下Spring框架中的IoC?

           Spring中的 org.springframework.beans 包和 org.springframework.context包構成了Spring框架IoC容器的基礎。

           BeanFactory 接口提供了一個先進的配置機制,使得任何類型的對象的配置成爲可能。ApplicationContex接口對BeanFactory(是一個子接口)進行了擴展,在BeanFactory的基礎上添加了其餘功能,好比與Spring的AOP更容易集成,也提供了處理message resource的機制(用於國際化)、事件傳播以及應用層的特別配置,好比針對Web應用的WebApplicationContext。

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具體實現,用來包裝和管理前面提到的各類bean。BeanFactory接口是Spring IoC 容器的核心接口。

 

 

五、BeanFactory和ApplicationContext有什麼區別?

         BeanFactory 能夠理解爲含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請求時將對應的bean實例化。

          BeanFactory還能在實例化對象的時生成協做類之間的關係。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含了bean生命週期的控制,調用客戶端的初始化方法(initialization methods)和銷燬方法(destruction methods)。

從表面上看,application context如同bean factory同樣具備bean定義、bean關聯關係的設置,根據請求分發bean的功能。但application context在此基礎上還提供了其餘的功能。

提供了支持國際化的文本消息
統一的資源文件讀取方式
已在監聽器中註冊的bean的事件
如下是三種較常見的 ApplicationContext 實現方式:

1 、ClassPathXmlApplicationContext:從classpath的XML配置文件中讀取上下文,並生成上下文定義。應用程序上下文從程序環境變量中取得。
 
 
ApplicationContext context =  new  ClassPathXmlApplicationContext(「bean.xml」);
2 、FileSystemXmlApplicationContext :由文件系統中的XML配置文件讀取上下文。
 
ApplicationContext context =  new  FileSystemXmlApplicationContext(「bean.xml」);
3 、XmlWebApplicationContext:由Web應用的XML文件讀取上下文。
 
 

十、請解釋Spring Bean的生命週期?

            Spring Bean的生命週期簡單易懂。在一個bean實例被初始化時,須要執行一系列的初始化操做以達到可用的狀態。一樣的,當一個bean不在被調用時須要進行相關的析構操做,並從bean容器中移除。

            Spring bean factory 負責管理在spring容器中被建立的bean的生命週期。Bean的生命週期由兩組回調(call back)方法組成。

           初始化以後調用的回調方法。
           銷燬以前調用的回調方法。
          Spring框架提供瞭如下四種方式來管理bean的生命週期事件:

         InitializingBean和DisposableBean回調接口
         針對特殊行爲的其餘Aware接口
         Bean配置文件中的Custom init()方法和destroy()方法
         @PostConstruct和@PreDestroy註解方式
         使用customInit()和 customDestroy()方法管理bean生命週期的代碼樣例以下:

 

< beans >
     < bean  id = "demoBean"  class = "com.howtodoinjava.task.DemoBean"
             init-method = "customInit"  destroy-method = "customDestroy" ></ bean >
</ beans >

 

 

十一、Spring Bean的做用域之間有什麼區別?

         Spring容器中的bean能夠分爲5個範圍。全部範圍的名稱都是自說明的,可是爲了不混淆,仍是讓咱們來解釋一下:

singleton:這種bean範圍是默認的,這種範圍確保無論接受到多少個請求,每一個容器中只有一個bean的實例,單例的模式由bean factory自身來維護。prototype:原形範圍與單例範圍相反,爲每個bean請求提供一個實例。request:在請求bean範圍內會每個來自客戶端的網絡請求建立一個實例,在請求完成之後,bean會失效並被垃圾回收器回收。Session:與請求範圍相似,確保每一個session中有一個bean的實例,在session過時後,bean會隨之失效。global-session:global-session和Portlet應用相關。當你的應用部署在Portlet容器中工做時,它包含不少portlet。若是你想要聲明讓全部的portlet共用全局的存儲變量的話,那麼這全局變量須要存儲在global-session中。全局做用域與Servlet中的session做用域效果相同。

相關文章
相關標籤/搜索