版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章Spring基礎(chǔ)學(xué)習(xí)目的與要求本章重點(diǎn)講解Spring的基礎(chǔ)知識。通過本章的學(xué)習(xí),了解Spring的體系結(jié)構(gòu),理解SpringIoC與AOP的基本原理,了解SpringBean的生命周期、實(shí)例化以及作用域,掌握Eclipse開發(fā)Spring程序的具體步驟,掌握Spring的事務(wù)管理。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
目錄1.1Spring概述1.2Spring開發(fā)環(huán)境的構(gòu)建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數(shù)據(jù)庫編程《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.1.1Spring的由來Spring是一個(gè)輕量級Java
企業(yè)級應(yīng)用程序開發(fā)框架,最早由RodJohnson創(chuàng)建,目的是為了解決企業(yè)級應(yīng)用開發(fā)的業(yè)務(wù)邏輯層和其他各層的耦合問題。它是一個(gè)分層的JavaSE/EEfull-stack(一站式)輕量級開源框架,為開發(fā)Java應(yīng)用程序提供全面的基礎(chǔ)架構(gòu)支持。Spring負(fù)責(zé)基礎(chǔ)架構(gòu),因此Java開發(fā)者可以專注于應(yīng)用程序的開發(fā)。SpringFramework6.0于2022年11月正式發(fā)布,這是2023
年及以后新一代框架的開始,包含OpenJDK和Java
生態(tài)系統(tǒng)中當(dāng)前和即將到來的創(chuàng)新。SpringFramework6.0作為重大更新,要求使用Java17或更高版本,并且已遷移到JakartaEE9+(在jakarta命名空間中取代了以前基于javax的API),以及對其他基礎(chǔ)設(shè)施的修改?;谶@些變化,SpringFramework6.0支持最新的Web
容器,如Tomcat10,以及最新的持久性框架HibernateORM6.1。這些特性僅可用于ServletAPI和JPA的jakarta命名空間變體。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.1.2Spring的體系結(jié)構(gòu)《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.CoreContainerSpring的CoreContainer是其它模塊建立的基礎(chǔ),由Beans(spring-beans)、Core(spring-core)、Context(spring-context)和Expression(spring-expression,Spring表達(dá)式語言)等模塊組成。spring-beans模塊:提供了BeanFactory,是工廠模式的一個(gè)經(jīng)典實(shí)現(xiàn),Spring將管理對象稱為Bean。spring-core模塊:提供了框架的基本組成部分,包括控制反轉(zhuǎn)(InversionofControl,IoC)和依賴注入(DependencyInjection,DI)功能。spring-context模塊:建立在spring-beans和spring-core模塊基礎(chǔ)上,提供一個(gè)框架式的對象訪問方式,是訪問定義和配置的任何對象媒介。spring-expression模塊:提供了強(qiáng)大的表達(dá)式語言去支持運(yùn)行時(shí)查詢和操作對象圖。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.AOP和InstrumentationSpring框架中與AOP和Instrumentation相關(guān)的模塊有AOP(spring-aop)模塊、Aspects(spring-aspects)模塊以及Instrumentation(spring-instrument)模塊。spring-aop模塊:提供了一個(gè)符合AOP要求的面向切面的編程實(shí)現(xiàn),允許定義方法攔截器和切入點(diǎn),將代碼按照功能進(jìn)行分離,以便干凈地解耦。spring-aspects模塊:提供了與AspectJ的集成功能,AspectJ是一個(gè)功能強(qiáng)大且成熟的AOP框架。spring-instrument模塊:提供了類植入(Instrumentation)支持和類加載器的實(shí)現(xiàn),可以在特定的應(yīng)用服務(wù)器中使用。Instrumentation提供了一種虛擬機(jī)級別支持的AOP實(shí)現(xiàn)方式,使得開發(fā)者無需對JDK做任何升級和改動,就可以實(shí)現(xiàn)某些AOP的功能。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.MessagingSpring4.0以后新增了Messaging(spring-messaging)模塊,該模塊提供了對消息傳遞體系結(jié)構(gòu)和協(xié)議的支持。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.DataAccess/Integration數(shù)據(jù)訪問/集成層由JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和Transactions(spring-tx)模塊組成。spring-jdbc模塊:提供了一個(gè)JDBC的抽象層,消除了繁瑣的JDBC編碼和數(shù)據(jù)庫廠商特有的錯(cuò)誤代碼解析。spring-orm模塊:為流行的對象關(guān)系映射(Object-RelationalMapping)API提供集成層,包括JPA和Hibernate。spring-oxm模塊:提供了一個(gè)支持對象/XML映射的抽象層實(shí)現(xiàn),如JAXB、Castor、JiBX和XStream。spring-jms模塊(JavaMessagingService):指Java消息傳遞服務(wù),包含用于生產(chǎn)和使用消息的功能。自Spring4.1后,提供了與spring-messaging模塊的集成。spring-tx模塊(事務(wù)模塊):支持用于實(shí)現(xiàn)特殊接口和所有POJO(普通Java對象)類的編程和聲明式事務(wù)管理。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.WebWeb層由Web(spring-web)、WebMVC(spring-webmvc)、WebSocket(spring-websocket)和WebFlux(spring-webflux)模塊組成。spring-web模塊:提供了基本的Web開發(fā)集成功能。例如:多文件上傳功能、使用Servlet監(jiān)聽器初始化一個(gè)IoC容器以及Web應(yīng)用上下文。spring-webmvc模塊:也稱為Web-Servlet模塊,包含用于Web應(yīng)用程序的SpringMVC和RESTWebServices實(shí)現(xiàn)。SpringMVC框架提供了領(lǐng)域模型代碼和Web表單之間的清晰分離,并與SpringFramework的所有其它功能集成,本書后續(xù)章節(jié)將會詳細(xì)講解SpringMVC框架。spring-websocket模塊:Spring4.0后新增的模塊,它提供了WebSocket和SockJS的實(shí)現(xiàn),主要是與Web前端的全雙工通訊的協(xié)議。spring-webflux是一個(gè)新的非堵塞函數(shù)式ReactiveWeb框架,可以用來建立異步的、非阻塞、事件驅(qū)動的服務(wù),并且擴(kuò)展性非常好。(該模塊是Spring5新增模塊)《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
6.TestTest(spring-test)模塊:支持使用JUnit或TestNG對Spring組件進(jìn)行單元測試和集成測試?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
目錄1.1Spring概述1.2Spring開發(fā)環(huán)境的構(gòu)建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數(shù)據(jù)庫編程《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.1使用Eclipse開發(fā)JavaWeb應(yīng)用Eclipse是一個(gè)可用于開發(fā)Web應(yīng)用的IDE工具。登錄/ide,選擇JavaEE,根據(jù)操作系統(tǒng)的位數(shù),下載相應(yīng)的Eclipse。本書采用的是“eclipse-jee-2022-09-M2-win32-x86_64.zip”。使用Eclipse之前,需要對JDK、Web服務(wù)器和Eclipse進(jìn)行一些必要的配置?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.安裝JDK可以登錄Oracle官方網(wǎng)站/technetwork/java,根據(jù)操作系統(tǒng)的位數(shù),下載相應(yīng)的JDK,例如64位的系統(tǒng)使用64位的JDK。本書采用的JDK是jdk-18_windows-x64_bin.exe。JDK18的安裝程序默認(rèn)將常用的開發(fā)工具(包括java.exe、javac.exe、javaw.exe以及jshell.exe)自動復(fù)制到C:\ProgramFiles\CommonFiles\Oracle\Java\javapath目錄中,并將該目錄自動添加到Path環(huán)境變量中。因此,如果僅需要使用這些常用的開發(fā)工具,不再需要配置環(huán)境變量?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.Web服務(wù)器目前,比較常用的Web服務(wù)器包括Tomcat,JRun,Resin,WebSphere,WebLogic等,本書采用的是Tomcat10.0。登錄Apache
軟件基金會的官方網(wǎng)站http://jakarta.A/tomcat,下載Tomcat10.0的免安裝版(本書采用apache-tomcat-10.0.23-windows-x64.zip)。登錄網(wǎng)站后,首先在Download里選擇Tomcat10,然后在BinaryDistributions的Core中選擇相應(yīng)版本即可下載。將下載的apache-tomcat-10.0.23-windows-x64.zip解壓到某個(gè)目錄下即可完成安裝?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.安裝EclipseEclipse下載完成后,解壓到自己設(shè)置的路徑下,即可完成安裝。Eclipse安裝后,雙擊Eclipse安裝目錄下的eclipse.exe文件,啟動Eclipse?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.集成Tomcat啟動Eclipse,選擇【W(wǎng)indow】/【Preferences】菜單項(xiàng),在彈出的對話框中選擇【Server】/【RuntimeEnvironments】命令。在彈出的窗口中,單擊【Add】按鈕,彈出如圖1.6所示的【NewServerRuntimeEnvironment】界面,在此可以配置各種版本的Web服務(wù)器。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.2Spring的下載使用Spring框架開發(fā)應(yīng)用程序時(shí),需要引用Spring框架自身的JAR包。SpringFramework6.0.0的JAR包可以從Maven
中央庫獲得。Spring的JAR包中,有四個(gè)基礎(chǔ)包:spring-core-6.0.0.jar、spring-beans-6.0.0.jar、spring-context-6.0.0.jar和spring-expression-6.0.0.jar,分別對應(yīng)Spring核心容器的四個(gè)模塊:Spring-core模塊、Spring-beans模塊、Spring-context模塊和Spring-expression模塊。對于Spring框架的初學(xué)者,開發(fā)Spring應(yīng)用時(shí),只需要將Spring的四個(gè)基礎(chǔ)包和SpringCommonsLoggingBridge對應(yīng)的JAR包spring-jcl-6.0.0.jar復(fù)制到Web應(yīng)用的WEB-INF/lib目錄下即可?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.3第一個(gè)Spring入門程序1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包使用Eclipse創(chuàng)建一個(gè)名為ch1_1的DynamicWebProject應(yīng)用,并將Spring的四個(gè)基礎(chǔ)包和SpringCommonsLoggingBridge對應(yīng)的JAR包spring-jcl-6.0.0.jar復(fù)制到ch1_1的WEB-INF/lib目錄中,如圖1.8所示?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.3第一個(gè)Spring入門程序2.創(chuàng)建接口TestDao在模塊ch1_1的src/main/java目錄下,創(chuàng)建一個(gè)dao包,并在dao包中創(chuàng)建接口TestDao,接口中定義一個(gè)sayHello()方法,代碼如下:packagedao;publicinterfaceTestDao{ publicvoidsayHello();}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.3第一個(gè)Spring入門程序3. 創(chuàng)建接口TestDao的實(shí)現(xiàn)類TestDaoImplpackagedao;publicclassTestDaoImplimplementsTestDao{ @Override publicvoidsayHello(){ System.out.println("Hello,Studyhard!"); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.3第一個(gè)Spring入門程序4.創(chuàng)建配置文件applicationContext.xml在模塊ch1_1的src/main/java目錄下,創(chuàng)建Spring的配置文件applicationContext.xml,并在該文件中使用實(shí)現(xiàn)類TestDaoImpl創(chuàng)建一個(gè)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創(chuàng)建其實(shí)例-->
<beanid="test"class="dao.TestDaoImpl"/></beans>《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.2.3第一個(gè)Spring入門程序5.創(chuàng)建測試類publicclassTest{ privatestaticApplicationContextappCon; publicstaticvoidmain(String[]args){
appCon=newClassPathXmlApplicationContext("applicationContext.xml"); //從容器中獲取test實(shí)例
TestDaott=appCon.getBean("test",TestDao.class);//test為配置文件中的id tt.sayHello(); }}執(zhí)行上述main()方法后,將在控制臺輸出“Hello,Studyhard!”。上述main()方法中并沒有使用new運(yùn)算符創(chuàng)建TestDaoImpl類的對象,而是通過SpringIoC容器來獲取的實(shí)現(xiàn)類對象,這就是SpringIoC的工作機(jī)制。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
目錄1.1Spring概述1.2Spring開發(fā)環(huán)境的構(gòu)建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數(shù)據(jù)庫編程《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.3.1SpringIoC的基本概念控制反轉(zhuǎn)(InversionofControl,IoC)是一個(gè)比較抽象的概念,是Spring框架的核心,用來消減計(jì)算機(jī)程序的耦合問題。依賴注入(DependencyInjection,DI)是IoC的另外一種說法,只是從不同的角度,描述相同的概念。當(dāng)某個(gè)Java對象(調(diào)用者,比如您)需要調(diào)用另一個(gè)Java對象(被調(diào)用者,即被依賴對象,比如面包)時(shí),在傳統(tǒng)編程模式下,調(diào)用者通常會采用“new
被調(diào)用者”的代碼方式來創(chuàng)建對象(比如您自己制作面包)。這種方式會增加調(diào)用者與被調(diào)用者之間的耦合性,不利于后期代碼的升級與維護(hù)?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.3.1SpringIoC的基本概念當(dāng)Spring框架出現(xiàn)后,對象的實(shí)例不再由調(diào)用者來創(chuàng)建,而是由Spring容器(比如面包店)來創(chuàng)建。Spring容器會負(fù)責(zé)控制程序之間的關(guān)系(比如面包店負(fù)責(zé)控制您與面包的關(guān)系),而不是由調(diào)用者的程序代碼直接控制。這樣,控制權(quán)由調(diào)用者轉(zhuǎn)移到Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是Spring的控制反轉(zhuǎn)。從Spring容器角度來看,Spring容器負(fù)責(zé)將被依賴對象賦值給調(diào)用者的成員變量,相當(dāng)于為調(diào)用者注入它所依賴的實(shí)例,這就是Spring的依賴注入,主要目的是為了解耦,體現(xiàn)一種“組合”的理念。綜上所述,控制反轉(zhuǎn)是一種通過描述(在Spring中可以是XML或注解)并通過第三方去產(chǎn)生或獲取特定對象的方式。在Spring中實(shí)現(xiàn)控制反轉(zhuǎn)的是IoC容器,其實(shí)現(xiàn)方法是依賴注入。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.3.2Spring的常用注解在Spring框架中,盡管使用XML配置文件可以很簡單地裝配bean,但如果應(yīng)用中有大量的bean需要裝配時(shí),會導(dǎo)致XML配置文件過于龐大,不方便以后的升級維護(hù)。因此,更多的時(shí)候推薦開發(fā)者使用注解(annotation)的方式去裝配bean。需要注意的是,基于注解的裝配需要使用<context:component-scan>元素或@ComponentScan注解定義包(注解所在的包)掃描的規(guī)則,然后根據(jù)定義的規(guī)則找出哪些類(bean)需要自動裝配到Spring容器中,然后交由Spring進(jìn)行統(tǒng)一管理。Spring框架基于AOP編程(面向切面編程)實(shí)現(xiàn)注解解析,因此,在使用注解編程時(shí),需要導(dǎo)入spring-aop-6.0.0.jar包?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.聲明Bean的注解1)@Component該注解是一個(gè)泛化的概念,僅僅表示一個(gè)組件對象(bean),可以作用在任何層次上,沒有明確的角色。2)@Repository該注解用于將數(shù)據(jù)訪問層(DAO)的類標(biāo)識為bean,即注解數(shù)據(jù)訪問層bean,其功能與@Component()相同。3)@Service該注解用于標(biāo)注一個(gè)業(yè)務(wù)邏輯組件類(Service層),其功能與@Component()相同。4)@Controller該注解用于標(biāo)注一個(gè)控制器組件類(SpringMVC的Controller),其功能與@Component()相同?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.注入Bean的注解1)@Autowired該注解可以對類成員變量、方法及構(gòu)造方法進(jìn)行標(biāo)注,完成自動裝配的工作。通過@Autowired的使用來消除setter
和getter方法。默認(rèn)按照bean的類型進(jìn)行裝配。2)@Resource該注解與@Autowired功能一樣。區(qū)別在于,該注解默認(rèn)是按照名稱來裝配注入的,只有當(dāng)找不到與名稱匹配的bean才會按照類型來裝配注入;而@Autowired默認(rèn)按照bean的類型進(jìn)行裝配,如果想按照名稱來裝配注入,則需要結(jié)合@Qualifier注解一起使用。@Resource注解有兩個(gè)屬性:name和type。name屬性指定bean實(shí)例名稱,即按照名稱來裝配注入;type屬性指定bean類型,即按照bean的類型進(jìn)行裝配。3)@Qualifier該注解與@Autowired注解配合使用。當(dāng)@Autowired注解需要按照名稱來裝配注入,則需要結(jié)合該注解一起使用,bean的實(shí)例名稱由@Qualifier注解的參數(shù)指定。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.3.3基于注解的依賴注入SpringIoC容器(ApplicationContext)負(fù)責(zé)創(chuàng)建和注入bean。Spring提供使用XML配置、注解、Java配置以及groovy配置實(shí)現(xiàn)bean的創(chuàng)建和注入。本書盡量使用注解(@Component、@Repository、@Service以及@Controller等業(yè)務(wù)bean的配置)和Java配置(全局配置如數(shù)據(jù)庫、MVC等相關(guān)配置)完全代替XML配置,這也是SpringBoot推薦的配置方式。【例1-2】基于注解的依賴注入的使用過程?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包使用Eclipse創(chuàng)建一個(gè)名為ch1_2的DynamicWebproject,并將Spring的四個(gè)基礎(chǔ)包、SpringCommonsLoggingBridge對應(yīng)的JAR包spring-jcl-6.0.0.jar以及spring-aop-6.0.0.jar(本節(jié)掃描注解,需要事先導(dǎo)入SpringAOP的JAR包)復(fù)制到ch1_2的WEB-INF/lib目錄中?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.創(chuàng)建DAO層在模塊ch1_2的src/main/java中,創(chuàng)建annotation.dao包,該包下創(chuàng)建TestDao接口和TestDaoImpl實(shí)現(xiàn)類,并將實(shí)現(xiàn)類TestDaoImpl使用@Repository注解標(biāo)注為數(shù)據(jù)訪問層?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.創(chuàng)建Service層在模塊ch1_2的src/main/java中,創(chuàng)建annotation.service包,該包下創(chuàng)建TestService接口和TestSeviceImpl實(shí)現(xiàn)類,并將實(shí)現(xiàn)類TestSeviceImpl使用@Service注解標(biāo)注為業(yè)務(wù)邏輯層?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.創(chuàng)建Controller層在模塊ch1_2的src/main/java中,創(chuàng)建annotation.controller包,該包下創(chuàng)建TestController類,并將TestController類使用@Controller注解標(biāo)注為控制器層。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.創(chuàng)建配置類本書盡量不使用Spring的XML配置文件,而使用注解和Java配置。因此,在此需要使用@Configuration創(chuàng)建一個(gè)Java配置類(相當(dāng)于一個(gè)Spring的XML配置文件),并通過@ComponentScan掃描使用注解的包(相當(dāng)于在Spring的XML配置文件中使用<context:component-scanbase-package="Bean所在的包路徑"/>語句)。@Configuration//聲明當(dāng)前類是一個(gè)配置類,相當(dāng)于一個(gè)Spring的XML配置文件。@ComponentScan("annotation")//自動掃描annotation包下使用的注解,并注冊為Bean。/*相當(dāng)于在Spring的XML配置文件使用<context:component-scanbase-package="Bean所在的包路徑"/>語句。*/publicclassConfigAnnotation{}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
6.創(chuàng)建測試類publicclassTestAnnotation{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext
AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(ConfigAnnotation.class); TestControllertc=appCon.getBean(TestController.class);
tc.save(); appCon.close(); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
7.運(yùn)行結(jié)果《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.3.4Java配置Java配置是Spring4.x推薦的配置方式,它是通過@Configuration和@Bean來實(shí)現(xiàn)的。@Configuration聲明當(dāng)前類是一個(gè)配置類,相當(dāng)于一個(gè)Spring配置的XML文件。@Bean注解在方法上,聲明當(dāng)前方法的返回值為一個(gè)Bean?!纠?-3】Java配置的使用過程?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包使用Eclipse創(chuàng)建一個(gè)名為ch1_3的DynamicWebproject,并導(dǎo)入與ch1_2相同的JAR包到WEB-INF/lib目錄中?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.創(chuàng)建DAO層在ch1_3應(yīng)用的src/main/java中,創(chuàng)建dao包,該包下創(chuàng)建TestDao類。此類中沒有使用@Repository注解為數(shù)據(jù)訪問層,具體代碼如下:packagedao;//此處沒有使用@Repository聲明BeanpublicclassTestDao{ publicvoidsave(){ System.out.println("TestDaosave"); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.創(chuàng)建Service層在ch1_3應(yīng)用的src/main/java中,創(chuàng)建service包,該包下創(chuàng)建TestService類。此類中沒有使用@Service注解為業(yè)務(wù)邏輯層,具體代碼如下:packageservice;importdao.TestDao;//此處沒有使用@Service聲明BeanpublicclassTestService{ //此處沒有使用@Autowired注入testDao TestDaotestDao; publicvoidsetTestDao(TestDaotestDao){ this.testDao=testDao;
}
//……}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.創(chuàng)建Controller層在ch1_3應(yīng)用的src/main/java中,創(chuàng)建controller包,該包下創(chuàng)建TestController類。此類中沒有使用@Controller注解為控制器層,具體代碼如下:packagecontroller;importservice.TestService;//此處沒有使用@Controller聲明BeanpublicclassTestController{ //此處沒有使用@Autowired注入testService TestServicetestService; publicvoidsetTestService(TestServicetestService){ this.testService=testService;
}
//……}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.創(chuàng)建配置類在ch1_3應(yīng)用的src/main/java中,創(chuàng)建javaConfig包,該包下創(chuàng)建JavaConfig配置類。此類中使用@Configuration注解該類為一個(gè)配置類,相當(dāng)于一個(gè)Spring配置的XML文件。在配置類中使用@Bean注解定義0個(gè)或多個(gè)Bean,具體代碼如下:@ConfigurationpublicclassJavaConfig{
@Bean publicTestDaogetTestDao(){ returnnewTestDao(); }
@Bean publicTestServicegetTestService(){
}
@Bean publicTestControllergetTestController(){
}}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
6.創(chuàng)建測試類在ch1_3應(yīng)用的javaConfig包下,創(chuàng)建測試類TestConfig,具體代碼如下:publicclassTestConfig{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext
AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(JavaConfig.class); TestControllertc=appCon.getBean(TestController.class); tc.save(); appCon.close(); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
7.運(yùn)行結(jié)果從應(yīng)用ch1_2與應(yīng)用ch1_3對比可以看出,有時(shí)候使用Java配置反而更加繁瑣。何時(shí)使用Java配置?何時(shí)使用注解配置?作者的觀點(diǎn)是:全局配置盡量使用Java配置,如數(shù)據(jù)庫相關(guān)的配置;業(yè)務(wù)bean的配置盡量使用注解配置,如數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層、控制器層等相關(guān)的配置。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
目錄1.1Spring概述1.2Spring開發(fā)環(huán)境的構(gòu)建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數(shù)據(jù)庫編程《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.4SpringAOPSpringAOP是Spring框架體系結(jié)構(gòu)中非常重要的功能模塊之一,該模塊提供了面向切面編程實(shí)現(xiàn)。面向切面編程在事務(wù)處理、日志記錄、安全控制等操作中被廣泛使用。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.4.1SpringAOP的基本概念1.AOP的概念A(yù)OP(Aspect-OrientedProgramming),即面向切面編程。它與OOP(Object-OrientedProgramming,面向?qū)ο缶幊蹋┫噍o相成。在OOP
中,以類作為程序的基本單元,而AOP中的基本單元是Aspect(切面)。在業(yè)務(wù)處理代碼中,通常都有日志記錄、性能統(tǒng)計(jì)、安全控制、事務(wù)處理、異常處理等操作。盡管使用OOP可以通過封裝或繼承的方式達(dá)到代碼的重用,但仍然存在同樣的代碼分散到各個(gè)方法中。因此,采用OOP處理日志記錄等操作,不僅增加了開發(fā)者的工作量,而且提高了升級維護(hù)的困難。為了解決此類問題,AOP思想應(yīng)運(yùn)而生。AOP采取橫向抽取機(jī)制,即將分散在各個(gè)方法中的重復(fù)代碼提取出來,然后在程序編譯或運(yùn)行階段,再將這些抽取出來的代碼應(yīng)用到需要執(zhí)行的地方。但是AOP不是OOP的替代品,而是OOP的補(bǔ)充,它們相輔相成?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.AOP的概念在AOP中,橫向抽取機(jī)制的類與切面的關(guān)系,如右圖所示。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.AOP的術(shù)語1)切面切面(Aspect)是指封裝橫切到系統(tǒng)功能(如事務(wù)處理)的類。2)連接點(diǎn)連接點(diǎn)(Joinpoint)是指程序運(yùn)行中的一些時(shí)間點(diǎn),如方法的調(diào)用或異常的拋出。3)切入點(diǎn)切入點(diǎn)(Pointcut)是指那些需要處理的連接點(diǎn)。在SpringAOP中,所有的方法執(zhí)行都是連接點(diǎn),而切入點(diǎn)是一個(gè)描述信息,它修飾的是連接點(diǎn),通過切入點(diǎn)確定哪些連接點(diǎn)需要被處理。切面、連接點(diǎn)和切入點(diǎn)的關(guān)系如右圖所示。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.AOP的術(shù)語4)通知(增強(qiáng)處理)由切面添加到特定的連接點(diǎn)(滿足切入點(diǎn)規(guī)則)的一段代碼,即在定義好的切入點(diǎn)處所要執(zhí)行的程序代碼??梢詫⑵淅斫鉃榍忻骈_啟后,切面的方法。因此,通知是切面的具體實(shí)現(xiàn)。5)引入引入(Introduction)允許在現(xiàn)有的實(shí)現(xiàn)類中添加自定義的方法和屬性。6)目標(biāo)對象目標(biāo)對象(TargetObject)是指所有被通知的對象。如果AOP
框架使用運(yùn)行時(shí)代理的方式(動態(tài)的AOP)來實(shí)現(xiàn)切面,那么通知對象總是一個(gè)代理對象。7)代理代理(Proxy)是通知應(yīng)用到目標(biāo)對象之后,被動態(tài)創(chuàng)建的對象。8)組入組入(Weaving)是將切面代碼插入到目標(biāo)對象上,從而生成代理對象的過程?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.4.2基于注解開發(fā)AspectJ在講解AspectJ之前,先了解一下Spring的通知類型。根據(jù)Spring中通知在目標(biāo)類方法的連接點(diǎn)位置,可以分為6種如下類型:1.環(huán)繞通知環(huán)繞通知是在目標(biāo)方法執(zhí)行前和執(zhí)行后實(shí)施增強(qiáng),可以應(yīng)用于日志記錄、事務(wù)處理等功能。2.前置通知前置通知是在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng),可應(yīng)用于權(quán)限管理等功能。3.后置返回通知后置返回通知是在目標(biāo)方法成功執(zhí)行后實(shí)施增強(qiáng),可應(yīng)用于關(guān)閉流、刪除臨時(shí)文件等功能。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.4.2基于注解開發(fā)AspectJ4.后置(最終)通知后置通知是在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng),與后置返回通知不同的是,不管是否發(fā)生異常都要執(zhí)行該通知,可應(yīng)用于釋放資源。5.異常通知異常通知是在方法拋出異常后實(shí)施增強(qiáng),可以應(yīng)用于處理異常、記錄日志等功能。6.引入通知引入通知是在目標(biāo)類中添加一些新的方法和屬性,可以應(yīng)用于修改目標(biāo)類(增強(qiáng)類)。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.4.2基于注解開發(fā)AspectJ注解名稱描
述@Aspect用于定義一個(gè)切面,注解在切面類上@Pointcut用于定義切入點(diǎn)表達(dá)式。在使用時(shí),需要定義一個(gè)切入點(diǎn)方法。該方法是一個(gè)返回值void,且方法體為空的普通方法@Before用于定義前置通知。在使用時(shí),通常為其指定value屬性值,該值可以是已有的切入點(diǎn),也可以直接定義切入點(diǎn)表達(dá)式@AfterReturning用于定義后置返回通知。在使用時(shí),通常為其指定value屬性值,該值可以是已有的切入點(diǎn),也可以直接定義切入點(diǎn)表達(dá)式@Around用于定義環(huán)繞通知。在使用時(shí),通常為其指定value屬性值,該值可以是已有的切入點(diǎn),也可以直接定義切入點(diǎn)表達(dá)式@AfterThrowing用于定義異常通知。在使用時(shí),通常為其指定value屬性值,該值可以是已有的切入點(diǎn),也可以直接定義切入點(diǎn)表達(dá)式。另外,還有一個(gè)throwing屬性用于訪問目標(biāo)方法拋出的異常,該屬性值與異常通知方法中同名的形參一致@After用于定義后置(最終)通知。在使用時(shí),通常為其指定value屬性值,該值可以是已有的切入點(diǎn),也可以直接定義切入點(diǎn)表達(dá)式《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.4.2基于注解開發(fā)AspectJ【例1-4】基于注解開發(fā)AspectJ的過程。1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包創(chuàng)建一個(gè)名為ch1_4的DynamicWebProject,并將Spring的四個(gè)基礎(chǔ)包、SpringCommonsLoggingBridge對應(yīng)的JAR包spring-jcl-6.0.0.jar、spring-aop-6.0.0.jar、spring-aspects-6.0.0.jar(Spring為AspectJ提供的實(shí)現(xiàn))以及AspectJ框架所提供的規(guī)范包aspectjweaver-.jar(/artifact/org.aspectj/aspectjweaver/)復(fù)制到ch1_4的WEB-INF/lib目錄中?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.創(chuàng)建接口及實(shí)現(xiàn)類在模塊ch1_4的src/main/java目錄下,創(chuàng)建一個(gè)名為aspectj.dao的包,并在該包中創(chuàng)建接口TestDao和接口實(shí)現(xiàn)類TestDaoImpl。該實(shí)現(xiàn)類作為目標(biāo)類,在切面類中對其方法進(jìn)行增強(qiáng)處理。使用注解@Repository將目標(biāo)類aspectj.dao.TestDaoImpl注解為目標(biāo)對象。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.創(chuàng)建切面類在模塊ch1_4的src/main/java目錄下,創(chuàng)建aspectj.annotation包,在該包中創(chuàng)建切面類MyAspect。在該類中,首先使用@Aspect注解定義一個(gè)切面類,由于該類在Spring中是作為組件使用的,所以還需要使用@Component注解。然后,使用@Pointcut注解切入點(diǎn)表達(dá)式,并通過定義方法來表示切入點(diǎn)名稱。最后在每個(gè)通知方法上添加相應(yīng)的注解,并將切入點(diǎn)名稱作為參數(shù)傳遞給需要執(zhí)行增強(qiáng)的通知方法?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.創(chuàng)建配置類在模塊ch1_4的src/main/java目錄下,創(chuàng)建aspectj.config包,在該包中創(chuàng)建配置類AspectjAOPConfig。在該類中使用@Configuration注解聲明此類為配置類;使用@ComponentScan("aspectj")注解自動掃描aspectj包下使用的注解;使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ的支持。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.創(chuàng)建測試類publicclassAOPTest{ publicstaticvoidmain(String[]args){ //初始化Spring容器ApplicationContext AnnotationConfigApplicationContextappCon= newAnnotationConfigApplicationContext(AspectjAOPConfig.class); //從容器中,獲取增強(qiáng)后的目標(biāo)對象
TestDaotestDaoAdvice=appCon.getBean(TestDao.class); //執(zhí)行方法
testDaoAdvice.save(); System.out.println("================");
testDaoAdvice.modify(); System.out.println("================");
testDaoAdvice.delete(); appCon.close(); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
6.運(yùn)行測試類《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
目錄1.1Spring概述1.2Spring開發(fā)環(huán)境的構(gòu)建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數(shù)據(jù)庫編程《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.5SpringBean在Spring的應(yīng)用中,SpringIoC容器可以創(chuàng)建、裝配和配置應(yīng)用組件對象,這里的組件對象稱為Bean。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.5.1Bean的實(shí)例化Spring框架實(shí)例化bean有三種方式:構(gòu)造方法實(shí)例化、靜態(tài)工廠實(shí)例化和實(shí)例工廠實(shí)例化(其中,最常用的實(shí)例方法是構(gòu)造方法實(shí)例化)。使用工廠實(shí)例化具有解耦、降低代碼復(fù)用等優(yōu)點(diǎn)?!纠?-5】bean的實(shí)例化過程?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包使用Eclipse創(chuàng)建一個(gè)名為ch1_5的DynamicWebproject,并導(dǎo)入與ch1_2相同的JAR包到WEB-INF/lib目錄中?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.創(chuàng)建實(shí)例化bean的類在模塊ch1_5的src/main/java目錄下,創(chuàng)建包instance,并在該包中創(chuàng)建BeanClass、BeanInstanceFactory以及BeanStaticFactory等實(shí)例化bean的類。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.創(chuàng)建配置類在模塊ch1_5的src/main/java目錄下,創(chuàng)建包c(diǎn)onfig,并在該包中創(chuàng)建配置類JavaConfig。在該配置類中使用@Bean定義3個(gè)Bean。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.創(chuàng)建測試類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從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.運(yùn)行測試類《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.5.2Bean的作用域在Spring中,不僅可以完成bean的實(shí)例化,還可以為bean指定作用域,通過@Scope注解來實(shí)現(xiàn)?!纠?-6】bean的作用域。作用域名稱描述singleton默認(rèn)的作用域,使用singleton定義的Bean在Spring容器中只有一個(gè)Bean實(shí)例。prototypeSpring容器每次獲取prototype定義的Bean,容器都將創(chuàng)建一個(gè)新的Bean實(shí)例。request在一次HTTP請求中容器將返回一個(gè)Bean實(shí)例,不同的HTTP請求返回不同的Bean實(shí)例。僅在WebSpring應(yīng)用程序上下文中使用。session在一個(gè)HTTPSession中,容器將返回同一個(gè)Bean實(shí)例。僅在WebSpring應(yīng)用程序上下文中使用。application為每個(gè)ServletContext對象創(chuàng)建一個(gè)實(shí)例,即同一個(gè)應(yīng)用共享一個(gè)Bean實(shí)例。僅在WebSpring應(yīng)用程序上下文中使用。websocket為每個(gè)WebSocket對象創(chuàng)建一個(gè)Bean實(shí)例。僅在WebSpring應(yīng)用程序上下文中使用?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包使用Eclipse創(chuàng)建一個(gè)名為ch1_6的DynamicWebproject,并導(dǎo)入與ch1_5相同的JAR包到WEB-INF/lib目錄中?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.編寫不同作用域的Bean在模塊ch1_6的src/main/java目錄下,創(chuàng)建包service,并在該包中創(chuàng)建SingletonService和PrototypeService類。在SingletonService類中,bean的作用域?yàn)槟J(rèn)作用域singleton;在PrototypeService類中,bean的作用域?yàn)閜rototype。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.創(chuàng)建配置類在ch1_6應(yīng)用的src/main/java目錄下,創(chuàng)建包c(diǎn)onfig,并在該包中創(chuàng)建配置類ScopeConfig,具體代碼如下:@Configuration@ComponentScan("service")publicclassScopeConfig{}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.創(chuàng)建測試類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從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.運(yùn)行測試類《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.5.3Bean的初始化和銷毀在實(shí)際工程應(yīng)用中,經(jīng)常需要在bean使用之前或之后做些必要的操作,Spring對bean的生命周期的操作提供了支持??梢允褂聾Bean注解的initMethod和destroyMethod屬性對bean進(jìn)行初始化和銷毀?!纠?-7】bean的初始化和銷毀。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.使用Eclipse創(chuàng)建Web應(yīng)用并導(dǎo)入JAR包使用Eclipse創(chuàng)建一個(gè)名為ch1_7的DynamicWebproject,并導(dǎo)入與ch1_6相同的JAR包到WEB-INF/lib目錄中。《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
2.創(chuàng)建Bean的類在模塊ch1_7的src/main/java目錄下,創(chuàng)建包service,并在該包中創(chuàng)建MyService類publicclassMyService{ publicvoidinitService(){ System.out.println(this.getClass().getName()+"執(zhí)行自定義的初始化方法"); } publicMyService(){ System.out.println("執(zhí)行構(gòu)造方法,創(chuàng)建對象。"); } publicvoiddestroyService(){ System.out.println(this.getClass().getName()+"執(zhí)行自定義的銷毀方法"); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
3.創(chuàng)建配置類@ConfigurationpublicclassJavaConfig{ //initMethod和destroyMethod指定MyService類的initService和destroyService方法
//在構(gòu)造方法之后、銷毀之前執(zhí)行
@Bean(initMethod="initService",destroyMethod="destroyService") publicMyServicegetMyService(){ returnnewMyService(); }}《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
4.創(chuàng)建測試類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從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
5.運(yùn)行測試類《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
目錄1.1Spring概述1.2Spring開發(fā)環(huán)境的構(gòu)建1.3SpringIoC1.4SpringAOP1.5SpringBean1.6Spring的數(shù)據(jù)庫編程《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.6Spring的數(shù)據(jù)庫編程數(shù)據(jù)庫編程是互聯(lián)網(wǎng)編程的基礎(chǔ),Spring框架為開發(fā)者提供了JDBC模板模式,即jdbcTemplate,它可以簡化許多代碼,但在實(shí)際應(yīng)用中jdbcTemplate并不常用。工作更多的時(shí)候,用的是Hibernate框架和MyBatis框架進(jìn)行數(shù)據(jù)庫編程?!禨pringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.6.1SpringJDBC的XML配置<!--配置數(shù)據(jù)源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL數(shù)據(jù)庫驅(qū)動--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--連接數(shù)據(jù)庫的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--連接數(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>《SpringBoot從入門到實(shí)戰(zhàn)(第2版·微課視頻版)》陳恒
主編,清華大學(xué)出版社,2024
1.6.2SpringJDBC的Java配置@Configuration//通過該注解來表明該類是一個(gè)Spring的配置,相當(dāng)于一個(gè)xml文件@ComponentScan(basePackages="dao")//配置掃描包@PropertySource(value={"classpath:perties"},ignoreResourceNotFound=true)//配置多個(gè)屬性文件時(shí)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第16課 越算越精彩 說課稿 2024-2025學(xué)年粵教版(2019)初中信息技術(shù)八年級上冊
- 第16課《散文二篇-我為什么而活著》說課稿 2024-2025學(xué)年統(tǒng)編版語文八年級上冊
- 物理中考重難點(diǎn)真題匯編專題講練(江蘇專用)-專題17 生活用電(學(xué)生版)
- 第13課 網(wǎng)絡(luò)安全防范 說課稿 -2024--2025學(xué)年浙教版(2023)初中信息技術(shù)八年級上冊
- 2025年全國計(jì)算機(jī)二級等級考試全真模擬試卷及答案(共七套)
- 第15課 十月革命的勝利與蘇聯(lián)的社會主義實(shí)踐說課稿-2023-2024學(xué)年高一歷史統(tǒng)編版(2019)必修中外歷史綱要下001
- 《匯源成功經(jīng)驗(yàn)總結(jié)》課件
- 青春智慧照亮前行
- 責(zé)任成就青春航
- 2024版?zhèn)€人抵押反擔(dān)保協(xié)議法律文本版B版
- 職工心理健康知識手冊
- 11396-國家開放大學(xué)2023年春期末統(tǒng)一考試《藥事管理與法規(guī)(本)》答案
- 工程量自動計(jì)算表格新
- 天津市四校2022-2023學(xué)年高二上學(xué)期期末聯(lián)考數(shù)學(xué)試題(原卷版)
- 新時(shí)期學(xué)校德育工作的思路與方法
- 全國優(yōu)質(zhì)課一等獎(jiǎng)人教部編版小學(xué)四年級下冊道德與法治《說話要算數(shù)》公開課課件(內(nèi)嵌視頻)
- 四年級上冊道德與法治全冊知識點(diǎn)匯總
- 分布式計(jì)算安全與隱私保護(hù)
- 客情關(guān)系的有效維護(hù)
- 《班主任工作》教學(xué)大綱
- 新版出口報(bào)關(guān)單模板
評論
0/150
提交評論