Java框架部分---面試題
說說Spring?
Spring的核心是控制反轉、依賴注入,Aop(面向切面)相當於把每個bean與bean之間的關係交給第 三方容器進行管理.
說SpringIOC、SpringAOP?
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。