Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第6章 初識Spring_第1頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第6章 初識Spring_第2頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第6章 初識Spring_第3頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第6章 初識Spring_第4頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第6章 初識Spring_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Spring概述Spring的核心容器Spring的入門程序DI與IoC第6章

初識Spring2024/1/29學習目標/Target2了解Spring的基本概念和優(yōu)點

理解Spring中的DI與IoC的相關概念掌握ApplicationContext的使用方法掌握屬性setter方法注入的實現(xiàn)方法章節(jié)概述/Summary3Spring致力于解決JavaEE應用中的各種問題,對于一個Java開發(fā)者來說,Spring框架的熟練使用是必備的技能之一。Spring具有良好的設計和分層結構,它克服了傳統(tǒng)重量型框架臃腫、低效的劣勢,大大簡化了項目開發(fā)中的技術復雜性。本章將對Spring框架的基礎知識進行詳細地講解。

目錄/CONTENTSSpring概述DI與IoCSpring的入門程序Spring的核心容器41432Spring概述01第6章初識Spring什么是Spring?什么是Spring6Spring是分層的JavaSE/EEfull-stack輕量級開源框架,以IoC(InverseofControl控制反轉)和AOP(AspectOrientedProgramming面向切面編程)為內(nèi)核,使用基本的JavaBean來完成以前只可能由EJB完成的工作,取代了EJB的臃腫、低效的開發(fā)模式。什么是Spring7

在實際開發(fā)中,通常服務器端在采用三層體系架構,分別為表示層(Web)、業(yè)務邏輯層(Service)、持久層(Dao),Spring對每一層都提供了技術支持。表示層業(yè)務邏輯層持久層在表示層提供了與Struts等框架的整合在業(yè)務邏輯層可以管理事務、記錄日志等在持久層可以整合MyBatis、Hibernate、JdbcTemplate等技術Spring的綠草叢8Spring輕量級框架,JavaEE的春天,當前主流框架目標使現(xiàn)有技術更加易用,推進編碼最佳實踐內(nèi)容IoC容器AOP實現(xiàn)數(shù)據(jù)訪問支持簡化JDBC/ORM框架聲明式事務Web集成Spring體系結構9Spring的體系結構10Spring框架采用的是分層架構,它一系列的功能要素被分成20個模塊。

BeansCoreContextSpELCoreContainerTestJDBCORMOXMJMSDataAccess/IntegrationTransactionsAOPAspectsInstrumentationMessagingWebSocketServletWebPortletWebSpring的體系結構111.CoreContainer(核心容器)BeansCoreContextSpELCoreContainer

提供了BeanFactory,Spring將管理對象稱為Bean。

提供了Spring框架的基本組成部分,包括IoC和DI功能。建立在Core和Beans模塊的基礎之上,它是訪問定義和配置的任何對象的媒介。

Spring3.0后新增的模塊,是運行時查詢和操作對象圖的強大的表達式語言。Spring的體系結構12JDBCORMOXMJMSDataAccess/IntegrationTransactions提供了一個JDBC的抽象層,大幅度的減少了在開發(fā)過程中對數(shù)據(jù)庫操作的編碼。

提供了一個支持對象/XML映射的抽象層實現(xiàn),如JAXB、Castor、XMLBeans、JiBX和XStream。對流行的對象關系映射API,包括JPA、JDO和Hibernate提供了集成層支持。

支持對實現(xiàn)特殊接口以及所有POJO類的編程和聲明式的事務管理。指Java消息傳遞服務,包含使用和產(chǎn)生信息的特性,自4.1版本后支持與Spring-message模塊的集成。2.DataAccess/Integration(數(shù)據(jù)訪問/集成)3.WebSpring的體系結構13WebSocketServletWebPortletWebSpring4.0以后新增的模塊,它提供了WebSocket和SockJS的實現(xiàn),以及對STOMP的支持。提供了基本的Web開發(fā)集成特性,如:多文件上傳、使用Servlet監(jiān)聽器來初始化IoC容器以及Web應用上下文。也稱Spring-webmvc模塊,包含Spring模型—視圖—控制器(MVC)和RESTWebServices實現(xiàn)的Web程序提供了在portlet環(huán)境中使用MVC實現(xiàn),類似Servlet模塊的功能。Spring的體系結構144.其他模塊AOPAspectsInstrumentationMessagingTest

提供了面向切面編程實現(xiàn),允許定義方法攔截器和切入點,將代碼按照功能進行分離,以降低耦合性。提供了類工具的支持和類加載器的實現(xiàn),可以在特定的應用服務器中使用。提供了與AspectJ的集成功能,AspectJ是一個功能強大且成熟的面向切面編程(AOP)框架。

提供了對單元測試和集成測試的支持。Spring4.0以后新增的模塊,它提供了對消息傳遞體系結構和協(xié)議的支持。Spring設計理念&核心技術15Spring設計理念Spring是面向Bean的編程Spring兩大核心技術控制反轉(IoC:InversionofControl)/依賴注入(DI:DependencyInjection)面向切面編程(AOP:AspectOrientedProgramming)目的:解耦合。實現(xiàn)每個組件時只關注組件內(nèi)部的事情要點:明確定義組件間的接口控制反轉/依賴注入16將組件對象的控制權從代碼本身轉移到外部容器組件化的思想:分離關注點,使用接口,不再關注實現(xiàn)依賴的注入:將組件的構建和使用分開組件的使用組件的生產(chǎn)接口的定義運行時注入演示:使用簡單工廠Spring開發(fā)所需的jar包分為兩個部分:Spring框架包和第三方依賴包。下載地址:https://spring.io/projects/spring-framework/spring-projects/spring-framework/tree/5.3.xSpring框架包docs文件夾中包含API文檔和開發(fā)規(guī)范libs文件夾中包含JAR包和源碼Schema文件夾中包含開發(fā)所需要的schema文件Spring的下載及目錄結構17

下載后的解壓目錄如下:STEP01

docs文件夾:該文件夾下存放Spring的相關文檔,包括開發(fā)指南、API參考文檔。

libs文件夾:該文件夾下存放開發(fā)所需的jar包和源碼。整個Spring框架由21個模塊組成,libs目錄下Spring為每個模塊都提供了三個壓縮包,因此,libs文件夾下一共有63個jar包。這63個jar包分為三類。

schema文件夾:該文件夾下存放Spring各種配置文件的XMLSchema文檔。STEP03Spring目錄結構下文件夾介紹Spring的下載及目錄結構18打開libs目錄可以看到60個JAR文件,具體如下:以.jar結尾的是class文件JAR包以-javadoc.jar結尾的是API文檔壓縮包以-sources.jar結尾的是源文件壓縮包Spring的下載及目錄結構19在libs目錄中有四個Spring的基礎包,分別對應Spring核心容器的四個模塊。spring-expression-5.3.26.jar

定義了Spring的表達式語言。spring-core-5.3.26.jar

包含Spring框架的核心工具類,Spring其它組件都要用到這個包里的類。spring-beans-5.3.26.jar

所有應用都要用到的JAR包,它包含訪問配置文件、創(chuàng)建和管理Bean以及進行控制反轉或者依賴注入操作相關的所有類。spring-context-5.3.26.jar

提供了在基礎IoC功能上的擴展服務,還提供了許多企業(yè)級服務的支持Spring的下載及目錄結構20Spring的下載及目錄結構21第三方依賴包在使用Spring開發(fā)時,除了要使用自帶的JAR包外,Spring的核心容器還需要依賴commons.logging的JAR包。下載地址:/proper/commons-logging/download_logging.cgiSpring框架的優(yōu)點22Spring具有簡單、可測試和松耦合等特點。Spring不僅可以用于服務器端開發(fā),也可以應用于任何Java應用的開發(fā)中。非侵入式設計支持AOP方便解耦、簡化開發(fā)12

3支持聲明式事務處理4方便程序測試5方便集成各種優(yōu)秀框架6降低JavaEEAPI的使用難度7Spring框架的7大優(yōu)點Spring的核心容器02第6章初識SpringSpring容器會負責控制程序之間的關系,而不是由程序代碼直接控制。Spring為我們提供了兩種核心容器,分別為BeanFactory和ApplicationContext,本節(jié)將對這兩種核心容器進行簡單介紹。概述Spring的核心容器24BeanFactorybeanFactory=newXmlBeanFactory(newFileSystemResource("F:/applicationContext.xml"));

創(chuàng)建BeanFactory實例時,需要提供Spring所管理容器的詳細配置信息,這些信息通常采用XML文件形式來管理,其加載配置信息的語法如下:小提示:這種加載方式在實際開發(fā)中并不多用,讀者作為了解即可。XML配置文件的位置BeanFactory25ApplicationContext是BeanFactory的子接口,是另一種常用的Spring核心容器。它由org.springframework.context.ApplicationContext接口定義,不僅包含了BeanFactory的所有功能,還添加了對國際化、資源訪問、事件傳播等方面的支持。創(chuàng)建ApplicationContext接口實例,通常采用兩種方法,具體如下:ApplicationContextapplicationContext=newClassPathXmlApplicationContext(StringconfigLocation);

ClassPathXmlApplicationContext會從類路徑classPath中尋找指定的XML配置文件,找到并裝載完成ApplicationContext的實例化工作。通過ClassPathXmlApplicationContext創(chuàng)建

ApplicationContext26通過FileSystemXmlApplicationContext創(chuàng)建

ApplicationContextapplicationContext=newFileSystemXmlApplicationContext(StringconfigLocation);

FileSystemXmlApplicationContext會從指定的文件系統(tǒng)路徑(絕對路徑)中尋找指定的XML配置文件,找到并裝載完成ApplicationContext的實例化工作。在Java項目中,會通過ClassPathXmlApplicationContext類來實例化ApplicationContext容器。而在Web項目中,ApplicationContext容器的實例化工作會交由Web服務器來完成。Web服務器實例化ApplicationContext容器時,通常會使用ContextLoaderListener來實現(xiàn),此種方式只需要在web.xml中添加如下代碼:<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>ApplicationContext27

創(chuàng)建Spring容器后,就可以獲取Spring容器中的Bean。Spring獲取Bean的實例通常采用以下兩種方法:ObjectgetBean(Stringname);根據(jù)容器中Bean的id或name來獲取指定的Bean,獲取之后需要進行強制類型轉換。<T>TgetBean(Class<T>requiredType);根據(jù)類的類型來獲取Bean的實例。由于此方法為泛型方法,因此在獲取Bean之后不需要進行強制類型轉換。ApplicationContext28Spring的入門程序03第6章初識Spring創(chuàng)建工程:在IntelliJIDEA中,創(chuàng)建一個Maven項目,然后在pom.xml文件中加載需使用到的Spring的4個基礎包,即spring-core-5.3.26.jar、spring-beans-5.3.26.jar、spring-context-5.3.26.jar和spring-expression-5.3.26.jar。除此之外,還需要將Spring依賴包commons-logging-1.2.RELEASE.jar也加載到項目中。Spring的入門程序30STEP01<!--Spring的基礎包Spring-core--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.26</version></dependency><!--Spring的基礎包Spring-beans--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.26</version></dependency><!--Spring的基礎包Spring-context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.26</version></dependency><!--Spring的基礎包Spring-expressinon--><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>5.3.26</version></dependency><!--Spring的依賴包commons-logging--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>創(chuàng)建HelloSpring.java在src/main/java目錄下,創(chuàng)建一個cn.springdemo包,并在包中創(chuàng)建HelloSpring.java,然后在類中定義一個print()方法publicclassHelloSpring{//定義who屬性,該屬性的值將通過Spring框架進行設置

privateStringwho=null;//定義打印方法,輸出一句完整的問候publicvoidprint(){System.out.println("Hello,"+this.getWho()+"!");}publicStringgetWho(){returnwho;}publicvoidsetWho(Stringwho){this.who=who;}}Spring的入門程序31STEP02#rootLogger是所有日志的根日志,修改該日志屬性將對所有日志起作用#下面的屬性配置中,所有日志的輸出級別是info,輸出源是conlog4j.rootLogger=info,con#定義輸出源的輸出位置是控制臺log4j.appender.con=org.apache.log4j.ConsoleAppender#定義輸出日志布局采用的類log4j.appender.con.layout=org.apache.log4j.PatternLayout#定義日志輸出布局log4j.appender.con.layout.ConversionPattern=%d{MM-ddHH:mm:ss}[%p]%c%n-%m%nSpring的入門程序32STEP03創(chuàng)建配置文件perties在src/main/resources目錄下,為該項目添加perties文件,用來控制日志輸出。Spring的入門程序33STEP04創(chuàng)建配置文件application-Context.xml在src/main/resources目錄下,編寫Spring配置文件。在項目的classpath根路徑下創(chuàng)建application-Context.xml文件(為便于管理框架的配置文件,可在項目中創(chuàng)建專門的SourceFolder,如resources目錄,并將Spring框架配置文件創(chuàng)建在其根路徑下)。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"><!--通過Bean聲明需要Spring創(chuàng)建的實例。該實例的類型通過class屬性指定,并通過id屬性為該實例指定一個名稱,以便在程序中使用-->

<beanid="helloSpring"class="cn.springdemo.HelloSpring"><!--property用來為實例的屬性賦值,此處實際是調(diào)用setWho()方法實現(xiàn)賦值操作-->

<propertyname="who"><!--此處將字符串“Spring”賦值給who屬性-->

<value>Spring</value></property></bean></beans>XML文件的約束信息配置

XML文件包含了很多約束信息,如果自己動手去編寫,不但浪費時間,還容易出錯。XML的約束信息如下所示。其實,在Spring的幫助文檔中,就可以找到這些約束信息。

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd">Spring的入門程序34Spring幫助文檔獲取約束信息步驟1步驟2步驟3打開Spring目錄結構下的docs文件夾,在spring-framework-reference文件夾的Spring的參考文件目錄下找到index.html文件。

Spring的入門程序35Spring幫助文檔獲取約束信息步驟1步驟2步驟3使用瀏覽器打開index.html。Spring的入門程序36Spring幫助文檔獲取約束信息步驟1步驟2步驟3在步驟2中單擊“Core”鏈接進入CoreTechnologies頁面,單擊1.TheIoCcontainer→1.2.Containeroverview→1.2.1.ConfigurationMetadata目錄,可以查看配置文件的約束信息。Spring的入門程序37@Testpublicvoidtest1(){HelloSpringhelloSpring=newHelloSpring();helloSpring.setWho("Spring");helloSpring.print();}Spring的入門程序38STEP05創(chuàng)建測試類在cn.test包下創(chuàng)建測試類HelloTest.java@Testpublicvoidtest2(){//通過ClassPathXmlApplicationContext實例化Spring的上下文

ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");//通過ApplicationContext的getBean()方法,根據(jù)id來獲取Bean的實例

HelloSpringhelloSpring=(HelloSpring)context.getBean("helloSpring");//執(zhí)行print()方法

helloSpring.print();}DI與IoC04第6章初識Spring

DI的全稱是DependencyInjection,中文稱之為依賴注入。它與控制反轉(IoC)的含義相同,只不過這兩個稱呼是從兩個角度描述的同一個概念。

在使用Spring框架之后,對象的實例不再由調(diào)用者來創(chuàng)建,而是由Spring容器來創(chuàng)建,Spring容器會負責控制程序之間的關系,而不是由調(diào)用者的程序代碼直接控制。這樣,控制權由應用代碼轉移到了Spring容器,控制權發(fā)生了反轉,這就是控制反轉。從Spring容器的角度來看,Spring容器負責將被依賴對象賦值給調(diào)用者的成員變量,這相當于為調(diào)用者注入了它依賴的實例,這就是Spring的依賴注入。IoCDI依賴注入的概念40STEP01

依賴注入(DependencyInject,縮寫DI)就是由IoC容器在運行期間動態(tài)地將某種依賴資源注入對象之中。例如,將對象B注入(賦值)給對象A的成員變量。依賴注入的基本思想是:明確地定義組件接口,獨立開發(fā)各個組件,然后根據(jù)組件的依賴關系組裝運行。STEP03什么是依賴注入依賴注入的概念41STEP01

依賴注入(DI)和控制反轉(IoC)是從不同角度來描述了同一件事情。依賴注入是從應用程序的角度描述,即應用程序依賴IoC容器創(chuàng)建并注入它所需要的外部資源;而控制反轉是從IoC容器的角度描述,即IoC容器控制應用程序,由IoC容器反向地向應用程序注入應用程序所需要的外部資源。這里所說的外部資源可以是外部實例對象,也可以是外部文件對象等。

STEP03依賴注入和控制反轉的比較依賴注入的概念42STEP01

依賴注入的作用就是在使用Spring框架創(chuàng)建對象時,動態(tài)的將其所依賴的對象注入到Bean組件中。依賴注入通常有兩種實現(xiàn)方式,一種是構造方法注入,另一種是屬性setter方法注入。這兩種實現(xiàn)方式具體介紹如下。STEP03依賴注入的實現(xiàn)方式依賴注入的類型43STEP01

構造方法注入是指Spring容器調(diào)用構造方法注入被依賴的實例,構造方法可以是有參的或者是無參的。Spring在讀取配置信息后,會通過反射方式調(diào)用實例的構造方法,如果是有參構造方法,可以在構造方法中傳入所需的參數(shù)值,最后創(chuàng)建類對象。STEP03a.構造方法注入依賴注入的類型44STEP01

屬性setter方法注入是Spring最主流的注入方法,這種注入方法簡單、直觀,它是在被注入的類中聲明一個setter方法,通過setter方法的參數(shù)注入對應的值。STEP03b.setter屬性注入依賴注入的類型45依賴注入——構造方法注入46創(chuàng)建工程在IntelliJIDEA中,創(chuàng)建一個Maven項目,然后在pom.xml文件中加載需使用到的Spring的4個基礎包,即spring-core-5.3.26.jar、spring-beans-5.3.26.jar、spring-context-5.3.26.jar和spring-expression-5.3.26.jar。除此之外,還需要將Spring依賴包commons-logging-1.2.RELEASE.jar也加載到項目中。STEP01依賴注入——構造方法注入47創(chuàng)建HelloSpring.java在src/main/java目錄下,創(chuàng)建一個cn.springdemo包,并在包中創(chuàng)建HelloSpring.java,為其添加無參構造方法和有參構造方法STEP02publicclassHelloSpring{//定義who屬性,該屬性的值將通過Spring框架進行設置

privateStringwho=null;//定義打印方法,輸出一句完整的問候

publicvoidprint(){System.out.println("Hello,"+who+"!");}publicHelloSpring(){}publicHelloSpring(Stringwho){super();this.who=who;}}依賴注入——構造方法注入48創(chuàng)建配置文件application-Context.xml在src/main/resources目錄下,編寫Spring框架的配置文件,在其中修改id為helloSpring的,以及Bean為HelloSpring類的實例,并通過構造方法為who屬性注入屬性值。

STEP03<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"><beanid="helloSpring"class="cn.springdemo.HelloSpring"><!--通過定義的單參構造為helloSpring的who屬性賦值-->

<constructor-argindex="0"value="Spring"/></bean></beans><constructor-arg>元素

一個<constructor-arg>元素表示構造方法的一個參數(shù),且定義時不區(qū)分順序,只需要通過<constructor-arg>元素的name屬性指定參數(shù)即可。<constructor-arg>元素還提供了type屬性類指定參數(shù)的類型,避免字符串和基本數(shù)據(jù)類型的混淆。依賴注入的類型49依賴注入——構造方法注入50創(chuàng)建測試類在cn.test包下,創(chuàng)建測試類HelloTestSTEP04@Testpublicvoidtest(){//通過ClassPathXmlApplicationContext實例化Spring的上下文

ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");//通過ApplicationContext的getBean()方法,根據(jù)id來獲取Bean的實例

HelloSpringhelloSpring=(HelloSpring)context.getBean("helloSpring");//執(zhí)行print()方法

helloSpring.print();}共性問題集中講解51常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解STEP01

控制反轉(InversionofControl,縮寫為IoC)是面向對象編程中的一個設計原則,用來降低程序代碼之間的耦合度。在傳統(tǒng)面向對象編程中,獲取對象的方式是用new關鍵字主動創(chuàng)建一個對象,也就是說應用程序掌握著對象的控制權。傳統(tǒng)面向對象程序設計原則如圖。STEP03傳統(tǒng)面向對象程序設計原則控制反轉的概念52STEP01

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論