3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
概念輕量級的(面向切面AOP)、(IOC控制反轉)容器框架。Spring優點1.降低組件之間的耦合性2.專註於自己業務邏輯,統一的行為(日誌、安全等)抽象出來統一處理3.易於單元測試4.方便事物處理5.Spring並不強制應用完全依賴於Spring,開發者可自由選用Spring框架的部分或全部6 . spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等 7 . spring屬於低侵入式設計,代碼的污染極低 8 . 提供了單例模式支持。Spring七個模塊Spring contextSpring AOPSpring DAOSpring ORMSpring WebSpring MVCSpring CoreAOP和IOCAop允許程序通過分離的應用業務邏輯與系統級別服務。程序員只需專註自己的業務邏輯,而不需要管系統級服務。容器中的對象能享有容器中的公共服務(日誌、安全)。原理通過動態代理做到這一點。用到了代理模式,代理模式是一種靜態代理,而動態代理就是利用反射和動態編譯將代理模式變成動態的。得知被代理類后通過反射得知他的一切信息,然後動態編譯成代理類的class文件(動態組裝成代理類,生成java文件,再編譯成class文件)。優點提供另外一種編程思路,可以把類似的行為抽離出來統一處理。Ioc依賴注入(DI)和控制反轉(Inversion of Control)是同一個概念。控制權的反轉,在程序中對象的控制權轉到容器而不是程序員自己控制,促進了松耦合。依賴注入,將相互依賴的對象分離,在Spring配置文件中,描述他們的依賴關係,用到一個對象時注入,而不需要New一個對象。原理通過工廠+反射將我們的bean放到容器中,當我們想用某個bean的時候,只需要調用getBean("beanID")方法。優點解耦、統一管理bean,缺點佔用內存多、構造對象慢beanFactory與ApplicationContext二者是父子關係Spring的IoC容器就是一個實現了BeanFactory介面的可實例化類,它就是 Spring IoC 容器的真面目。ioc使用 BeanFactory 來實例化、配置和管理 Bean。如果說BeanFactory是Spring的心臟,那麼ApplicationContext就是完整的軀體了,ApplicationContext由BeanFactory派生而來,提供了更多面向實際應用的功能。(1)MessageSource, 提供國際化的消息訪問 (2)資源訪問,如URL和文件 (3)事件傳播特性,即支持aop特性1.ApplicationContext介面繼承BeanFactory介面,Spring核心工廠是BeanFactory ,BeanFactory採取延遲載入,第一次getBean時才會初始化Bean, ApplicationContext是會在載入配置文件時初始化Bean。2.ApplicationContext是對BeanFactory擴展,他可以國際化處理、資源訪問、事件傳播。Bean的生命周期建立1 . Bean的建立由BeanFactory讀取Bean定義文件,並生成各個實例。初始化2 . 依賴注入3.setBeanName4.setBeanFactory5.processBeforeInitialization初始化之前都會執行這個實例的processBeforeInitialization方法。6.afterPropertiesSet7.init-method8.processAfterInitialization業務邏輯9.使用Bean做一些業務邏輯銷毀10.destroy11.destroy-methodBean的作用域1. Singleton: 這是默認的作用域,這種範圍確保不管接受多少個請求,每個容器中只有一個bean的實例,單例模式有BeanFactory自身維護; 2. Prototype: 原形範圍與單例範圍相反,為每一個bean請求提供一個實例; 3. Request: 在請求bean範圍內會為每一個來自客戶端的網路請求創建一個實例,在請求完成以後,bean會失效並被垃圾回收器回收; 4. Session: 與請求範圍類似,確保每個session中有一個bean的實例,在session過期后,bean會隨之失效;Servlet生命周期1. 初始化階段 調用init方法2. 響應客戶請求階段調用service方法3. 終止階段調用destroy方法設值注入和構造注入及其區別設值注入:類中定義setter方法,在配置文件中注入參數 property name="country" value="China" /> 構造注入:類中聲明一個構造方法,並在此方法的參數中定義要注入的對象。 設值注入優點1. 與傳統的JavaBean的寫法更相似,程序開發人員更容易理解、接受,依賴關係顯得更加直觀、自然。2. 對於複雜的依賴關係,如果採用構造注入,會導致構造器過於臃腫,難以閱讀。而設值注入不會三、在某些屬性可選的情況下,多參數的構造器更加笨重。構造注入優點1. 構造注入可以在構造器中決定依賴關係的注入順序,優先依賴的優先注入。2. 對於依賴關係無須變化的Bean,構造注入更有用處。建議:採用設值注入為主,構造注入為輔的注入策略。對於依賴關係無需變化的注入,盡量採用構造注入;而其它的依賴關係的注入,則考慮設值注入。Spring實例化bean的三種方法1.通過構造函數2.通過靜態工廠方法factory-method="靜態方法"/>3.通過實例工廠方法 factory-method="createClientServiceInstance"/>Bean的參數有id、class、factory-bean、factory-method等Spring事物管理簡單介紹包括聲明式事務和編程式事務,編程式的,比較靈活,但是代碼量大,存在重複的代碼比較多;聲明式的比編程式的更靈活,最大的好處是大大減少了代碼量。編程式不常用,接下來介紹聲明式事務管理。聲明式事務管理建立在AOP之上的,動態代理實現其機制(不改變源碼,對原有的功能動態擴展)。聲明式事務管理使業務代碼不受污染,這正是spring倡導的非侵入式的開發方式。聲明式事物處理也有五種不同的配置方式,單常用的是基於 @Transactional註解的聲明式事務管理。此時在DAO上需加上@Transactional註解,在需要事務處理的類或方法上都可以加。Spring配置文件中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。TransactionDefinition介面定義了四種事物屬性是我們需要知道的事物傳播行為在開始當前事務之前,一個事務上下文已經存在,此時有若干選項可以指定一個事務性方法的執行行為。TransactionDefinition.PROPAGATION_REQUIRED:如果當前存在事務,則加入該事務;如果當前沒有事務,則創建一個新的事務。這是默認值。TransactionDefinition.PROPAGATION_REQUIRES_NEW:創建一個新的事務,如果當前存在事務,則把當前事務掛起。TransactionDefinition.PROPAGATION_SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。TransactionDefinition.PROPAGATION_NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。TransactionDefinition.PROPAGATION_MANDATORY:如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。TransactionDefinition.PROPAGATION_NESTED:如果當前存在事務,則創建一個事務作為當前事務的嵌套事務來運行;如果當前沒有事務,則該取值等價於TransactionDefinition.PROPAGATION_REQUIRED。事物隔離級別TransactionDefinition.ISOLATION_DEFAULT:這是默認值,表示使用底層資料庫的默認隔離級別。對大部分資料庫而言,通常這值就是TransactionDefinition.ISOLATION_READ_COMMITTED。TransactionDefinition.ISOLATION_READ_UNCOMMITTED:該隔離級別表示一個事務可以讀取另一個事務修改但還沒有提交的數據。該級別不能防止臟讀,不可重複讀和幻讀,因此很少使用該隔離級別。比如PostgreSQL實際上並沒有此級別。TransactionDefinition.ISOLATION_READ_COMMITTED:該隔離級別表示一個事務只能讀取另一個事務已經提交的數據。該級別可以防止臟讀,這也是大多數情況下的推薦值。TransactionDefinition.ISOLATION_REPEATABLE_READ:該隔離級別表示一個事務在整個過程中可以多次重複執行某個查詢,並且每次返回的記錄都相同。該級別可以防止臟讀和不可重複讀。TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止臟讀、不可重複讀以及幻讀。但是這將嚴重影響程序的性能。通常情況下也不會用到該級別。事務超時所謂事務超時,就是指一個事務所准許實行的最長時辰,假定跨越該時辰限制但事務還沒有完成,則自動回滾事務。事務只讀屬性只讀事務用於客戶代碼只讀但不修改數據的情形,只讀事務用於特定情景下的優化,比如使用Hibernate的時候SpringMVC流程用戶發送請求至前端控制器DispatcherServletDispatcherServlet收到請求調用HandlerMapping處理器映射器。處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。DispatcherServlet選擇合適的HandlerAdapter處理器適配器調用處理器執行處理器(Controller,也叫後端控制器)。Controller執行完成返回ModelAndViewHandlerAdapter將controller執行結果ModelAndView返回給DispatcherServletDispatcherServlet將ModelAndView傳給ViewReslover視圖解析器 ViewReslover解析后返回具體ViewDispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。DispatcherServlet響應用戶

本文由yidianzixun提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦