1. 程式人生 > >Java框架部分---面試題

Java框架部分---面試題

說說Spring

Spring的核心是控制反轉、依賴注入,Aop(面向切面)相當於把每個bean與bean之間的關係交給第 三方容器進行管理.

SpringIOCSpringAOP?

SpringIOC ,其實就是依賴注入、控制反轉。相當於把每個bean與bean之間的關係交給第三方容器管理。而這個容器就是spring

SpringAOP 面向切面的程式設計,或AOP,是一種程式設計技術,允許程式模組化橫向切割關注點,或橫切典型的責任劃分,如日誌和事務管理。 SpringAop 就是用 Javva的動態代理

Spring的底層實現機制是什麼?

使用Demo4j(解析XML)+Java反射機制

Demo4j 其實就是解析XML。使用反射機制例項化bean。

 

SpringAOP用到了什麼代理?

JDK動態代理:對實現了介面的類生成代理

CGLib代理機制:對類生成代理

動態代理與靜態代理區別?

靜態代理:由程式設計師建立或特定工具自動生成原始碼,再對其編譯。在程式執行前,代理類的.class檔案就已經存在了。
動態代理:在程式執行時,運用反射機制動態建立而成。

Spring注入有那些方式?

Set注入

構造器注入

靜態工廠的方法注入

例項工廠的方法注入

Spring有那些註解?

@Autowired(按型別注入)

@Service(標示為注入為服務層)

@Resource(按名稱注入)

@Controller(標識控制器bean id)

@RequestMapping(表示對映URL路徑)

簡述Spring的優缺點?

      優點

  1.降低了元件之間的耦合性 ,實現了軟體各層之間的解耦

  2.可以使用容易提供的眾多服務,如事務管理,訊息服務等

  3.容器提供單例模式支援

  4.容器提供了AOP技術,利用它很容易實現如許可權攔截,執行期監控等功能

  5.容器提供了眾多的輔助類,能加快應用的開發

  6.spring對於主流的應用框架提供了整合支援,如hibernate,JPA,Struts等

  7.spring屬於低侵入式設計,程式碼的汙染極低

  8.獨立於各種應用伺服器

  9.spring的DI機制降低了業務物件替換的複雜性

  10.Spring的高度開放性,並不強制應用完全依賴於Spring,開發者可以自由選擇spring的部分或全部

   缺點:

使用到了大量反射機制。反射機制非常佔記憶體,

SpringMVC工程流程

1. 使用者向伺服器傳送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲;

2. DispatcherServlet對請求URL進行解析,得到請求資源識別符號(URI)。然後根據該URI,呼叫HandlerMapping獲得該Handler配置的所有相關的物件(包括Handler物件以及Handler物件對應的攔截器),最後以HandlerExecutionChain物件的形式返回;

3. DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter。(附註:如果成功獲得HandlerAdapter後,此時將開始執行攔截器的preHandler(...)方法)

4.  提取Request中的模型資料,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:

      HttpMessageConveter: 將請求訊息(如Json、xml等資料)轉換成一個物件,將物件轉換為指定的響應資訊

      資料轉換:對請求訊息進行資料轉換。如String轉換成Integer、Double等

      資料根式化:對請求訊息進行資料格式化。 如將字串轉換成格式化數字或格式化日期等

      資料驗證: 驗證資料的有效性(長度、格式等),驗證結果儲存到BindingResult或Error中

5.  Handler執行完成後,向DispatcherServlet 返回一個ModelAndView物件;

6.  根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet ;

7. ViewResolver 結合Model和View,來渲染檢視

8. 將渲染結果返回給客戶端。

SpringMVC工作流程描述

 為什麼SpringMVC只使用一個Servlet(DispatcherServlet)來處理所有請求?

詳細見J2EE設計模式-前端控制模式

Spring為什麼要結合使用HandlerMapping以及HandlerAdapter來處理Handler?

符合面向物件中的單一職責原則,程式碼架構清晰,便於維護,最重要的是程式碼可複用性高。如HandlerAdapter可能會被用於處理多種Handler。