Spring MVC開發(fā)技術(shù)指南第1章 Spring基礎(chǔ)_第1頁
Spring MVC開發(fā)技術(shù)指南第1章 Spring基礎(chǔ)_第2頁
Spring MVC開發(fā)技術(shù)指南第1章 Spring基礎(chǔ)_第3頁
Spring MVC開發(fā)技術(shù)指南第1章 Spring基礎(chǔ)_第4頁
Spring MVC開發(fā)技術(shù)指南第1章 Spring基礎(chǔ)_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章Spring基礎(chǔ)主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.1Spring概述1.CoreContainerSpring的CoreContainer是其它模塊建立的基礎(chǔ),由Beans(spring-beans)、Core(spring-core)、Context(spring-context)和Expression(spring-expression,Spring表達式語言)等模塊組成。spring-beans模塊

該模塊提供了BeanFactory,是工廠模式的一個經(jīng)典實現(xiàn),Spring將管理對象稱為Bean。spring-core模塊該模塊提供了框架的基本組成部分,包括控制反轉(zhuǎn)(InversionofControl,IoC)和依賴注入(DependencyInjection,DI)功能。spring-context模塊該模塊建立在spring-beans和spring-core模塊基礎(chǔ)上,提供一個框架式的對象訪問方式,是訪問定義和配置的任何對象媒介。spring-expression模塊該模塊提供了強大的表達式語言去支持運行時查詢和操作對象圖。2.AOP和Instrumentation與AOP和Instrumentation相關(guān)的模塊有AOP(spring-aop)模塊、Aspects(spring-aspects)模塊以及Instrumentation(spring-instrument)模塊。spring-aop模塊該模塊提供了一個符合AOP要求的面向切面的編程實現(xiàn),允許定義方法攔截器和切入點,將代碼按照功能進行分離,以便干凈地解耦。spring-aspects模塊該模塊提供了與AspectJ的集成功能,AspectJ是一個功能強大且成熟的AOP框架。spring-instrument模塊該模塊提供了類植入(Instrumentation)支持和類加載器的實現(xiàn),可以在特定的應(yīng)用服務(wù)器中使用。Instrumentation提供了一種虛擬機級別支持的AOP實現(xiàn)方式,使得開發(fā)者無需對JDK做任何升級和改動,就可以實現(xiàn)某些AOP的功能。3.MessagingSpring4.0以后新增了Messaging(spring-messaging)模塊,該模塊提供了對消息傳遞體系結(jié)構(gòu)和協(xié)議的支持。4.DataAccess/Integration數(shù)據(jù)訪問/集成層由JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和Transactions(spring-tx)模塊組成。spring-jdbc模塊該模塊提供了一個JDBC的抽象層,消除了繁瑣的JDBC編碼和數(shù)據(jù)庫廠商特有的錯誤代碼解析。spring-orm模塊為流行的對象關(guān)系映射(Object-RelationalMapping)API提供集成層,包括JPA和Hibernate。spring-oxm模塊該模塊提供了一個支持對象/XML映射的抽象層實現(xiàn),如JAXB、Castor、JiBX和XStream。spring-jms模塊該模塊指Java消息傳遞服務(wù),包含用于生產(chǎn)和使用消息的功能。spring-tx模塊該模塊支持用于實現(xiàn)特殊接口和所有POJO(普通Java對象)類的編程和聲明式事務(wù)管理。5.WebWeb層由Web(spring-web)、WebMVC(spring-webmvc)、WebSocket(spring-websocket)和WebFlux(spring-webflux)模塊組成。spring-web模塊提供了基本的Web開發(fā)集成功能。例如:多文件上傳功能、使用Servlet監(jiān)聽器初始化一個IoC容器以及Web應(yīng)用上下文。spring-webmvc模塊該模塊包含用于Web應(yīng)用程序的SpringMVC和RESTWebServices實現(xiàn)。spring-websocket模塊Spring4.0后新增的模塊,它提供了WebSocket和SockJS的實現(xiàn),主要是與Web前端的全雙工通訊的協(xié)議。spring-webflux該模塊是一個新的非堵塞函數(shù)式ReactiveWeb框架,可以用來建立異步的、非阻塞、事件驅(qū)動的服務(wù),并且擴展性非常好。(該模塊是Spring5新增模塊)6.TestTest(spring-test)模塊:該模塊支持使用JUnit或TestNG對Spring組件進行單元測試和集成測試。主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.2Spring開發(fā)環(huán)境的構(gòu)建1.2.1使用Eclipse開發(fā)JavaWeb應(yīng)用1.2.2使用STS(SpringToolSuite)開發(fā)JavaWeb應(yīng)用1.2.3Spring的下載及目錄結(jié)構(gòu)1.2.4第一個Spring入門程序1.2.1使用Eclipse開發(fā)JavaWeb應(yīng)用

使用Eclipse之前,需要對JDK、Web服務(wù)器和Eclipse進行一些必要的配置。因此,在安裝Eclipse之前,應(yīng)事先安裝JDK和Web服務(wù)器。1.安裝JDK

按照提示安裝完成JDK后,需要配置“環(huán)境變量”的“系統(tǒng)變量”Java_Home和Path。2.Web服務(wù)器3.安裝EclipseEclipse下載完成后,解壓到自己設(shè)置的路徑下,即可完成安裝。安裝Eclipse后,雙擊Eclipse安裝目錄下的eclipse.exe文件,啟動Eclipse。4.集成Tomcat至此,可以使用Eclipse創(chuàng)建DynamicWebProject(JavaWeb應(yīng)用),并在Tomcat下運行。1.2.2使用STS(SpringToolSuite)開發(fā)JavaWeb應(yīng)用STS是一個專為Spring開發(fā)定制的Eclipse,方便創(chuàng)建、調(diào)試、運行及維護Spring應(yīng)用。通過該工具,可以很方便地生成一個Spring工程,比如Web工程。1.2.3Spring的下載及目錄結(jié)構(gòu)

對于不使用Maven和Gradle下載的開發(fā)者,本書給出一個SpringFrameworkJAR官方直接下載路徑:/libs-release-local/org/springframework/spring/。本書采用的是spring-5.2.3.RELEASE-dist.zip。libs目錄包含開發(fā)Spring應(yīng)用所需要的JAR包和源代碼。該目錄下有三類JAR文件,其中,以RELEASE.jar結(jié)尾的文件是Spring框架class的JAR包,即開發(fā)Spring應(yīng)用所需要的JAR包;以RELEASE-javadoc.jar結(jié)尾的文件是Spring框架API文檔的壓縮包;RELEASE-sources.jar結(jié)尾的文件是Spring框架源文件的壓縮包。在libs目錄中,有四個基礎(chǔ)包:spring-core-5.2.3.RELEASE.jar、spring-beans-5.2.3.RELEASE.jar、spring-context-5.2.3.RELEASE.jar和spring-expression-5.2.3.RELEASE.jarcommons.logging的JAR包Spring框架依賴于ApacheCommonsLogging組件,該組件的JAR包可以通過官方網(wǎng)站/proper/commons-logging/download_logging.cgi下載,本書下載的是commons-logging-1.2-bin.zip,解壓縮后,即可找到commons-logging-1.2.jar。對于Spring框架的初學者,開發(fā)Spring應(yīng)用時,只需要將Spring的四個基礎(chǔ)包和commons-logging-1.2.jar復(fù)制到Web應(yīng)用的WEB-INF/lib目錄下。1.2.4第一個Spring入門程序1.使用STS創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包2.創(chuàng)建接口TestDao3.創(chuàng)建接口TestDao的實現(xiàn)類TestDaoImpl4.創(chuàng)建配置文件applicationContext.xml5.創(chuàng)建測試類1.使用STS創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包在講解SpringMVC框架前,本書的實例并沒有真正運行Web應(yīng)用。創(chuàng)建Web應(yīng)用的目的是方便添加相關(guān)JAR包。2.創(chuàng)建接口TestDaopackagedao;publicinterfaceTestDao{ publicvoidsayHello();}3.創(chuàng)建接口TestDao的實現(xiàn)類TestDaoImplpackagedao;publicclassTestDaoImplimplementsTestDao{ @Override publicvoidsayHello(){ System.out.println("Hello,Studyhard!"); }}4.創(chuàng)建配置文件applicationContext.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"> <!--將指定類TestDaoImpl配置給Spring,讓Spring創(chuàng)建其實例-->

<beanid="test"class="dao.TestDaoImpl"/></beans>

配置文件信息不需要讀者手寫,可以從Spring的幫助文檔中復(fù)制(首先使用瀏覽器打開\spring-framework-5.2.3.RELEASE\docs\spring-framework-reference\index.html,在頁面中單擊超鏈接Core,在1.2.1.ConfigurationMetadata小節(jié)下即可找到配置文件的約束信息)。5.創(chuàng)建測試類publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext,加載配置文件 //@SuppressWarnings抑制警告的關(guān)鍵字,有泛型未指定類型 @SuppressWarnings("resource")

ApplicationContextappCon=new ClassPathXmlApplicationContext("applicationContext.xml"); //通過容器獲取test實例

TestDaott=(TestDao)appCon.getBean("test");//test為配置文件中的id tt.sayHello();}主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.3Maven管理Spring應(yīng)用1.3.1Maven簡介1.3.2Maven的pom.xml1.3.3在STS中創(chuàng)建MavenWeb項目1.3.4使用Maven管理第一個Spring入門程序1.3.1Maven簡介ApacheMaven是一個軟件項目管理工具?;陧椖繉ο竽P停≒rojectObjectModel,POM)的理念,通過一段核心描述信息來管理項目構(gòu)建、報告和文檔信息。在Java項目中,Maven主要完成兩件工作:①統(tǒng)一開發(fā)規(guī)范與工具;②統(tǒng)一管理JAR包。Maven統(tǒng)一管理項目開發(fā)所需要的JAR包,但這些JAR包將不再包含在項目內(nèi)(即不在lib目錄下),而是存放于倉庫當中。1.中央倉庫2.本地倉庫1.3.2Maven的pom.xml1.properties元素2.dependencies元素3.dependency元素4.scope子元素1.properties元素

在<properties></properties>之間可以定義變量,以便在<dependency></dependency>中引用。<properties><!--spring版本號--><spring.version>5.2.3.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency></dependencies>2.dependencies元素<dependencies></dependencies>,此元素包含多個項目依賴需要使用的<dependency></dependency>元素。3.dependency元素<dependency></dependency>元素內(nèi)部通過<groupId></groupId>、<artifactId></artifactId>、<version></version>三個子元素確定唯一的依賴,也可以稱為三個坐標。<dependency> <!--groupId組織的唯一標識--> <groupId>org.springframework</groupId> <!--artifactId項目的唯一標識--> <artifactId>spring-core</artifactId> <!--version項目的版本號--> <version>${spring.version}</version></dependency>4.scope子元素

在<dependency></dependency>元素中,有時使用<scope></scope>子元素管理依賴的部署。(1)compile(編譯范圍)compile是缺省值,即默認范圍。依賴如果沒有提供范圍,那么該依賴的范圍就是編譯范圍。編譯范圍的依賴,在所有的classpath中可用,同時也會被打包發(fā)布。(2)provided(已提供范圍)provided表示已提供范圍,只有當JDK或者容器已提供該依賴才可以使用。已提供范圍的依賴不是傳遞性的,也不會被打包發(fā)布。(3)runtime(運行時范圍)runtime范圍依賴在運行和測試系統(tǒng)時需要,但在編譯時不需要。(4)test(測試范圍)test范圍依賴在一般的編譯和運行時都不需要,它們只有在測試編譯和測試運行階段可用。不會隨項目發(fā)布。(5)system(系統(tǒng)范圍)system范圍與provided范圍類似,但需要顯式提供包含依賴的JAR包,Maven不會在Repository中查找它。1.3.3在STS中創(chuàng)建MavenWeb項目1.新建Maven項目1.新建Maven項目1.新建Maven項目2.配置Maven項目2.配置Maven項目2.配置Maven項目2.配置Maven項目2.配置Maven項目2.配置Maven項目3.測試Maven項目

首先,在項目ch1_2的src/main/webapp目錄下,創(chuàng)建名為index.jsp的頁面。然后,選中index.jsp的文件名,單擊右鍵選擇RunAs->RunonServer,測試運行index.jsp頁面。1.3.4使用Maven管理第一個Spring入門程序1.Maven管理項目所依賴的JAR包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies>

spring-context定義了Spring容器,并依賴了spring-core、spring-expression、spring-aop和spring-beans。2.復(fù)制相關(guān)代碼文件

將ch1_1的src目錄下的dao包、test包和applicationContext.xml配置文件復(fù)制到ch1_2的src/main/java目錄下,即可進行代碼測試。主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.4SpringIoC1.4.1SpringIoC的基本概念1.4.2Spring的常用注解1.4.3基于注解的依賴注入1.4.4Java配置1.4.1SpringIoC的基本概念

控制反轉(zhuǎn)(IOC)是一個比較抽象的概念,是Spring框架的核心,用來消減計算機程序的耦合問題。依賴注入(DI)是IoC的另外一種說法,只是從不同的角度,描述相同的概念。

當Spring框架出現(xiàn)后,對象的實例不再由調(diào)用者來創(chuàng)建,而是由Spring容器(比如面包店)來創(chuàng)建。Spring容器會負責控制程序之間的關(guān)系(比如面包店負責控制您與面包的關(guān)系),而不是由調(diào)用者的程序代碼直接控制。這樣,控制權(quán)由調(diào)用者轉(zhuǎn)移到Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是Spring的控制反轉(zhuǎn)。

從Spring容器角度來看,Spring容器負責將被依賴對象賦值給調(diào)用者的成員變量,相當于為調(diào)用者注入它所依賴的實例,這就是Spring的依賴注入,主要目的是為了解耦,體現(xiàn)一種“組合”的理念。1.4.2Spring的常用注解1.聲明Bean的注解1)@Component該注解是一個泛化的概念,僅僅表示一個組件對象(Bean),可以作用在任何層次上,沒有明確的角色。2)@Repository該注解用于將數(shù)據(jù)訪問層(DAO)的類標識為Bean,即注解數(shù)據(jù)訪問層Bean,其功能與@Component()相同。3)@Service該注解用于標注一個業(yè)務(wù)邏輯組件類(Service層),其功能與@Component()相同。4)@Controller該注解用于標注一個控制器組件類(SpringMVC的Controller),其功能與@Component()相同。2.注入Bean的注解1)@Autowired該注解可以對類的成員變量、方法及構(gòu)造方法進行標注,完成自動裝配的工作。通過@Autowired的使用來消除setter和getter方法。默認按照Bean的類型進行裝配。2)@Resource該注解與@Autowired功能一樣。區(qū)別在于,該注解默認是按照名稱來裝配注入的,只有當找不到與名稱匹配的Bean才會按照類型來裝配注入;而@Autowired默認按照Bean的類型進行裝配,如果想按照名稱來裝配注入,則需要結(jié)合@Qualifier注解一起使用。@Resource注解有兩個屬性:name和type。name屬性指定Bean的實例名稱,即按照名稱來裝配注入;type屬性指定Bean類型,即按照Bean的類型進行裝配。3)@Qualifier該注解與@Autowired注解配合使用。當@Autowired注解需要按照名稱來裝配注入,則需要結(jié)合該注解一起使用,Bean的實例名稱由@Qualifier注解的參數(shù)指定。1.4.3基于注解的依賴注入SpringIoC容器(ApplicationContext)負責創(chuàng)建和注入Bean。Spring提供使用XML配置、注解、Java配置以及groovy配置實現(xiàn)Bean的創(chuàng)建和注入。1.使用STS創(chuàng)建Maven項目并添加依賴的JAR包【例1-3】基于注解的依賴注入的使用過程。2.創(chuàng)建DAO層packageannotation.dao;publicinterfaceTestDao{ publicvoidsave();}packageannotation.dao;importorg.springframework.stereotype.Repository;@Repository("testDaoImpl")/**相當于@Repository,但如果在service層使用@Resource(name="testDaoImpl"),testDaoImpl不能省略。**/publicclassTestDaoImplimplementsTestDao{ @Override publicvoidsave(){ System.out.println("testDaosave"); }}3.創(chuàng)建Service層packageannotation.service;publicinterfaceTestService{ publicvoidsave();}packageannotation.service;importjavax.annotation.Resource;importorg.springframework.stereotype.Service;importannotation.dao.TestDao;@Service("testSeviceImpl")//相當于@ServicepublicclassTestSeviceImplimplementsTestService{

@Resource(name="testDaoImpl") /**相當于@Autowired,@Autowired默認按照Bean類型注入**/

privateTestDaotestDao; @Override publicvoidsave(){ testDao.save(); System.out.println("testServicesave"); }}4.創(chuàng)建Controller層packageannotation.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importannotation.service.TestService;@ControllerpublicclassTestController{

@Autowired privateTestServicetestService; publicvoidsave(){ testService.save(); System.out.println("testControllersave"); }}5.創(chuàng)建配置類packageannotation.config;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;@Configuration//聲明當前類是一個配置類(見1.4.4節(jié)),相當于一個Spring的XML配置文件。@ComponentScan("annotation")//自動掃描annotation包及其子包下使用的注解,并注冊為Bean。/*相當于在Spring的XML配置文件中使用<context:component-scanbase-package="Bean所在的包路徑"/>語句。*/publicclassConfigAnnotation{}6.創(chuàng)建測試類packageannotation.test;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importannotation.config.ConfigAnnotation;importannotation.controller.TestController;publicclassTestAnnotation{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext

AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(ConfigAnnotation.class);

TestControllertc=appCon.getBean(TestController.class); tc.save(); appCon.close(); }}7.運行結(jié)果1.4.4Java配置Java配置是Spring4.x推薦的配置方式,它是通過@Configuration和@Bean注解來實現(xiàn)的。@Configuration注解聲明當前類是一個配置類,相當于一個Spring配置的XML文件。@Bean注解在方法上,聲明當前方法的返回值為一個Bean?!纠?-4】Java配置的使用過程。1.使用STS創(chuàng)建Maven項目并添加依賴的JAR包

使用STS創(chuàng)建一個名為ch1_4的MavenProject,并通過pom.xml文件添加項目所依賴的JAR包。這里只需要添加spring-context依賴,pom.xml文件內(nèi)容,不再贅述。2.創(chuàng)建DAO層packagedao;//此處沒有使用@Repository聲明BeanpublicclassTestDao{ publicvoidsave(){ System.out.println("TestDaosave"); }}3.創(chuàng)建Service層packageservice;importdao.TestDao;//此處沒有使用@Service聲明BeanpublicclassTestService{

//此處沒有使用@Autowired注入testDao TestDaotestDao; publicvoidsetTestDao(TestDaotestDao){ this.testDao=testDao; } publicvoidsave(){ testDao.save(); }}4.創(chuàng)建Controller層packagecontroller;importservice.TestService;//此處沒有使用@Controller聲明BeanpublicclassTestController{

//此處沒有使用@Autowired注入testService TestServicetestService; publicvoidsetTestService(TestServicetestService){ this.testService=testService; } publicvoidsave(){ testService.save(); }}5.創(chuàng)建配置類在配置類中使用@Bean注解定義0個或多個Bean。@Configuration//一個配置類,相當于一個Spring配置的XML文件;//此處沒有使用包掃描,是因為所有Bean都在此類中通過@Bean注解定義了。publicclassJavaConfig{

@Bean publicTestDaogetTestDao(){ returnnewTestDao(); }

@Bean publicTestServicegetTestService(){ TestServicets=newTestService(); //使用set方法注入testDao ts.setTestDao(getTestDao()); returnts; }

@Bean publicTestControllergetTestController(){ TestControllertc=newTestController(); //使用set方法注入testService tc.setTestService(getTestService()); returntc; }}主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.5SpringAOP1.5.1SpringAOP的基本概念1.5.2基于注解開發(fā)AspectJ1.5.1SpringAOP的基本概念2.AOP的術(shù)語1)切面切面(Aspect)是指封裝橫切到系統(tǒng)功能(如事務(wù)處理)的類。2)連接點連接點(Joinpoint)是指程序運行中的一些時間點,如方法的調(diào)用或異常的拋出。3)切入點切入點(Pointcut)是指那些需要處理的連接點。在SpringAOP中,所有的方法執(zhí)行都是連接點,而切入點是一個描述信息,它修飾的是連接點,通過切入點確定哪些連接點需要被處理。4)通知(增強處理)由切面添加到特定的連接點(滿足切入點規(guī)則)的一段代碼,即在定義好的切入點處所要執(zhí)行的程序代碼??梢詫⑵淅斫鉃榍忻骈_啟后,切面的方法。因此,通知是切面的具體實現(xiàn)。5)引入引入(Introduction)允許在現(xiàn)有的實現(xiàn)類中添加自定義的方法和屬性。6)目標對象目標對象(TargetObject)是指所有被通知的對象。如果AOP框架使用運行時代理的方式(動態(tài)的AOP)來實現(xiàn)切面,那么通知對象總是一個代理對象。7)代理代理(Proxy)是通知應(yīng)用到目標對象之后,被動態(tài)創(chuàng)建的對象。8)組入組入(Weaving)是將切面代碼插入到目標對象上,從而生成代理對象的過程。根據(jù)不同的實現(xiàn)技術(shù),AOP組入有三種方式:編譯器組入,需要有特殊的Java編譯器;類裝載期組入,需要有特殊的類裝載器;動態(tài)代理組入,在運行期為目標類添加通知生成子類的方式。SpringAOP框架默認采用動態(tài)代理組入,而AspectJ(基于Java語言的AOP框架)采用編譯器組入和類裝載器組入。1.5.2基于注解開發(fā)AspectJ1.環(huán)繞通知環(huán)繞通知是在目標方法執(zhí)行前和執(zhí)行后實施增強,可以應(yīng)用于日志記錄、事務(wù)處理等。2.前置通知前置通知是在目標方法執(zhí)行前實施增強,可應(yīng)用于權(quán)限管理等。3.后置返回通知后置返回通知是在目標方法成功執(zhí)行后實施增強,可應(yīng)用于關(guān)閉流、刪除臨時文件等。4.后置(最終)通知后置通知是在目標方法執(zhí)行后實施增強,與后置返回通知不同的是,不管是否發(fā)生異常都要執(zhí)行該通知,可應(yīng)用于釋放資源。5.異常通知異常通知是在方法拋出異常后實施增強,可以應(yīng)用于處理異常、記錄日志等。6.引入通知引入通知是在目標類中添加一些新的方法和屬性,可以應(yīng)用于修改目標類(增強類)。注解名稱描

述@Aspect用于定義一個切面,注解在切面類上@Pointcut用于定義切入點表達式。在使用時,需要定義一個切入點方法。該方法是一個返回值void,且方法體為空的普通方法@Before用于定義前置通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式@AfterReturning用于定義后置返回通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式@Around用于定義環(huán)繞通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式@AfterThrowing用于定義異常通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式。另外,還有一個throwing屬性用于訪問目標方法拋出的異常,該屬性值與異常通知方法中同名的形參一致@After用于定義后置(最終)通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式【例1-5】基于注解開發(fā)AspectJ的過程1.使用STS創(chuàng)建Maven項目并添加依賴的JAR包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> </dependencies>2.創(chuàng)建接口及實現(xiàn)類

創(chuàng)建接口TestDao和接口實現(xiàn)類TestDaoImpl。該實現(xiàn)類作為目標類,在切面類中對其方法進行增強處理。使用注解@Repository將目標類aspectj.dao.TestDaoImpl注解為目標對象。3.創(chuàng)建切面類

創(chuàng)建切面類MyAspect。在該類中,首先使用@Aspect注解定義一個切面類,由于該類在Spring中是作為組件使用的,所以還需要使用@Component注解。然后,使用@Pointcut注解定義切入點表達式,并通過定義方法來表示切入點名稱。最后在每個通知方法上添加相應(yīng)的注解,并將切入點名稱作為參數(shù)傳遞給需要執(zhí)行增強的通知方法。4.創(chuàng)建配置類

創(chuàng)建配置類AspectjAOPConfig。在該類中使用@Configuration注解聲明此類為配置類;使用@ComponentScan("aspectj")注解自動掃描aspectj包下使用的注解;使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ的支持。5.創(chuàng)建測試類publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(AspectjAOPConfig.class); //從容器中,獲取增強后的目標對象 TestDaotestDaoAdvice=appCon.getBean(TestDao.class); //執(zhí)行方法 testDaoAdvice.save(); System.out.println("================"); testDaoAdvice.modify(); System.out.println("================"); testDaoAdvice.delete(); appCon.close(); }6.運行測試類主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.6SpringBean1.6.1Bean的實例化1.6.2Bean的作用域1.6.3Bean的初始化和銷毀1.6.1Bean的實例化

Spring框架實例化Bean有三種方式:構(gòu)造方法實例化、靜態(tài)工廠實例化和實例工廠實例化(其中,最常用的實例方法是構(gòu)造方法實例化)。

【例1-8】Bean的實例化過程。該實例的具體要求是:分別使用構(gòu)造方法、靜態(tài)工廠和實例工廠實例化Bean。1.6.2Bean的作用域

在Spring中為Bean的實例定義了如表1.2所示的作用域,通過@Scope注解來實現(xiàn)。作用域名稱描述singleton默認的作用域,使用singleton定義的Bean在Spring容器中只有一個Bean實例。prototypeSpring容器每次獲取prototype定義的Bean,容器都將創(chuàng)建一個新的Bean實例。request在一次HTTP請求中容器將返回一個Bean實例,不同的HTTP請求返回不同的Bean實例。僅在WebSpring應(yīng)用程序上下文中使用。session在一個HTTPSession中,容器將返回同一個Bean實例。僅在WebSpring應(yīng)用程序上下文中使用。application為每個ServletContext對象創(chuàng)建一個實例,即同一個應(yīng)用共享一個Bean實例。僅在WebSpring應(yīng)用程序上下文中使用。websocket為每個WebSocket對象創(chuàng)建一個Bean實例。僅在WebSpring應(yīng)用程序上下文中使用。

【例1-7】Bean的作用域。該實例的具體要求是:分別定義作用域為singleton和prototype的兩個Bean。1.6.3Bean的初始化和銷毀

可以使用@Bean注解的initMethod和destroyMethod屬性(相當于XML配置的init-method和destroy-method)對Bean進行初始化和銷毀。

【例1-8】Bean的初始化和銷毀。該實例的具體要求是:首先,定義一個MyService類,在該類中定義構(gòu)造方法、初始化方法和銷毀方法。然后,在Java配置類,使用@Bean注解的initMethod和destroyMethod屬性對MyService對象進行初始化和銷毀。主要內(nèi)容Spring概述Spring開發(fā)環(huán)境的構(gòu)建Maven管理Spring應(yīng)用SpringIoCSpringAOPSpringBeanSpring的數(shù)據(jù)庫編程1.7Spring的數(shù)據(jù)庫編程1.7.1SpringJDBC的XML配置1.7.2SpringJDBC的Java配置1.7.3SpringJdbcTemplate的常用方法1.7.4基于@Transactional注解的聲明式事務(wù)管理1.7.5如何在事務(wù)處理中捕獲異常1.7.1SpringJDBC的XML配置<!--配置數(shù)據(jù)源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL數(shù)據(jù)庫驅(qū)動--> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"/> <!--連接數(shù)據(jù)庫的URL--> <propertyname="url"value="jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8"/> <!--連接數(shù)據(jù)庫的用戶名--> <propertyname="username"value="root"/> <!--連接數(shù)據(jù)庫的密碼--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>1.7.2SpringJDBC的Java配置@Configuration//通過該注解來表明該類是一個Spring的配置,相當于一個xml文件@ComponentScan(basePackages="dao")//配置掃描包@PropertySource(value={"classpath:perties"},ignoreResourceNotFound=true)//配置多個屬性文件時value={"classpath:perties","xx","xxx"}publicclassSpringJDBCConfig{ @Value("${jdbc.url}")//注入屬性文件perties中的jdbc.urlprivateStringjdbcUrl;@Value("${jdbc.driverClassName}")privateStringjdbcDriverClassName;@Value("${jdbc.username}")privateStringjdbcUsername;@Value("${jdbc.password}")privateStringjdbcPassword;/***配置數(shù)據(jù)源*/@BeanpublicDriverManagerDataSourcedataSource(){ DriverManagerDataSourcemyDataSource=newDriverManagerDataSource();//數(shù)據(jù)庫驅(qū)動myDataSource.setDriverClassName(jdbcDriverCla

溫馨提示

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

評論

0/150

提交評論