b站動力節(jié)點Spring6框架學習筆記分享_第1頁
b站動力節(jié)點Spring6框架學習筆記分享_第2頁
b站動力節(jié)點Spring6框架學習筆記分享_第3頁
b站動力節(jié)點Spring6框架學習筆記分享_第4頁
b站動力節(jié)點Spring6框架學習筆記分享_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Spring6第三章三、Spring的入門程序3.1Spring的下載官網(wǎng)地址:https://spring.io/官網(wǎng)地址(中文):/打開Spring官網(wǎng)后,可以看到SpringFramework,以及通過SpringFramework衍生的其它框架:我們即將要學習的就是SpringFramework。怎么下載呢?第一步:進入github第二步:找到下圖位置,點擊超鏈接第三步:找到下圖位置,點擊超鏈接第四步:按照下圖步驟操作第五步:繼續(xù)在springframework目錄下找下圖的spring,點開之后你會看到很多不同的版本第六步:選擇對應的版本第七步:點擊上圖的url點擊spring-5.3.9-dist.zip下載spring框架。將下載的zip包解壓:docs:spring框架的API幫助文檔libs:spring框架的jar文件(用spring框架就是用這些jar包)schema:spring框架的XML配置文件相關的約束文件3.2Spring的jar文件打開libs目錄,會看到很多jar包:spring-core-5.3.9.jar:字節(jié)碼(這個是支撐程序運行的jar包)spring-core-5.3.9-javadoc.jar:代碼中的注釋spring-core-5.3.9-sources.jar:源碼我們來看一下spring框架都有哪些jar包:JAR文件描述spring-aop-5.3.9.jar這個jar文件包含在應用中使用Spring的AOP特性時所需的類spring-aspects-5.3.9.jar提供對AspectJ的支持,以便可以方便的將面向切面的功能集成進IDE中spring-beans-5.3.9.jar這個jar文件是所有應用都要用到的,它包含訪問配置文件、創(chuàng)建和管理bean以及進行InversionofControl/DependencyInjection(IoC/DI)操作相關的所有類。如果應用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。spring-context-5.3.9.jar這個jar文件為Spring核心提供了大量擴展。可以找到使用SpringApplicationContext特性時所需的全部類,JDNI所需的全部類,instrumentation組件以及校驗Validation方面的相關類。spring-context-indexer-5.3.9.jar雖然類路徑掃描非???,但是Spring內(nèi)部存在大量的類,添加此依賴,可以通過在編譯時創(chuàng)建候選對象的靜態(tài)列表來提高大型應用程序的啟動性能。spring-context-support-5.3.9.jar用來提供Spring上下文的一些擴展模塊,例如實現(xiàn)郵件服務、視圖解析、緩存、定時任務調度等spring-core-5.3.9.jarSpring框架基本的核心工具類。Spring其它組件要都要使用到這個包里的類,是其它組件的基本核心,當然你也可以在自己的應用系統(tǒng)中使用這些工具類。spring-expression-5.3.9.jarSpring表達式語言。spring-instrument-5.3.9.jarSpring3.0對服務器的代理接口。spring-jcl-5.3.9.jarSpring的日志模塊。JCL,全稱為"JakartaCommonsLogging",也可稱為"ApacheCommonsLogging"。spring-jdbc-5.3.9.jarSpring對JDBC的支持。spring-jms-5.3.9.jar這個jar包提供了對JMS1.0.2/1.1的支持類。JMS是Java消息服務。屬于JavaEE規(guī)范之一。spring-messaging-5.3.9.jar為集成messagingapi和消息協(xié)議提供支持spring-orm-5.3.9.jarSpring集成ORM框架的支持,比如集成hibernate,mybatis等。spring-oxm-5.3.9.jar為主流O/XMapping組件提供了統(tǒng)一層抽象和封裝,OXM是ObjectXmlMapping。對象和XML之間的相互轉換。spring-r2dbc-5.3.9.jarReactiveRelationalDatabaseConnectivity(關系型數(shù)據(jù)庫的響應式連接)的縮寫。這個jar文件是Spring對r2dbc的支持。spring-test-5.3.9.jar對Junit等測試框架的簡單封裝。spring-tx-5.3.9.jar為JDBC、Hibernate、JDO、JPA、Beans等提供的一致的聲明式和編程式事務管理支持。spring-web-5.3.9.jarSpring集成MVC框架的支持,比如集成Struts等。spring-webflux-5.3.9.jarWebFlux是Spring5添加的新模塊,用于web的開發(fā),功能和SpringMVC類似的,Webflux使用當前一種比較流程響應式編程出現(xiàn)的框架。spring-webmvc-5.3.9.jarSpringMVC框架的類庫spring-websocket-5.3.9.jarSpring集成WebSocket框架時使用注意:如果你只是想用Spring的IoC功能,僅需要引入:spring-context即可。將這個jar包添加到classpath當中。如果采用maven只需要引入context的依賴即可。<!--Spring6的正式版發(fā)布之前,這個倉庫地址是需要的-->

<repositories>

<repository>

<id>estone</id>

<name>SpringMilestoneRepository</name>

<url>https://repo.spring.io/milestone</url>

</repository>

</repositories>

<dependencies>

<!--springcontext依賴:使用的是6.0.0-M2里程碑版-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>6.0.0-M2</version>

</dependency>

</dependencies>

3.3第一個Spring程序前期準備:打開IDEA創(chuàng)建EmptyProject:spring6設置JDK版本17,編譯器版本17設置IDEA的Maven:關聯(lián)自己的maven在空的工程spring6中創(chuàng)建第一個模塊:spring6-001-first第一步:添加springcontext的依賴,pom.xml配置如下<?xmlversion="1.0"encoding="UTF-8"?>

<projectxmlns="/POM/4.0.0"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.powernode</groupId>

<artifactId>spring6-001-first</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>jar</packaging>

<repositories>

<repository>

<id>estone</id>

<name>SpringMilestoneRepository</name>

<url>https://repo.spring.io/milestone</url>

</repository>

</repositories>

<dependencies>

<!--springcontext依賴-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>6.0.0-M2</version>

</dependency>

</dependencies>

<properties>

<piler.source>17</piler.source>

<piler.target>17</piler.target>

</properties>

</project>

注意:打包方式jar。當加入springcontext的依賴之后,會關聯(lián)引入其他依賴:springaop:面向切面編程springbeans:IoC核心springcore:spring的核心工具包springjcl:spring的日志包springexpression:spring表達式第二步:添加junit依賴<?xmlversion="1.0"encoding="UTF-8"?>

<projectxmlns="/POM/4.0.0"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.powernode</groupId>

<artifactId>spring6-001-first</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>jar</packaging>

<repositories>

<repository>

<id>estone</id>

<name>SpringMilestoneRepository</name>

<url>https://repo.spring.io/milestone</url>

</repository>

</repositories>

<dependencies>

<!--springcontext依賴-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>6.0.0-M2</version>

</dependency>

<!--junit-->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.13.2</version>

<scope>test</scope>

</dependency>

</dependencies>

<properties>

<piler.source>17</piler.source>

<piler.target>17</piler.target>

</properties>

</project>

第三步:定義bean:Userpackagecom.powernode.spring6.bean;

/**

*bean,封裝用戶信息。

*@author動力節(jié)點

*@version1.0

*@since1.0

*/

publicclassUser{

}

第四步:編寫spring的配置文件:beans.xml。該文件放在類的根路徑下。上圖是使用IDEA工具自帶的spring配置文件的模板進行創(chuàng)建。配置文件中進行bean的配置。<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd">

<beanid="userBean"class="com.powernode.spring6.bean.User"/>

</beans>

bean的id和class屬性:id屬性:代表對象的唯一標識??梢钥醋鲆粋€人的身份證號。class屬性:用來指定要創(chuàng)建的java對象的類名,這個類名必須是全限定類名(帶包名)。第五步:編寫測試程序packagecom.powernode.spring6.test;

importorg.junit.Test;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassSpring6Test{

@Test

publicvoidtestFirst(){

//初始化Spring容器上下文(解析beans.xml文件,創(chuàng)建所有的bean對象)

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("beans.xml");

//根據(jù)id獲取bean對象

ObjectuserBean=applicationContext.getBean("userBean");

System.out.println(userBean);

}

}

第七步:運行測試程序3.4第一個Spring程序詳細剖析<beanid="userBean"class="com.powernode.spring6.bean.User"/>

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("beans.xml");

ObjectuserBean=applicationContext.getBean("userBean");

bean標簽的id屬性可以重復嗎?packagecom.powernode.spring6.bean;

/**

*@author動力節(jié)點

*@version1.0

*@classNameVip

*@since1.0

**/

publicclassVip{

}

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd">

<beanid="userBean"class="com.powernode.spring6.bean.User"/>

<beanid="userBean"class="com.powernode.spring6.bean.Vip"/>

</beans>

運行測試程序:通過測試得出:在spring的配置文件中id是不能重名。底層是怎么創(chuàng)建對象的,是通過反射機制調用無參數(shù)構造方法嗎?packagecom.powernode.spring6.bean;

/**

*bean,封裝用戶信息。

*@author動力節(jié)點

*@version1.0

*@since1.0

*/

publicclassUser{

publicUser(){

System.out.println("User的無參數(shù)構造方法執(zhí)行");

}

}

在User類中添加無參數(shù)構造方法,如上。運行測試程序:通過測試得知:創(chuàng)建對象時確實調用了無參數(shù)構造方法。如果提供一個有參數(shù)構造方法,不提供無參數(shù)構造方法會怎樣呢?packagecom.powernode.spring6.bean;

/**

*bean,封裝用戶信息。

*@author動力節(jié)點

*@version1.0

*@since1.0

*/

publicclassUser{

/*publicUser(){

System.out.println("User的無參數(shù)構造方法執(zhí)行");

}*/

publicUser(Stringname){

System.out.println("User的有參數(shù)構造方法執(zhí)行");

}

}

運行測試程序:通過測試得知:spring是通過調用類的無參數(shù)構造方法來創(chuàng)建對象的,所以要想讓spring給你創(chuàng)建對象,必須保證無參數(shù)構造方法是存在的。Spring是如何創(chuàng)建對象的呢?原理是什么?//dom4j解析beans.xml文件,從中獲取class的全限定類名

//通過反射機制調用無參數(shù)構造方法創(chuàng)建對象

Classclazz=Class.forName("com.powernode.spring6.bean.User");

Objectobj=clazz.newInstance();

把創(chuàng)建好的對象存儲到一個什么樣的數(shù)據(jù)結構當中了呢?spring配置文件的名字必須叫做beans.xml嗎?ApplicationContextapplicationContext=newClassPathXmlApplicationContext("beans.xml");

通過以上的java代碼可以看出,這個spring配置文件名字是我們負責提供的,顯然spring配置文件的名字是隨意的。像這樣的beans.xml文件可以有多個嗎?再創(chuàng)建一個spring配置文件,起名:spring.xml<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd">

<beanid="vipBean"class="com.powernode.spring6.bean.Vip"/>

</beans>

packagecom.powernode.spring6.test;

importorg.junit.Test;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassSpring6Test{

@Test

publicvoidtestFirst(){

//初始化Spring容器上下文(解析beans.xml文件,創(chuàng)建所有的bean對象)

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("beans.xml","spring.xml");

//根據(jù)id獲取bean對象

ObjectuserBean=applicationContext.getBean("userBean");

ObjectvipBean=applicationContext.getBean("vipBean");

System.out.println(userBean);

System.out.println(vipBean);

}

}

運行測試程序:通過測試得知,spring的配置文件可以有多個,在ClassPathXmlApplicationContext構造方法的參數(shù)上傳遞文件路徑即可。這是為什么呢?通過源碼可以看到:在配置文件中配置的類必須是自定義的嗎,可以使用JDK中的類嗎,例如:java.util.Date?<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd">

<beanid="userBean"class="com.powernode.spring6.bean.User"/>

<!--<beanid="userBean"class="com.powernode.spring6.bean.Vip"/>-->

<beanid="dateBean"class="java.util.Date"/>

</beans>

packagecom.powernode.spring6.test;

importorg.junit.Test;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassSpring6Test{

@Test

publicvoidtestFirst(){

//初始化Spring容器上下文(解析beans.xml文件,創(chuàng)建所有的bean對象)

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("beans.xml","spring.xml");

//根據(jù)id獲取bean對象

ObjectuserBean=applicationContext.getBean("userBean");

ObjectvipBean=applicationContext.getBean("vipBean");

ObjectdateBean=applicationContext.getBean("dateBean");

System.out.println(userBean);

System.out.println(vipBean);

System.out.println(dateBean);

}

}

運行測試程序:通過測試得知,在spring配置文件中配置的bean可以任意類,只要這個類不是抽象的,并且提供了無參數(shù)構造方法。getBean()方法調用時,如果指定的id不存在會怎樣?運行測試程序:通過測試得知,當id不存在的時候,會出現(xiàn)異常。getBean()方法返回的類型是Object,如果訪問子類的特有屬性和方法時,還需要向下轉型,有其它辦法可以解決這個問題嗎?Useruser=applicationContext.getBean("userBean",User.class);

ClassPathXmlApplicationContext是從類路徑中加載配置文件,如果沒有在類路徑當中,又應該如何加載配置文件呢?<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd">

<beanid="vipBean2"class="com.powernode.spring6.bean.Vip"/>

</beans>

ApplicationContextapplicationContext2=newFileSystemXmlApplicationContext("d:/spring6.xml");

Vipvip=applicationContext2.getBean("vipBean2",Vip.class);

System.out.println(vip);

沒有在類路徑中的話,需要使用FileSystemXmlApplicationContext類進行加載配置文件。這種方式較少用。一般都是將配置文件放到類路徑當中,這樣可移植性更強。ApplicationContext的超級父接口BeanFactory。BeanFactorybeanFactory=newClassPathXmlApplicationContext("spr

溫馨提示

  • 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

提交評論