《 Spring Boot從入門到實戰(第2版·微課視頻版)》 課件 第1章 Spring基礎_第1頁
《 Spring Boot從入門到實戰(第2版·微課視頻版)》 課件 第1章 Spring基礎_第2頁
《 Spring Boot從入門到實戰(第2版·微課視頻版)》 課件 第1章 Spring基礎_第3頁
《 Spring Boot從入門到實戰(第2版·微課視頻版)》 課件 第1章 Spring基礎_第4頁
《 Spring Boot從入門到實戰(第2版·微課視頻版)》 課件 第1章 Spring基礎_第5頁
已閱讀5頁,還剩96頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第1章Spring基礎學習目的與要求本章重點講解Spring的基礎知識。通過本章的學習,了解Spring的體系結構,理解SpringIoC與AOP的基本原理,了解SpringBean的生命周期、實例化以及作用域,掌握Eclipse開發Spring程序的具體步驟,掌握Spring的事務管理。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

目錄1.1Spring概述1.2Spring開發環境的構建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數據庫編程《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.1.1Spring的由來Spring是一個輕量級Java

企業級應用程序開發框架,最早由RodJohnson創建,目的是為了解決企業級應用開發的業務邏輯層和其他各層的耦合問題。它是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架,為開發Java應用程序提供全面的基礎架構支持。Spring負責基礎架構,因此Java開發者可以專注于應用程序的開發。SpringFramework6.0于2022年11月正式發布,這是2023

年及以后新一代框架的開始,包含OpenJDK和Java

生態系統中當前和即將到來的創新。SpringFramework6.0作為重大更新,要求使用Java17或更高版本,并且已遷移到JakartaEE9+(在jakarta命名空間中取代了以前基于javax的API),以及對其他基礎設施的修改。基于這些變化,SpringFramework6.0支持最新的Web

容器,如Tomcat10,以及最新的持久性框架HibernateORM6.1。這些特性僅可用于ServletAPI和JPA的jakarta命名空間變體。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.1.2Spring的體系結構《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.CoreContainerSpring的CoreContainer是其它模塊建立的基礎,由Beans(spring-beans)、Core(spring-core)、Context(spring-context)和Expression(spring-expression,Spring表達式語言)等模塊組成。spring-beans模塊:提供了BeanFactory,是工廠模式的一個經典實現,Spring將管理對象稱為Bean。spring-core模塊:提供了框架的基本組成部分,包括控制反轉(InversionofControl,IoC)和依賴注入(DependencyInjection,DI)功能。spring-context模塊:建立在spring-beans和spring-core模塊基礎上,提供一個框架式的對象訪問方式,是訪問定義和配置的任何對象媒介。spring-expression模塊:提供了強大的表達式語言去支持運行時查詢和操作對象圖。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.AOP和InstrumentationSpring框架中與AOP和Instrumentation相關的模塊有AOP(spring-aop)模塊、Aspects(spring-aspects)模塊以及Instrumentation(spring-instrument)模塊。spring-aop模塊:提供了一個符合AOP要求的面向切面的編程實現,允許定義方法攔截器和切入點,將代碼按照功能進行分離,以便干凈地解耦。spring-aspects模塊:提供了與AspectJ的集成功能,AspectJ是一個功能強大且成熟的AOP框架。spring-instrument模塊:提供了類植入(Instrumentation)支持和類加載器的實現,可以在特定的應用服務器中使用。Instrumentation提供了一種虛擬機級別支持的AOP實現方式,使得開發者無需對JDK做任何升級和改動,就可以實現某些AOP的功能。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.MessagingSpring4.0以后新增了Messaging(spring-messaging)模塊,該模塊提供了對消息傳遞體系結構和協議的支持。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.DataAccess/Integration數據訪問/集成層由JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和Transactions(spring-tx)模塊組成。spring-jdbc模塊:提供了一個JDBC的抽象層,消除了繁瑣的JDBC編碼和數據庫廠商特有的錯誤代碼解析。spring-orm模塊:為流行的對象關系映射(Object-RelationalMapping)API提供集成層,包括JPA和Hibernate。spring-oxm模塊:提供了一個支持對象/XML映射的抽象層實現,如JAXB、Castor、JiBX和XStream。spring-jms模塊(JavaMessagingService):指Java消息傳遞服務,包含用于生產和使用消息的功能。自Spring4.1后,提供了與spring-messaging模塊的集成。spring-tx模塊(事務模塊):支持用于實現特殊接口和所有POJO(普通Java對象)類的編程和聲明式事務管理。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.WebWeb層由Web(spring-web)、WebMVC(spring-webmvc)、WebSocket(spring-websocket)和WebFlux(spring-webflux)模塊組成。spring-web模塊:提供了基本的Web開發集成功能。例如:多文件上傳功能、使用Servlet監聽器初始化一個IoC容器以及Web應用上下文。spring-webmvc模塊:也稱為Web-Servlet模塊,包含用于Web應用程序的SpringMVC和RESTWebServices實現。SpringMVC框架提供了領域模型代碼和Web表單之間的清晰分離,并與SpringFramework的所有其它功能集成,本書后續章節將會詳細講解SpringMVC框架。spring-websocket模塊:Spring4.0后新增的模塊,它提供了WebSocket和SockJS的實現,主要是與Web前端的全雙工通訊的協議。spring-webflux是一個新的非堵塞函數式ReactiveWeb框架,可以用來建立異步的、非阻塞、事件驅動的服務,并且擴展性非常好。(該模塊是Spring5新增模塊)《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

6.TestTest(spring-test)模塊:支持使用JUnit或TestNG對Spring組件進行單元測試和集成測試。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

目錄1.1Spring概述1.2Spring開發環境的構建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數據庫編程《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.1使用Eclipse開發JavaWeb應用Eclipse是一個可用于開發Web應用的IDE工具。登錄/ide,選擇JavaEE,根據操作系統的位數,下載相應的Eclipse。本書采用的是“eclipse-jee-2022-09-M2-win32-x86_64.zip”。使用Eclipse之前,需要對JDK、Web服務器和Eclipse進行一些必要的配置。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.安裝JDK可以登錄Oracle官方網站/technetwork/java,根據操作系統的位數,下載相應的JDK,例如64位的系統使用64位的JDK。本書采用的JDK是jdk-18_windows-x64_bin.exe。JDK18的安裝程序默認將常用的開發工具(包括java.exe、javac.exe、javaw.exe以及jshell.exe)自動復制到C:\ProgramFiles\CommonFiles\Oracle\Java\javapath目錄中,并將該目錄自動添加到Path環境變量中。因此,如果僅需要使用這些常用的開發工具,不再需要配置環境變量。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.Web服務器目前,比較常用的Web服務器包括Tomcat,JRun,Resin,WebSphere,WebLogic等,本書采用的是Tomcat10.0。登錄Apache

軟件基金會的官方網站http://jakarta.A/tomcat,下載Tomcat10.0的免安裝版(本書采用apache-tomcat-10.0.23-windows-x64.zip)。登錄網站后,首先在Download里選擇Tomcat10,然后在BinaryDistributions的Core中選擇相應版本即可下載。將下載的apache-tomcat-10.0.23-windows-x64.zip解壓到某個目錄下即可完成安裝。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.安裝EclipseEclipse下載完成后,解壓到自己設置的路徑下,即可完成安裝。Eclipse安裝后,雙擊Eclipse安裝目錄下的eclipse.exe文件,啟動Eclipse。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.集成Tomcat啟動Eclipse,選擇【Window】/【Preferences】菜單項,在彈出的對話框中選擇【Server】/【RuntimeEnvironments】命令。在彈出的窗口中,單擊【Add】按鈕,彈出如圖1.6所示的【NewServerRuntimeEnvironment】界面,在此可以配置各種版本的Web服務器。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.2Spring的下載使用Spring框架開發應用程序時,需要引用Spring框架自身的JAR包。SpringFramework6.0.0的JAR包可以從Maven

中央庫獲得。Spring的JAR包中,有四個基礎包:spring-core-6.0.0.jar、spring-beans-6.0.0.jar、spring-context-6.0.0.jar和spring-expression-6.0.0.jar,分別對應Spring核心容器的四個模塊:Spring-core模塊、Spring-beans模塊、Spring-context模塊和Spring-expression模塊。對于Spring框架的初學者,開發Spring應用時,只需要將Spring的四個基礎包和SpringCommonsLoggingBridge對應的JAR包spring-jcl-6.0.0.jar復制到Web應用的WEB-INF/lib目錄下即可。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.3第一個Spring入門程序1.使用Eclipse創建Web應用并導入JAR包使用Eclipse創建一個名為ch1_1的DynamicWebProject應用,并將Spring的四個基礎包和SpringCommonsLoggingBridge對應的JAR包spring-jcl-6.0.0.jar復制到ch1_1的WEB-INF/lib目錄中,如圖1.8所示。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.3第一個Spring入門程序2.創建接口TestDao在模塊ch1_1的src/main/java目錄下,創建一個dao包,并在dao包中創建接口TestDao,接口中定義一個sayHello()方法,代碼如下:packagedao;publicinterfaceTestDao{ publicvoidsayHello();}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.3第一個Spring入門程序3. 創建接口TestDao的實現類TestDaoImplpackagedao;publicclassTestDaoImplimplementsTestDao{ @Override publicvoidsayHello(){ System.out.println("Hello,Studyhard!"); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.3第一個Spring入門程序4.創建配置文件applicationContext.xml在模塊ch1_1的src/main/java目錄下,創建Spring的配置文件applicationContext.xml,并在該文件中使用實現類TestDaoImpl創建一個id為test的Bean,代碼如下:<?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創建其實例-->

<beanid="test"class="dao.TestDaoImpl"/></beans>《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.2.3第一個Spring入門程序5.創建測試類publicclassTest{ privatestaticApplicationContextappCon; publicstaticvoidmain(String[]args){

appCon=newClassPathXmlApplicationContext("applicationContext.xml"); //從容器中獲取test實例

TestDaott=appCon.getBean("test",TestDao.class);//test為配置文件中的id tt.sayHello(); }}執行上述main()方法后,將在控制臺輸出“Hello,Studyhard!”。上述main()方法中并沒有使用new運算符創建TestDaoImpl類的對象,而是通過SpringIoC容器來獲取的實現類對象,這就是SpringIoC的工作機制。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

目錄1.1Spring概述1.2Spring開發環境的構建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數據庫編程《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.3.1SpringIoC的基本概念控制反轉(InversionofControl,IoC)是一個比較抽象的概念,是Spring框架的核心,用來消減計算機程序的耦合問題。依賴注入(DependencyInjection,DI)是IoC的另外一種說法,只是從不同的角度,描述相同的概念。當某個Java對象(調用者,比如您)需要調用另一個Java對象(被調用者,即被依賴對象,比如面包)時,在傳統編程模式下,調用者通常會采用“new

被調用者”的代碼方式來創建對象(比如您自己制作面包)。這種方式會增加調用者與被調用者之間的耦合性,不利于后期代碼的升級與維護。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.3.1SpringIoC的基本概念當Spring框架出現后,對象的實例不再由調用者來創建,而是由Spring容器(比如面包店)來創建。Spring容器會負責控制程序之間的關系(比如面包店負責控制您與面包的關系),而不是由調用者的程序代碼直接控制。這樣,控制權由調用者轉移到Spring容器,控制權發生了反轉,這就是Spring的控制反轉。從Spring容器角度來看,Spring容器負責將被依賴對象賦值給調用者的成員變量,相當于為調用者注入它所依賴的實例,這就是Spring的依賴注入,主要目的是為了解耦,體現一種“組合”的理念。綜上所述,控制反轉是一種通過描述(在Spring中可以是XML或注解)并通過第三方去產生或獲取特定對象的方式。在Spring中實現控制反轉的是IoC容器,其實現方法是依賴注入。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.3.2Spring的常用注解在Spring框架中,盡管使用XML配置文件可以很簡單地裝配bean,但如果應用中有大量的bean需要裝配時,會導致XML配置文件過于龐大,不方便以后的升級維護。因此,更多的時候推薦開發者使用注解(annotation)的方式去裝配bean。需要注意的是,基于注解的裝配需要使用<context:component-scan>元素或@ComponentScan注解定義包(注解所在的包)掃描的規則,然后根據定義的規則找出哪些類(bean)需要自動裝配到Spring容器中,然后交由Spring進行統一管理。Spring框架基于AOP編程(面向切面編程)實現注解解析,因此,在使用注解編程時,需要導入spring-aop-6.0.0.jar包。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.聲明Bean的注解1)@Component該注解是一個泛化的概念,僅僅表示一個組件對象(bean),可以作用在任何層次上,沒有明確的角色。2)@Repository該注解用于將數據訪問層(DAO)的類標識為bean,即注解數據訪問層bean,其功能與@Component()相同。3)@Service該注解用于標注一個業務邏輯組件類(Service層),其功能與@Component()相同。4)@Controller該注解用于標注一個控制器組件類(SpringMVC的Controller),其功能與@Component()相同。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.注入Bean的注解1)@Autowired該注解可以對類成員變量、方法及構造方法進行標注,完成自動裝配的工作。通過@Autowired的使用來消除setter

和getter方法。默認按照bean的類型進行裝配。2)@Resource該注解與@Autowired功能一樣。區別在于,該注解默認是按照名稱來裝配注入的,只有當找不到與名稱匹配的bean才會按照類型來裝配注入;而@Autowired默認按照bean的類型進行裝配,如果想按照名稱來裝配注入,則需要結合@Qualifier注解一起使用。@Resource注解有兩個屬性:name和type。name屬性指定bean實例名稱,即按照名稱來裝配注入;type屬性指定bean類型,即按照bean的類型進行裝配。3)@Qualifier該注解與@Autowired注解配合使用。當@Autowired注解需要按照名稱來裝配注入,則需要結合該注解一起使用,bean的實例名稱由@Qualifier注解的參數指定。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.3.3基于注解的依賴注入SpringIoC容器(ApplicationContext)負責創建和注入bean。Spring提供使用XML配置、注解、Java配置以及groovy配置實現bean的創建和注入。本書盡量使用注解(@Component、@Repository、@Service以及@Controller等業務bean的配置)和Java配置(全局配置如數據庫、MVC等相關配置)完全代替XML配置,這也是SpringBoot推薦的配置方式。【例1-2】基于注解的依賴注入的使用過程。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.使用Eclipse創建Web應用并導入JAR包使用Eclipse創建一個名為ch1_2的DynamicWebproject,并將Spring的四個基礎包、SpringCommonsLoggingBridge對應的JAR包spring-jcl-6.0.0.jar以及spring-aop-6.0.0.jar(本節掃描注解,需要事先導入SpringAOP的JAR包)復制到ch1_2的WEB-INF/lib目錄中。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.創建DAO層在模塊ch1_2的src/main/java中,創建annotation.dao包,該包下創建TestDao接口和TestDaoImpl實現類,并將實現類TestDaoImpl使用@Repository注解標注為數據訪問層。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.創建Service層在模塊ch1_2的src/main/java中,創建annotation.service包,該包下創建TestService接口和TestSeviceImpl實現類,并將實現類TestSeviceImpl使用@Service注解標注為業務邏輯層。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.創建Controller層在模塊ch1_2的src/main/java中,創建annotation.controller包,該包下創建TestController類,并將TestController類使用@Controller注解標注為控制器層。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.創建配置類本書盡量不使用Spring的XML配置文件,而使用注解和Java配置。因此,在此需要使用@Configuration創建一個Java配置類(相當于一個Spring的XML配置文件),并通過@ComponentScan掃描使用注解的包(相當于在Spring的XML配置文件中使用<context:component-scanbase-package="Bean所在的包路徑"/>語句)。@Configuration//聲明當前類是一個配置類,相當于一個Spring的XML配置文件。@ComponentScan("annotation")//自動掃描annotation包下使用的注解,并注冊為Bean。/*相當于在Spring的XML配置文件使用<context:component-scanbase-package="Bean所在的包路徑"/>語句。*/publicclassConfigAnnotation{}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

6.創建測試類publicclassTestAnnotation{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext

AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(ConfigAnnotation.class); TestControllertc=appCon.getBean(TestController.class);

tc.save(); appCon.close(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

7.運行結果《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.3.4Java配置Java配置是Spring4.x推薦的配置方式,它是通過@Configuration和@Bean來實現的。@Configuration聲明當前類是一個配置類,相當于一個Spring配置的XML文件。@Bean注解在方法上,聲明當前方法的返回值為一個Bean。【例1-3】Java配置的使用過程。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.使用Eclipse創建Web應用并導入JAR包使用Eclipse創建一個名為ch1_3的DynamicWebproject,并導入與ch1_2相同的JAR包到WEB-INF/lib目錄中。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.創建DAO層在ch1_3應用的src/main/java中,創建dao包,該包下創建TestDao類。此類中沒有使用@Repository注解為數據訪問層,具體代碼如下:packagedao;//此處沒有使用@Repository聲明BeanpublicclassTestDao{ publicvoidsave(){ System.out.println("TestDaosave"); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.創建Service層在ch1_3應用的src/main/java中,創建service包,該包下創建TestService類。此類中沒有使用@Service注解為業務邏輯層,具體代碼如下:packageservice;importdao.TestDao;//此處沒有使用@Service聲明BeanpublicclassTestService{ //此處沒有使用@Autowired注入testDao TestDaotestDao; publicvoidsetTestDao(TestDaotestDao){ this.testDao=testDao;

}

//……}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.創建Controller層在ch1_3應用的src/main/java中,創建controller包,該包下創建TestController類。此類中沒有使用@Controller注解為控制器層,具體代碼如下:packagecontroller;importservice.TestService;//此處沒有使用@Controller聲明BeanpublicclassTestController{ //此處沒有使用@Autowired注入testService TestServicetestService; publicvoidsetTestService(TestServicetestService){ this.testService=testService;

}

//……}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.創建配置類在ch1_3應用的src/main/java中,創建javaConfig包,該包下創建JavaConfig配置類。此類中使用@Configuration注解該類為一個配置類,相當于一個Spring配置的XML文件。在配置類中使用@Bean注解定義0個或多個Bean,具體代碼如下:@ConfigurationpublicclassJavaConfig{

@Bean publicTestDaogetTestDao(){ returnnewTestDao(); }

@Bean publicTestServicegetTestService(){

}

@Bean publicTestControllergetTestController(){

}}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

6.創建測試類在ch1_3應用的javaConfig包下,創建測試類TestConfig,具體代碼如下:publicclassTestConfig{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext

AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class); TestControllertc=appCon.getBean(TestController.class); tc.save(); appCon.close(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

7.運行結果從應用ch1_2與應用ch1_3對比可以看出,有時候使用Java配置反而更加繁瑣。何時使用Java配置?何時使用注解配置?作者的觀點是:全局配置盡量使用Java配置,如數據庫相關的配置;業務bean的配置盡量使用注解配置,如數據訪問層、業務邏輯層、控制器層等相關的配置。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

目錄1.1Spring概述1.2Spring開發環境的構建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數據庫編程《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.4SpringAOPSpringAOP是Spring框架體系結構中非常重要的功能模塊之一,該模塊提供了面向切面編程實現。面向切面編程在事務處理、日志記錄、安全控制等操作中被廣泛使用。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.4.1SpringAOP的基本概念1.AOP的概念AOP(Aspect-OrientedProgramming),即面向切面編程。它與OOP(Object-OrientedProgramming,面向對象編程)相輔相成。在OOP

中,以類作為程序的基本單元,而AOP中的基本單元是Aspect(切面)。在業務處理代碼中,通常都有日志記錄、性能統計、安全控制、事務處理、異常處理等操作。盡管使用OOP可以通過封裝或繼承的方式達到代碼的重用,但仍然存在同樣的代碼分散到各個方法中。因此,采用OOP處理日志記錄等操作,不僅增加了開發者的工作量,而且提高了升級維護的困難。為了解決此類問題,AOP思想應運而生。AOP采取橫向抽取機制,即將分散在各個方法中的重復代碼提取出來,然后在程序編譯或運行階段,再將這些抽取出來的代碼應用到需要執行的地方。但是AOP不是OOP的替代品,而是OOP的補充,它們相輔相成。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.AOP的概念在AOP中,橫向抽取機制的類與切面的關系,如右圖所示。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.AOP的術語1)切面切面(Aspect)是指封裝橫切到系統功能(如事務處理)的類。2)連接點連接點(Joinpoint)是指程序運行中的一些時間點,如方法的調用或異常的拋出。3)切入點切入點(Pointcut)是指那些需要處理的連接點。在SpringAOP中,所有的方法執行都是連接點,而切入點是一個描述信息,它修飾的是連接點,通過切入點確定哪些連接點需要被處理。切面、連接點和切入點的關系如右圖所示。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.AOP的術語4)通知(增強處理)由切面添加到特定的連接點(滿足切入點規則)的一段代碼,即在定義好的切入點處所要執行的程序代碼。可以將其理解為切面開啟后,切面的方法。因此,通知是切面的具體實現。5)引入引入(Introduction)允許在現有的實現類中添加自定義的方法和屬性。6)目標對象目標對象(TargetObject)是指所有被通知的對象。如果AOP

框架使用運行時代理的方式(動態的AOP)來實現切面,那么通知對象總是一個代理對象。7)代理代理(Proxy)是通知應用到目標對象之后,被動態創建的對象。8)組入組入(Weaving)是將切面代碼插入到目標對象上,從而生成代理對象的過程。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.4.2基于注解開發AspectJ在講解AspectJ之前,先了解一下Spring的通知類型。根據Spring中通知在目標類方法的連接點位置,可以分為6種如下類型:1.環繞通知環繞通知是在目標方法執行前和執行后實施增強,可以應用于日志記錄、事務處理等功能。2.前置通知前置通知是在目標方法執行前實施增強,可應用于權限管理等功能。3.后置返回通知后置返回通知是在目標方法成功執行后實施增強,可應用于關閉流、刪除臨時文件等功能。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.4.2基于注解開發AspectJ4.后置(最終)通知后置通知是在目標方法執行后實施增強,與后置返回通知不同的是,不管是否發生異常都要執行該通知,可應用于釋放資源。5.異常通知異常通知是在方法拋出異常后實施增強,可以應用于處理異常、記錄日志等功能。6.引入通知引入通知是在目標類中添加一些新的方法和屬性,可以應用于修改目標類(增強類)。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.4.2基于注解開發AspectJ注解名稱描

述@Aspect用于定義一個切面,注解在切面類上@Pointcut用于定義切入點表達式。在使用時,需要定義一個切入點方法。該方法是一個返回值void,且方法體為空的普通方法@Before用于定義前置通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式@AfterReturning用于定義后置返回通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式@Around用于定義環繞通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式@AfterThrowing用于定義異常通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式。另外,還有一個throwing屬性用于訪問目標方法拋出的異常,該屬性值與異常通知方法中同名的形參一致@After用于定義后置(最終)通知。在使用時,通常為其指定value屬性值,該值可以是已有的切入點,也可以直接定義切入點表達式《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.4.2基于注解開發AspectJ【例1-4】基于注解開發AspectJ的過程。1.使用Eclipse創建Web應用并導入JAR包創建一個名為ch1_4的DynamicWebProject,并將Spring的四個基礎包、SpringCommonsLoggingBridge對應的JAR包spring-jcl-6.0.0.jar、spring-aop-6.0.0.jar、spring-aspects-6.0.0.jar(Spring為AspectJ提供的實現)以及AspectJ框架所提供的規范包aspectjweaver-.jar(/artifact/org.aspectj/aspectjweaver/)復制到ch1_4的WEB-INF/lib目錄中。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.創建接口及實現類在模塊ch1_4的src/main/java目錄下,創建一個名為aspectj.dao的包,并在該包中創建接口TestDao和接口實現類TestDaoImpl。該實現類作為目標類,在切面類中對其方法進行增強處理。使用注解@Repository將目標類aspectj.dao.TestDaoImpl注解為目標對象。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.創建切面類在模塊ch1_4的src/main/java目錄下,創建aspectj.annotation包,在該包中創建切面類MyAspect。在該類中,首先使用@Aspect注解定義一個切面類,由于該類在Spring中是作為組件使用的,所以還需要使用@Component注解。然后,使用@Pointcut注解切入點表達式,并通過定義方法來表示切入點名稱。最后在每個通知方法上添加相應的注解,并將切入點名稱作為參數傳遞給需要執行增強的通知方法。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.創建配置類在模塊ch1_4的src/main/java目錄下,創建aspectj.config包,在該包中創建配置類AspectjAOPConfig。在該類中使用@Configuration注解聲明此類為配置類;使用@ComponentScan("aspectj")注解自動掃描aspectj包下使用的注解;使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ的支持。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.創建測試類publicclassAOPTest{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(AspectjAOPConfig.class); //從容器中,獲取增強后的目標對象

TestDaotestDaoAdvice=appCon.getBean(TestDao.class); //執行方法

testDaoAdvice.save(); System.out.println("================");

testDaoAdvice.modify(); System.out.println("================");

testDaoAdvice.delete(); appCon.close(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

6.運行測試類《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

目錄1.1Spring概述1.2Spring開發環境的構建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數據庫編程《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.5SpringBean在Spring的應用中,SpringIoC容器可以創建、裝配和配置應用組件對象,這里的組件對象稱為Bean。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.5.1Bean的實例化Spring框架實例化bean有三種方式:構造方法實例化、靜態工廠實例化和實例工廠實例化(其中,最常用的實例方法是構造方法實例化)。使用工廠實例化具有解耦、降低代碼復用等優點。【例1-5】bean的實例化過程。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.使用Eclipse創建Web應用并導入JAR包使用Eclipse創建一個名為ch1_5的DynamicWebproject,并導入與ch1_2相同的JAR包到WEB-INF/lib目錄中。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.創建實例化bean的類在模塊ch1_5的src/main/java目錄下,創建包instance,并在該包中創建BeanClass、BeanInstanceFactory以及BeanStaticFactory等實例化bean的類。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.創建配置類在模塊ch1_5的src/main/java目錄下,創建包config,并在該包中創建配置類JavaConfig。在該配置類中使用@Bean定義3個Bean。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.創建測試類publicclassTestBean{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class);

BeanClassb1=(BeanClass)appCon.getBean("beanClass"); System.out.println(b1+b1.message);

BeanClassb2=(BeanClass)appCon.getBean("beanStaticFactory"); System.out.println(b2+b2.message);

BeanClassb3=(BeanClass)appCon.getBean("beanInstanceFactory"); System.out.println(b3+b3.message); appCon.close(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.運行測試類《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.5.2Bean的作用域在Spring中,不僅可以完成bean的實例化,還可以為bean指定作用域,通過@Scope注解來實現。【例1-6】bean的作用域。作用域名稱描述singleton默認的作用域,使用singleton定義的Bean在Spring容器中只有一個Bean實例。prototypeSpring容器每次獲取prototype定義的Bean,容器都將創建一個新的Bean實例。request在一次HTTP請求中容器將返回一個Bean實例,不同的HTTP請求返回不同的Bean實例。僅在WebSpring應用程序上下文中使用。session在一個HTTPSession中,容器將返回同一個Bean實例。僅在WebSpring應用程序上下文中使用。application為每個ServletContext對象創建一個實例,即同一個應用共享一個Bean實例。僅在WebSpring應用程序上下文中使用。websocket為每個WebSocket對象創建一個Bean實例。僅在WebSpring應用程序上下文中使用。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.使用Eclipse創建Web應用并導入JAR包使用Eclipse創建一個名為ch1_6的DynamicWebproject,并導入與ch1_5相同的JAR包到WEB-INF/lib目錄中。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.編寫不同作用域的Bean在模塊ch1_6的src/main/java目錄下,創建包service,并在該包中創建SingletonService和PrototypeService類。在SingletonService類中,bean的作用域為默認作用域singleton;在PrototypeService類中,bean的作用域為prototype。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.創建配置類在ch1_6應用的src/main/java目錄下,創建包config,并在該包中創建配置類ScopeConfig,具體代碼如下:@Configuration@ComponentScan("service")publicclassScopeConfig{}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.創建測試類publicclassTestScope{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(ScopeConfig.class);

SingletonServicess1=appCon.getBean(SingletonService.class); SingletonServicess2=appCon.getBean(SingletonService.class); System.out.println(ss1); System.out.println(ss2);

PrototypeServiceps1=appCon.getBean(PrototypeService.class); PrototypeServiceps2=appCon.getBean(PrototypeService.class); System.out.println(ps1); System.out.println(ps2); appCon.close(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.運行測試類《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.5.3Bean的初始化和銷毀在實際工程應用中,經常需要在bean使用之前或之后做些必要的操作,Spring對bean的生命周期的操作提供了支持。可以使用@Bean注解的initMethod和destroyMethod屬性對bean進行初始化和銷毀。【例1-7】bean的初始化和銷毀。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.使用Eclipse創建Web應用并導入JAR包使用Eclipse創建一個名為ch1_7的DynamicWebproject,并導入與ch1_6相同的JAR包到WEB-INF/lib目錄中。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

2.創建Bean的類在模塊ch1_7的src/main/java目錄下,創建包service,并在該包中創建MyService類publicclassMyService{ publicvoidinitService(){ System.out.println(this.getClass().getName()+"執行自定義的初始化方法"); } publicMyService(){ System.out.println("執行構造方法,創建對象。"); } publicvoiddestroyService(){ System.out.println(this.getClass().getName()+"執行自定義的銷毀方法"); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

3.創建配置類@ConfigurationpublicclassJavaConfig{ //initMethod和destroyMethod指定MyService類的initService和destroyService方法

//在構造方法之后、銷毀之前執行

@Bean(initMethod="initService",destroyMethod="destroyService") publicMyServicegetMyService(){ returnnewMyService(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

4.創建測試類publicclassTestInitAndDestroy{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class);

System.out.println("獲得對象前"); MyServicems=appCon.getBean(MyService.class); System.out.println("獲得對象后"+ms); appCon.close(); }}《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

5.運行測試類《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

目錄1.1Spring概述1.2Spring開發環境的構建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數據庫編程《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.6Spring的數據庫編程數據庫編程是互聯網編程的基礎,Spring框架為開發者提供了JDBC模板模式,即jdbcTemplate,它可以簡化許多代碼,但在實際應用中jdbcTemplate并不常用。工作更多的時候,用的是Hibernate框架和MyBatis框架進行數據庫編程。《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.6.1SpringJDBC的XML配置<!--配置數據源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL數據庫驅動--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--連接數據庫的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--連接數據庫的用戶名--> <propertyname="username"value="root"/> <!--連接數據庫的密碼--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>《SpringBoot從入門到實戰(第2版·微課視頻版)》陳恒

主編,清華大學出版社,2024

1.6.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.pa

溫馨提示

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

評論

0/150

提交評論