IOC:Java程序員都知道:java程序中的每一個業務邏輯至少須要兩個或以上的對象來協做完成,一般,每一個對象在使用他的合做對象時,本身均要使用像new object() 這樣的語法來完成合做對象的申請工做。你會發現:對象間的耦合度高了。而IOC的思想是:Spring容器來實現這些相互依賴對象的建立、協調工做。對象只須要關係業務邏輯自己就能夠了。從這方面來講,對象如何獲得他的協做對象的責任被反轉了(IOC、DI)。IoC的一個重點是在系統運行中,動態的向某個對象提供它所須要的其餘對象。這一點是經過DI(Dependency Injection,依賴注入)來實現的, Java 1.3以後一個重要特徵是反射(reflection),它容許程序在運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是經過反射來實現注入的.前端
AOP:其實依賴注入的思想也很簡單,它是經過反射機制實現的,在實例化一個類時,它經過反射調用類中set方法將事先保存在HashMap中的類屬性注入到類中.java
AOP就是增長了一種解耦的角度。mysql
解耦,這是 OOP 常常提到的詞。爲了讓各個模塊更加獨立,有人經過面向對象設計出一堆模式剝離代碼下降耦合。
有些人在剝離代碼的時候發現不少「方面」的代碼有模式可循,但只用面向對象的思想沒法優雅的解決。程序員
一個Bean包括id,type,和Properties。
接下來Spring 就開始加載咱們的配置文件了,將咱們配置的信息保存在一個HashMap中,HashMap的key就是Bean 的 Id ,HasMap 的value是這個Bean,只有這樣咱們才能經過context.getBean("animal")這個方法得到Animal這個類。咱們都知道Spirng能夠注入基本類型,並且能夠注入像List,Map這樣的類型,接下來就讓咱們以Map爲例看看Spring是怎麼保存的吧 web
流程
一、用戶發送請求至前端控制器DispatcherServlet
二、DispatcherServlet收到請求調用HandlerMapping處理器映射器。
三、處理器映射器找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。
四、DispatcherServlet調用HandlerAdapter處理器適配器
五、HandlerAdapter通過適配調用具體的處理器(Controller,也叫後端控制器)。
六、Controller執行完成返回ModelAndView
七、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
八、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
九、ViewReslover解析後返回具體View
十、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。
十一、DispatcherServlet響應用戶spring
原理: 1.讀取並解析配置文件 2.讀取並解析映射信息,建立SessionFactory3.打開Session 4.建立事務Transation 5.持久化操做 6.提交事務 7.關閉Session 8.關閉SesstionFactorysql
爲何要用: 1. 對JDBC訪問數據庫的代碼作了封裝,大大簡化了數據訪問層繁瑣的重複性代碼。 2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工做 3. hibernate使用Java反射機制,而不是字節碼加強程序來實現透明性。 4. hibernate的性能很是好,由於它是個輕量級框架。映射的靈活性很出色。它支持各類關係數據庫,從一對一到多對多的各類複雜關係。數據庫
•要鏈接數據庫,須要向java.sql.DriverManager請求並得到Connection對象,該對象就表明一個數據庫的鏈接。
•使用DriverManager的getConnectin(String url , String username ,String password )
•要執行SQL語句,必須得到java.sql.Statement實例,Statement實例分爲如下3種類型:
一、執行靜態SQL語句。一般經過Statement實例實現。
二、執行動態SQL語句。一般經過PreparedStatement實例實現。
三、執行數據庫存儲過程。一般經過CallableStatement實例實現。
•執行SQL語句Statement接口提供了三種執行SQL語句的方法:executeQuery 、executeUpdate和execute
• ResultSet包含符合SQL語句中條件的全部行,而且它經過一套get方法提供了對這些行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
•關閉JDBC對象:操做完成之後要把全部使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:後端
:攔截器處理過程當中發現目標Action實現了SessionAware接口,便會調用Action中已經實現的setSession(...)方法,將ActionContext中包裝的Session注入目標Action中。目標Action也就能夠進一步對Session進行操做了。瀏覽器
背後的機制就是ValueStack。界面經過:username/age/address這樣的名稱,就可以被直接賦值給user對象,這證實user對象正是ValueStack中的一個root對象!
那麼,爲何user對象會在ValueStack中呢?它是何時被壓入ValueStack的呢?答案是:ModelDrivenInterceptor(關於Interceptor的概念,請參考後續章節的說明)。ModelDrivenInterceptor是缺省的攔截器鏈的一部分,當一個請求通過ModelDrivenInterceptor的時候,在這個攔截器中,會判斷當前要調用的Action對象是否實現了ModelDriven接口,若是實現了這個接口,則調用getModel()方法,並把返回值(本例是返回user對象)壓入ValueStack。
將頁面和action的的屬性值保持一致,在action上寫上該屬性的set和get方法,這樣在頁面提交參數的時候,action就會調用set方法將參數值傳遞給其屬性,這種方式主要適用於傳遞參數比較少的狀況!
經過DomainModel傳值;DomainModel即域模型,是利用model層的域對象接收參數的一種方式。
經過ModelDriven傳值;action必須實現ModelDriven接口,且須要重寫getModel()方法;
ActionContext.getContext().getSession() 獲得個SessionMap 放入值
ActionSupport:
Actionsupport這個工具類在實現了Action接口的基礎上還定義了一個validate()方法,重寫該方法,它會在execute()方法以前執行,如校驗失敗,會轉入input處,必須在配置該Action時配置input屬性。
Actionsupport還提供了一個getText(String key)方法還實現國際化,該方法從資源文件上獲取國際化信息.
這樣在自定義標籤時能夠定義一個變量爲new actionsupport對象實現國際化。
struts2不要求咱們本身設計的action類繼承任何的struts基類或struts接口,可是咱們爲了方便實現咱們本身的action,大多數狀況下都會繼承com.opensymphony.xwork2.ActionSupport類,並重寫此類裏的public String execute() throws Exception方法。由於此類中實現了不少的實用藉口,提供了不少默認方法,這些默認方法包括國際化信息的方法、默認的處理用戶請求的方法等,這樣能夠大大的簡化Acion的開發。
Struts2中一般直接使用Action來封裝HTTP請求參數,所以,Action類裏還應該包含與請求參數對應的屬性,而且爲屬性提供對應的getter和setter方法。
: HibernateDaoSupport,HibernateTemplate,jdbcTemplate
spring若是想整合hibernate的話,首先就應該得到SessionFactory這個類,而後再經過得到session就能夠進行訪問數據庫了,即spring提供的類HibernateDaoSupport,HibernateTemplate應該是有setSessionFactory,在使用的時候注入一下就能夠了