多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > 框架設計 > Spring學習總結(19)——Spring概念詳解

Spring學習總結(19)——Spring概念詳解

來源:程序員人生   發(fā)布時間:2016-11-17 09:26:12 閱讀次數:3269次
Spring是1個開源框架,Spring是于2003 年興起的1個輕量級的Java 開發(fā)框架,由Rod Johnson創(chuàng)建。簡單來講,Spring是1個分層的JavaSE/EEfull-stack(1站式) 輕量級開源框架。
你可能正在想“Spring不過是另外1個的framework”。當已有許多開放源代碼(和專有)J2EEframework時,我們?yōu)楹芜€需要Spring Framework?
Spring是獨特的,由于若干個緣由:
它定位的領域是許多其他流行的framework沒有的。Spring致力于提供1種方法管理你的業(yè)務對象。
Spring是全面的和模塊化的。Spring有分層的體系結構,這意味著你能選擇使用它孤立的任何部份,它的架構依然是內在穩(wěn)定的。因此從你的學習中,你可得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業(yè)務對象。
它的設計從底部幫助你編寫易于測試的代碼。Spring是用于測試驅開工程的理想的framework。
Spring對你的工程來講,它不需要1個以上的framework。Spring是潛伏地1站式解決方案,定位于與典型利用相干的大部份基礎結構。它也觸及到其他framework沒有斟酌到的內容。

背景


Rod Johnson在2002年編著的《Expert one on one J2EE design and development》1書中,對Java EE 系統(tǒng)框架臃腫、低效、脫離現實的種種現狀提出了質疑,并積極尋求探索革新
之道。以此書為指點思想,他編寫了interface21框架,這是1個力圖沖破Java EE傳統(tǒng)開發(fā)的窘境,從實際需求動身,著眼于輕便、靈巧,易于開發(fā)、測試和部署的輕量級開發(fā)框架。Spring框架即以interface21框架為基礎,經太重新設計,其實不斷豐富其內涵,于2004年3月24日,發(fā)布了1.0正式版。同年他又推出了1部可謂經典的力作《Expert one-on-one J2EE Development without EJB》,該書在Java世界掀起了軒然大波,不斷改變著Java開發(fā)者程序設計和開發(fā)的思考方式。在該書中,作者根據自己多年豐富的實踐經驗,對EJB的各種笨重臃腫的結構進行了逐1的分析和否定,并分別以簡潔實用的方式替換之。至此1戰(zhàn)功成,Rod Johnson成為1個改變Java世界的大師級人物。
傳統(tǒng)J2EE利用的開發(fā)效力低,利用服務器廠商對各種技術的支持并沒有真正統(tǒng)1,致使J2EE的利用沒有真正實現Write Once及Run Anywhere的許諾。Spring作為開源的中間件,獨立于各種利用服務器,乃至不必利用服務器的支持,也能提供利用服務器的功能,如聲明式事務、事務處理等。
Spring致力于J2EE利用的各層的解決方案,而不是僅僅專注于某1層的方案。可以說Spring是企業(yè)利用開發(fā)的“1站式”選擇,并貫穿表現層、業(yè)務層及持久層。但是,Spring其實不想取代那些已有的框架,而是與它們無縫地整合。

框架特點


輕量——從大小與開消兩方面而言Spring都是輕量的。完全的Spring框架可以在1個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開消也是微不足道的。另外,Spring是非侵入式的:典型地,Spring利用中的對象不依賴于Spring的特定類。
控制反轉——Spring通過1種稱作控制反轉(IoC)的技術增進了低耦合。當利用了IoC,1個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象要求就主動將依賴傳遞給它。
面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離利用的業(yè)務邏輯與系統(tǒng)級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發(fā)。利用對象只實現它們應當做的——完成業(yè)務邏輯——僅此而已。它們其實不負責(乃至是意識)其它的系統(tǒng)級關注點,例如日志或事務支持。
容器——Spring包括并管理利用對象的配置和生命周期,在這個意義上它是1種容器,你可以配置你的每一個bean如何被創(chuàng)建——基于1個可配置原型(prototype),你的bean可以創(chuàng)建1個單獨的實例或每次需要時都生成1個新的實例——和它們是如何相互關聯的。但是,Spring不應當被混淆于傳統(tǒng)的重量級的EJB容器,它們常常是龐大與笨重的,難以使用。
框架——Spring可以將簡單的組件配置、組合成為復雜的利用。在Spring中,利用對象被聲明式地組合,典型地是在1個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將利用邏輯的開發(fā)留給了你。
MVC——Spring的作用是整合,但不單單限于整合,Spring 框架可以被看作是1個企業(yè)解決方案級別的框架。客戶端發(fā)送要求,服務器控制器(由DispatcherServlet實現的)完成要求的轉發(fā),控制器調用1個用于映照的類HandlerMapping,該類用于將要求映照到對應的處理器來處理要求。HandlerMapping 將要求映照到對應的處理器Controller(相當于Action)在Spring 當中如果寫1些處理器組件,1般實現Controller 接口,在Controller 中就能夠調用1些Service 或DAO 來進行數據操作 ModelAndView 用于寄存從DAO 中取出的數據,還可以寄存響應視圖的1些數據。 如果想將處理結果返回給用戶,那末在Spring 框架中還提供1個視圖組件ViewResolver,該組件根據Controller 返回的標示,找到對應的視圖,將響應response 返回給用戶。
所有Spring的這些特點使你能夠編寫更干凈、更可管理、并且更容易于測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。

特性


強大的基于 JavaBeans的采取控制反轉(Inversion of Control,IoC)原則的配置管理,使得利用程序的組件更加快捷簡易。
1個可用于從 applet 到 Java EE 等不同運行環(huán)境的核心 Bean 工廠。
數據庫事務的1般化抽象層,允許宣布式(Declarative)事務管理器,簡化事務的劃分使之與底層無關。
內建的針對 JTA 和 單個 JDBC 數據源的1般化策略,使 Spring 的事務支持不要求 Java EE 環(huán)境,這與1般的 JTA 或 EJB CMT 相反。
JDBC 抽象層提供了有針對性的異常等級(不再從SQL異常中提取原始代碼), 簡化了毛病處理, 大大減少了程序員的編碼量. 再次利用JDBC時,你無需再寫出另外一個 '終止' (finally) 模塊. 并且面向JDBC的異常與Spring 通用數據訪問對象(Data Access Object) 異常等級相1致.
以資源容器,DAO 實現和事務策略等情勢與 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用眾多的反轉控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 所有這些全部遵從Spring通用事務處理和通用數據訪問對象異常等級規(guī)范.
靈活的基于核心 Spring 功能的 MVC 網頁利用程序框架。開發(fā)者通過策略接口將具有對該框架的高度控制,因此該框架將適應于多種顯現(View)技術,例如 JSP,FreeMarker,Velocity,Tiles,iText 和 POI。值得注意的是,Spring 中間層可以輕易地結合于任何基于 MVC 框架的網頁層,例如 Struts,WebWork,或 Tapestry。
提供諸如事務管理等服務的面向切面編程(AOP)框架。[1] 

特點


1.方便解耦,簡化開發(fā)
通過Spring提供的IoC容器,我們可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼所釀成的過度程序耦合。有了Spring,用戶沒必要再為單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注于上層的利用。
2.AOP編程的支持
通過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統(tǒng)OOP實現的功能可以通過AOP輕松應付。
3.聲明式事務的支持
在Spring中,我們可以從單調煩悶的事務管理代碼中擺脫出來,通過聲明式方式靈活地進行事務的管理,提高開發(fā)效力和質量。
4.方便程序的測試
可以用非容器依賴的編程方式進行幾近所有的測試工作,在Spring里,測試不再是昂貴的操作,而是隨手可做的事情。例如:Spring對Junit4支持,可以通過注解方便的測試Spring程序。
5.方便集成各種優(yōu)秀框架
Spring不排擠各種優(yōu)秀的開源框架,相反,Spring可以下降各種框架的使用難度,Spring提供了對各種優(yōu)秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
6.下降Java EE API的使用難度
Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了1個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為下降。
7.Java 源碼是經典學習范例
Spring的源碼設計精巧、結構清晰、獨具匠心,處處體現著大師對Java設計模式靈活應用和對Java技術的精深成就。Spring框架源碼無疑是Java技術的最好實踐范例。如果想在短時間內迅速提高自己的Java技術水平和利用開發(fā)水平,學習和研究Spring源碼將會使你收到意想不到的效果。

好處


在我們進入細節(jié)之前,讓我們看1下Spring可以給1個工程帶來的1些好處:
Spring能有效地組織你的中間層對象,不管你是不是選擇使用了EJB。如果你僅僅使用了Struts或其他的包括了J2EE特有APIs的framework,你會發(fā)現Spring關注了遺留下的問題。Spring能消除在許多工程上對Singleton的過量使用。根據我的經驗,這是1個主要的問題,它減少了系統(tǒng)的可測試性和面向對象特性。
Spring能消除使用各種各樣格式的屬性定制文件的需要,在全部利用和工程中,可通過1種1致的方法來進行配置。曾感到迷惑,1個特定類要查找迷幻般的屬性關鍵字或系統(tǒng)屬性,為此不能不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。顛倒控制的使用(在下面討論)幫助完成這類簡化。
Spring能通過接口而不是類增進好的編程習慣,減少編程代價到幾近為零。
Spring被設計為讓使用它創(chuàng)建的利用盡量少的依賴于他的APIs。在Spring利用中的大多數業(yè)務對象沒有依賴于Spring。
使用Spring構建的利用程序易于單元測試。
Spring能使EJB的使用成為1個實現選擇,而不是利用架構的必定選擇。你能選擇用POJOs或local EJBs來實現業(yè)務接口,卻不會影響調用代碼。
Spring幫助你解決許多問題而無需使用EJB。Spring能提供1種EJB的替換物,它們適于許多web利用。例如,Spring能使用AOP提供聲明性事務而不通過使用EJB容器,如果你僅僅需要與單個的數據庫打交道,乃至不需要JTA實現。
Spring為數據存取提供了1致的框架,不論是使用JDBC或O/R mapping產品(如Hibernate)。
Spring確切使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。
總結起來,Spring有以下優(yōu)點:
1.低侵入式設計,代碼污染極低
2.獨立于各種利用服務器,基于Spring框架的利用,可以真正實現Write Once,Run Anywhere的許諾
3.Spring的DI機制下降了業(yè)務對象替換的復雜性,提高了組件之間的解耦
4.Spring的AOP支持允許將1些通用任務如安全、事務、日志等進行集中式管理,從而提供了更好的復用
5.Spring的ORM和DAO提供了與第3方持久層框架的良好整合,并簡化了底層的數據庫訪問
6.Spring其實不強迫利用完全依賴于Spring,開發(fā)者可自由選用Spring框架的部份或全部

作用


Spring提供許多功能,在此我將快速地順次展現其各個主要方面。
首先,讓我們明確Spring范圍。雖然Spring覆蓋了許多方面,但我們已有清楚的概念,它甚么應當觸及和甚么不應當觸及。
Spring的主要目的是使JavaEE易用和增進好編程習慣。
Spring不重新開發(fā)已有的東西。因此,在Spring中你將發(fā)現沒有日志記錄的包,沒有連接池,沒有散布事務調度。這些均有開源項目提供(例如Commons Logging 用來做所有的日志輸出,或Commons DBCP用來作數據連接池),或由你的利用程序服務器提供。由于一樣的的緣由,我們沒有提供O/R mapping層,對此,已有友好的解決辦法如Hibernate和JDO。Spring的目標是使已存在的技術更加易用。
例如,雖然我們沒有底層事務調和處理,但我們提供了1個抽象層覆蓋了JTA或任何其他的事務策略。
Spring沒有直接和其他的開源項目競爭,除非我們感到我們能提供新的1些東西。例如,像許多開發(fā)人員,我們歷來沒有為Struts高興過,并且感到在MVC web framework中還有改進的余地。在某些領域,例如輕量級的IoC容器和AOP框架,Spring有直接的競爭,但是在這些領域還沒有已較為流行的解決方案。(Spring在這些區(qū)域是開路先鋒。)
Spring也得益于內在的1致性。
所有的開發(fā)者都在唱一樣的的贊歌,基礎想法仍然是Expert One-on-One J2EE設計與開發(fā)的那些。
并且我們已能夠使用1些主要的概念,例如顛倒控制,來處理多個領域。
Spring在利用服務器之間是可移植的。
固然保證可移植性總是1次挑戰(zhàn),但是我們避免任何特定平臺或非標準化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的利用服務器上的用戶。

基本框架


Spring 框架是1個分層架構,由 7 個定義良好的模塊組成。Spring
模塊構建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式,如圖所示:
組成Spring框架的每一個模塊(或組件)都可以單獨存在,或與其他1個或多個模塊聯合實現。每一個模塊的功能以下:
1、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉(IOC) 模式將利用程序的配置和依賴性規(guī)范與實際的利用程序代碼分開。
2、Spring 上下文:Spring 上下文是1個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業(yè)服務,例如JNDI、EJB、電子郵件、國際化、校驗和調度功能。
3、Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持AOP。Spring AOP 模塊為基于 Spring 的利用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到利用程序中。
4、Spring DAO:JDBCDAO抽象層提供了成心義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的毛病消息。異常層次結構簡化了毛病處理,并且極大地下降了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
5、Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關系工具,其中包括JDO、Hibernate和iBatisSQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
6、Spring Web 模塊:Web 上下文模塊建立在利用程序上下文模塊之上,為基于 Web 的利用程序提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部份要求和將要求參數綁定到域對象的工作。
7、Spring MVC 框架:MVC框架是1個全功能的構建 Web利用程序的 MVC 實現。通過策略接口,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。模型由javabean構成,寄存于Map;視圖是1個接口,負責顯示模型;控制器表示邏輯代碼,是Controller的實現。Spring框架的功能可以用在任何J2EE服務器中,大多數功能也適用于不受管理的環(huán)境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業(yè)務和數據訪問對象。毫無疑問,這樣的對象可以在不同J2EE 環(huán)境(Web 或EJB)、獨立利用程序、測試環(huán)境之間重用。

下載安裝


下載和安裝Spring請按以下步驟進行。
(1)登錄站點,下載Spring的最新穩(wěn)定版本。最新版本為spring-framework⑷.0.建議下載spring-framework-spring-framework⑷.0.0.M2-dist這個緊縮包不但包括Spring的開發(fā)包,而且包括Spring編譯和運行所依賴的第3方類庫。
解緊縮下載到的緊縮包,解緊縮后的文件夾利用以下幾個文件夾。
dist:該文件夾下放Spring的jar包,通常只需要Spring.jar文件便可。該文件夾下還有1些類似spring-Xxx.jar的緊縮包, 這些緊縮包是spring.jar緊縮包的子模塊緊縮包。除非肯定全部J2EE利用只需要使用Spring的某1方面時,才斟酌使用這類分模塊緊縮包。通常建議使用Spring.jar
docs:該文件夾下包括spring的相干文檔、開發(fā)指南及API參考文檔。
lib:該文件夾下包括spring編譯和運行所依賴的第3方類庫,該路徑下的類庫其實不是spring必須的,但如果需要使用第3方類庫的支持,這里的類庫就是必須要的。
samples:該文件夾下包括Spring的幾個簡單例子,可作為Spring入門學習的案例。
src:該文件夾下包括Spring的全部源文件,如果開發(fā)進程中有地方沒法掌控,可以參考該源文件,了解底層實現。
test:該文件夾下包括Spring的測試示例。
tiger:該路徑下寄存關于JDK的相干內容
解緊縮后的文件夾下,還包括1些關于Spring的License和項目相干文件
(2)將spring.jar復制到項目的CLASSPATH路徑下,對Web利用,將spring.jar文件復制到WEB-INF/lib路徑下,該利用便可以利用Spring框架了。
(3)通常Spring的框架還依賴于其他1些jar文件,因此還須將lib下對應的包復制到WEB-INF/lib路徑下,具體要復制哪些jar文件,取決于利用所需要使用的項目。通常需要復制cglib,dom4j,jakarta-commons,log4j等文件夾下的jar文件。
(4)為了編譯java文件,可以找到Spring的基礎類,將Spring.jar文件的路徑添加到環(huán)境變量CLASSPATH中。固然,也能夠使用ANT工具,但不必添加環(huán)境變量。如果使用Eclipse或NetBeans等IDE時,也不需要設置環(huán)境變量。
Spring MVC
傳統(tǒng)的web架構的view 表現層使用struts作為表現層。但是如果試用下spring自帶的MVC,會發(fā)現spring 在1般場合完全可以取代struts。從某些角度來講,spring的mvc設計的更加公道,有興趣的話無妨嘗試下單個的spring的MVC。

利用實例


  1. 新建1個登陸頁面:loginActionSupport.jsp,代碼以下
<%@page contentType="text/html;charset=GBK" isELIgnored="false"%>
<html>
<head><title>;實現用戶登錄實例,struts和Spring整合</title></head>
<body>
<font size=’22’> $<br> </font>
<form name="form1" action="/myLogin/loginActionSupportdo" method="post">
用戶名:<input type="text" name="username" value="${user.username}"/><br>
密碼:<input type="password" name="password" value="${user.password}"/><br>
<input type="submit" name=”method” value="提交"/>
</form>
</body>
</html>
2.創(chuàng)建1個存儲登陸用戶信息的類:User.java該類繼承于ActionForm,代碼以下:
package com.zhaosoft.bean;
import org.apache.struts.action.ActionForm;
public class User extends ActionForm{
private String username=null;
private String password=null;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;}
public void setPassword(String password) {
this.password = password;
}
}
3.Com.zhaosoft.action中新建1個LoginActionSupport.java,該類不繼承于struts的Action,而是繼承于Spring的ActionSupport,代碼示例以下:
package com.zhaosoft.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.ApplicationContext;
import org.springframework.web.struts.ActionSupport;
import com.zhaosoft.bean.User;
import com.zhaosoft.domain.Login;
public class LoginActionSupport extends ActionSupport {
public ActionForward execute(ActionMapping mapping,ActionFormform,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
// 通過ApplicationContext獲得配置文件
ApplicationContext ctx = getWebApplicationContext();
Login login = (Login) ctx.getBean("login");
login.login((User) form);
request.setAttribute("msg",login.getMsg());
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲 欧美 国产 中文 | 日韩一区二区不卡中文字幕 | 日本在线一区二区 | 亚洲图片欧美文学小说激情 | 欧美一级视频在线高清观看 | 色欧美亚洲 | 伊人久久大香 | 亚洲一区日韩二区欧美三区 | 91亚洲成人 | 午夜免费体验 | 99成人| 久久爱伊人 | uuzyz噜噜资源站 | 国产视频www | 日本一区二区不卡视频 | 波多野结衣在线播放视频 | 欧美日本一区亚洲欧美一区 | 欧美一级乱妇老太婆特黄 | 欧美一级毛片美99毛片 | 国产精品亚洲二区 | 一级毛片一级毛片一级毛片一级毛片 | 亚洲免费在线观看视频 | xx视频在线观看 | 天堂在线亚洲 | 日韩在线一区二区 | 国产专区自拍 | 宇都宫紫苑乳在线观看 | 欧美激情亚洲激情 | 亚洲一区二区三区首页 | 精品久久久久久中文字幕欧美 | 中文一区在线观看 | 日韩一级欧美一级 | 国产欧美一区二区三区免费看 | 国产一区二区视频在线 | 国产亚洲自拍一区 | 在线播放www | 欧美成人性色大片在线观看 | 欧美另类69xxxxx免费 | 国产精品9999久久久久 | 久久精品这里是免费国产 | 在线观看成年人免费视频 |