五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Spring框架入門必備教程

2021-03-10 14:58 作者:動力節(jié)點(diǎn)小王本王  | 我要投稿



Spring是一個開放源代碼的設(shè)計層面框架,他解決的是業(yè)務(wù)邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統(tǒng)應(yīng)用。?

本課程將深入淺出講解Spring的核心技術(shù)IoC、AOP,剖析框架的源代碼。讓大家快速掌握框架的原理和應(yīng)用。

本篇文章主要內(nèi)容:

spring框架是什么?

Spring框架的優(yōu)點(diǎn)?

Spring框架體系結(jié)構(gòu)

IoC 控制反轉(zhuǎn)


Spring?框架是什么?

Spring 是于 2003 年興起的一個輕量級的Java 開發(fā)框架,它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring 的核心是控制反轉(zhuǎn)(IoC)和面向切面編程(AOP)。Spring 是可以在Java SE/EE 中使用的輕量級開源框架。

Spring?的主要作用就是為代碼“解耦”,降低代碼間的耦合度。就是讓對象和對象(模塊和模塊)之間關(guān)系不是使用代碼關(guān)聯(lián),而是通過配置來說明。即在 Spring?中說明對象(模塊)的關(guān)系。

Spring?根據(jù)代碼的功能特點(diǎn),使用Ioc?降低業(yè)務(wù)對象之間耦合度。IoC?使得主業(yè)務(wù)在相互調(diào)用過程中,不用再自己維護(hù)關(guān)系了,即不用再自己創(chuàng)建要使用的對象了。而是由?Spring?容器統(tǒng)一管理,自動“注入”,注入即賦值。 而AOP?使得系統(tǒng)級服務(wù)得到了最大復(fù)用,且不用再由程序員手工將系統(tǒng)級服務(wù)“混雜”到主業(yè)務(wù)邏輯中了,而是由?Spring?容器統(tǒng)一完成“織入”。

官網(wǎng):https://spring.io/

Spring優(yōu)點(diǎn)?

Spring?是一個框架,是一個半成品的軟件。有 20?個模塊組成。它是一個容器管理對象,容器是裝東西的,Spring?容器不裝文本,數(shù)字。裝的是對象。Spring?是存儲對象的容器。

(1)?輕量

Spring 框架使用的jar 都比較小,一般在 1M 以下或者幾百 kb。Spring 核心功能的所需的jar 總共在 3M 左右。

Spring 框架運(yùn)行占用的資源少,運(yùn)行效率高。不依賴其他jar

(2)?針對接口編程,解耦合

Spring 提供了Ioc 控制反轉(zhuǎn),由容器管理對象,對象的依賴關(guān)系。原來在程序代碼中的對象創(chuàng)建方式,現(xiàn)在由容器完成。對象之間的依賴解耦合。

(3)?AOP 編程的支持

通過 Spring 提供的 AOP 功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP 實現(xiàn)的功能可以通過AOP 輕松應(yīng)付在 Spring 中,開發(fā)人員可以從繁雜的事務(wù)管理代碼中解脫出來,通過聲明式方式靈活地進(jìn)行事務(wù)的管理,提高開發(fā)效率和質(zhì)量。

(4)?方便集成各種優(yōu)秀框架

Spring 不排斥各種優(yōu)秀的開源框架,相反 Spring 可以降低各種框架的使用難度,Spring?提供了對各種優(yōu)秀框架(如Struts,Hibernate、MyBatis)等的直接支持。簡化框架的使用。

Spring 像插線板一樣,其他框架是插頭,可以容易的組合到一起。需要使用哪個框架,就把這個插頭放入插線板。不需要可以輕易的移除。

Spring?體系結(jié)構(gòu)

Spring 由 20 多個模塊組成,它們可以分為數(shù)據(jù)訪問/集成(Data Access/Integration)、Web、面向切面編程(AOP, Aspects)、提供JVM 的代理(Instrumentation)、消息發(fā)送(Messaging)、核心容器(Core Container)和測試(Test)。

IoC 控制反轉(zhuǎn)

控制反轉(zhuǎn)(IoC,Inversion of Control),是一個概念,是一種思想。指將傳統(tǒng)上由程序代碼直接操控的對象調(diào)用權(quán)交給容器,通過容器來實現(xiàn)對象的裝配和管理??刂品崔D(zhuǎn)就是對對象控制權(quán)的轉(zhuǎn)移,從程序代碼本身反轉(zhuǎn)到了外部容器。通過容器實現(xiàn)對象的創(chuàng)建,屬性賦值,依賴的管理。

IoC?是一個概念,是一種思想,其實現(xiàn)方式多種多樣。當(dāng)前比較流行的實現(xiàn)方式是依賴注入。應(yīng)用廣泛。

依賴:classA 類中含有classB 的實例,在 classA 中調(diào)用classB 的方法完成功能,即 classA 對 classB 有依賴。

Ioc 的實現(xiàn):

  • 依賴注入:DI(Dependency?Injection),程序代碼不做定位查詢,這些工作由容器自行完成。

依賴注入 DI 是指程序運(yùn)行過程中,若需要調(diào)用另一個對象協(xié)助時,無須在代碼中創(chuàng)建被調(diào)用者,而是依賴于外部容器,由外部容器創(chuàng)建后傳遞給程序。 Spring 的依賴注入對調(diào)用者與被調(diào)用者幾乎沒有任何要求,完全支持對象之間依賴關(guān)系的管理。

Spring 框架使用依賴注入(DI)實現(xiàn)IoC。

Spring 容器是一個超級大工廠,負(fù)責(zé)創(chuàng)建、管理所有的Java 對象,這些Java 對象被稱為Bean。Spring 容器管理著容器中Bean 之間的依賴關(guān)系, Spring 使用“依賴注入”的方式來管理Bean 之間的依賴關(guān)系。使用IoC 實現(xiàn)對象之間的解耦和。

開發(fā)工具準(zhǔn)備

開發(fā)工具:idea2017 以上依賴管理:maven3 以上jdk:1.8 以上

需要設(shè)置maven 本機(jī)倉庫:

Spring?的第一個程序

舉例:01-primay

創(chuàng)建maven?項目

引入maven?依賴 pom.xml

定義接口與實體類

創(chuàng)建Spring?配置文件

在src/main/resources/目錄現(xiàn)創(chuàng)建一個xml?文件,文件名可以隨意,但Spring?建議的名稱為ApplicationContext.xml。

spring 配置中需要加入約束文件才能正常使用,約束文件是 xsd 擴(kuò)展名。

  • <bean />:用于定義一個實例對象。一個實例對應(yīng)一個bean 元素。

  • id:該屬性是 Bean 實例的唯一標(biāo)識,程序通過 id 屬性訪問Bean,Bean與Bean?間的依賴關(guān)系也是通過 id?屬性關(guān)聯(lián)的。

  • class:指定該 Bean 所屬的類,注意這里只能是類,不能是接口。

定義測試類

使用spring?創(chuàng)建非自定義類對象

spring 配置文件加入 java.util.Date 定義:

<bean id="myDate" class="java.util.Date" />

MyTest 測試類中:

調(diào)用getBean(“myDate”); 獲取日期類對象。

?

容器接口和實現(xiàn)類

ApplicationContext 接口(容器)

ApplicationContext 用于加載 Spring 的配置文件,在程序中充當(dāng)“容器”的角色。其實現(xiàn)類有兩個。

A、 配置文件在類路徑下

若 Spring 配置文件存放在項目的類路徑下,則使用ClassPathXmlApplicationContext 實現(xiàn)類進(jìn)行加載。

B、ApplicationContext 容器中對象的裝配時機(jī)

ApplicationContext?容器,會在容器對象初始化時,將其中的所有對象一次性全部裝配好。以后代碼中若要使用到這些對象,只需從內(nèi)存中直接獲取即可。執(zhí)行效率較高。但占用內(nèi)存。

C、使用spring 容器創(chuàng)建的java 對象

基于 XML?的 DI

舉例:項目di-xml

注入分類

bean 實例在調(diào)用無參構(gòu)造器創(chuàng)建對象后,就要對bean 對象的屬性進(jìn)行初始化。初始化是由容器自動完成的,稱為注入。

根據(jù)注入方式的不同,常用的有兩類:set 注入、構(gòu)造注入。

(1)?set?注入(掌握)

set 注入也叫設(shè)值注入是指,通過setter 方法傳入被調(diào)用者的實例。這種注入方式簡單、直觀,因而在 Spring 的依賴注入中大量使用。

A、 簡單類型

創(chuàng)建java.util.Date 并設(shè)置初始的日期時間:

Spring 配置文件:

測試方法:

B、引用類型

當(dāng)指定bean 的某屬性值為另一bean 的實例時,通過ref 指定它們間的引用關(guān)系。ref 的值必須為某bean 的 id 值。

對于其它Bean 對象的引用,使用<bean/>標(biāo)簽的ref 屬性

測試方法:

(2)?構(gòu)造注入(理解)

構(gòu)造注入是指,在構(gòu)造調(diào)用者實例的同時,完成被調(diào)用者的實例化。即, 使用構(gòu)造器設(shè)置依賴關(guān)系。

舉例 1:

<constructor-arg />標(biāo)簽中用于指定參數(shù)的屬性有:

  • name:指定參數(shù)名稱。

  • index:指明該參數(shù)對應(yīng)著構(gòu)造器的第幾個參數(shù),從 0?開始。不過,該屬性不要也行,但要注意,若參數(shù)類型相同,或之間有包含關(guān)系,則需要保證賦值順序要與構(gòu)造器中的參數(shù)順序一致。

?舉例 2:

使用構(gòu)造注入創(chuàng)建一個系統(tǒng)類 File 對象

測試類:

引用類型屬性自動注入

對于引用類型屬性的注入,也可不在配置文件中顯示的注入。可以通過為<bean/>標(biāo)簽設(shè)置autowire 屬性值,為引用類型屬性進(jìn)行隱式自動注入(默認(rèn)是不自動注入引用類型屬性)。根據(jù)自動注入判斷標(biāo)準(zhǔn)的不同,可以分為兩種:

  • byName:根據(jù)名稱自動注入

  • byType: 根據(jù)類型自動注入

(1)?byName?方式自動注入

?當(dāng)配置文件中被調(diào)用者bean 的id 值與代碼中調(diào)用者bean 類的屬性名相同時,可使用byName 方式,讓容器自動將被調(diào)用者bean 注入給調(diào)用者bean。容器是通過調(diào)用者的bean 類的屬性名與配置文件的被調(diào)用者bean 的id 進(jìn)行比較而實現(xiàn)自動注入的。

舉例:

(1)?byType?方式自動注入

?(2)byType?方式自動注入

使用byType 方式自動注入,要求:配置文件中被調(diào)用者 bean 的class 屬性指定的類,要與代碼中調(diào)用者bean 類的某引用類型屬性類型同源。即要么相同,要么有 is-a 關(guān)系(子類,或是實現(xiàn)類)。但這樣的同源的被調(diào)用bean 只能有一個。多于一個,容器就不知該匹配哪一個了。

舉例:

為應(yīng)用指定多個 Spring?配置文件

在實際應(yīng)用里,隨著應(yīng)用規(guī)模的增加,系統(tǒng)中Bean 數(shù)量也大量增加,導(dǎo)致配置文件變得非常龐大、臃腫。為了避免這種情況的產(chǎn)生,提高配置文件的可讀性與可維護(hù)性,可以將 Spring 配置文件分解成多個配置文件。

包含關(guān)系的配置文件:

多個配置文件中有一個總文件,總配置文件將各其它子文件通過<import/>引入。在Java 代碼中只需要使用總配置文件對容器進(jìn)行初始化即可。

舉例:

代碼:

Spring 配置文件:

也可使用通配符*。但,此時要求父配置文件名不能滿足*所能匹配的格式,否則將出現(xiàn)循環(huán)遞歸包含。就本例而言,父配置文件不能匹配 spring-*.xml 的格式,即不能起名為spring-total.xml。

基于注解的 DI

舉例:di-annotation 項目

對于 DI 使用注解,將不再需要在 Spring 配置文件中聲明bean 實例。Spring 中使用注解,需要在原有 Spring 運(yùn)行環(huán)境基礎(chǔ)上再做一些改變。

需要在 Spring 配置文件中配置組件掃描器,用于在指定的基本包中掃描注解。

指定多個包的三種方式:

1)?使用多個context:component-scan?指定不同的包路徑

2)?指定 base-package?的值使用分隔符

分隔符可以使用逗號(,)分號(;)還可以使用空格,不建議使用空格。

逗號分隔:

分號分隔:

3)?base-package?是指定到父包名

base-package 的值表是基本包,容器啟動會掃描包及其子包中的注解,當(dāng)然也會掃描到子包下級的子包。所以base-package 可以指定一個父包就可以。

或者最頂級的父包

但不建議使用頂級的父包,掃描的路徑比較多,導(dǎo)致容器啟動時間變慢。指定到目標(biāo)包和合適的。也就是注解所在包全路徑。例如注解的類在com.bjpowernode.beans 包中

定義Bean?的注解@Component(掌握)

需要在類上使用注解@Component,該注解的value?屬性用于指定該bean?的 id?值。

舉例:di01

另外,Spring 還提供了 3 個創(chuàng)建對象的注解:

  • @Repository 用于對DAO?實現(xiàn)類進(jìn)行注解

  • @Service 用于對Service?實現(xiàn)類進(jìn)行注解

  • @Controller 用于對Controller?實現(xiàn)類進(jìn)行注解

這三個注解與@Component 都可以創(chuàng)建對象,但這三個注解還有其他的含義,@Service 創(chuàng)建業(yè)務(wù)層對象,業(yè)務(wù)層對象可以加入事務(wù)功能, @Controller 注解創(chuàng)建的對象可以作為處理器接收用戶的請求。

@Repository,@Service,@Controller 是對@Component 注解的細(xì)化,標(biāo)注不同層的對象。即持久層對象,業(yè)務(wù)層對象,控制層對象。

@Component 不指定value 屬性,bean 的 id 是類名的首字母小寫。

簡單類型屬性注入@Value(掌握)

需要在屬性上使用注解@Value,該注解的value 屬性用于指定要注入的值。

使用該注解完成屬性注入時,類中無需setter。當(dāng)然,若屬性有setter, 則也可將其加到setter 上。

舉例:

byType?自動注入@Autowired(掌握)

?需要在引用屬性上使用注解@Autowired,該注解默認(rèn)使用按類型自動裝配Bean 的方式。

使用該注解完成屬性注入時,類中無需setter。當(dāng)然若屬性有setter,則也可將其加到setter上。

舉例:


byName?自動注入@Autowired?與@Qualifier(掌握)

需要在引用屬性上聯(lián)合使用注解@Autowired?與@Qualifier。@Qualifier 的value?屬性用于指定要匹配的Bean?的id?值。類中無需set?方法,也可加到set 方法上。

舉例:

@Autowired 還有一個屬性required,默認(rèn)值為true,表示當(dāng)匹配失敗后,會終止程序運(yùn)行。若將其值設(shè)置為false,則匹配失敗,將被忽略,未匹配的屬性值為null。


JDK?注解@Resource?自動注入(掌握)

Spring?提供了對jdk?中@Resource?注解的支持。@Resource?注解既可以按名稱匹配Bean,也可以按類型匹配Bean。默認(rèn)是按名稱注入。使用該注 解,要求JDK?必須是 6?及以上版本。@Resource?可在屬性上,也可在set?方法上。

(1)?byType?注入引用類型屬性

@Resource 注解若不帶任何參數(shù),采用默認(rèn)按名稱的方式注入,按名稱不能注入bean,則會按照類型進(jìn)行Bean 的匹配注入。

舉例:

(2)?byName?注入引用類型屬性

@Resource 注解指定其name 屬性,則name 的值即為按照名稱進(jìn)行匹配的Bean 的 id。

舉例:

注解與 XML?的對比

注解優(yōu)點(diǎn)是:

  • 方便

  • 直觀

  • 高效(代碼少,沒有配置文件的書寫那么復(fù)雜)。

其弊端也顯而易見:以硬編碼的方式寫入到Java 代碼中,修改是需要重新編譯代碼的。

XML 方式優(yōu)點(diǎn)是:

  • 配置和代碼是分離的

  • 在xml?中做修改,無需編譯代碼,只需重啟服務(wù)器即可將新的配置加載。xml?的缺點(diǎn)是:編寫麻煩,效率低,大型項目過于復(fù)雜。

最后奉上視頻教程??,視頻觀看效果更佳?。∽哌^路過別忘素質(zhì)三連哦~~







Spring框架入門必備教程的評論 (共 條)

分享到微博請遵守國家法律
宜宾市| 南华县| 化州市| 栾川县| 潮州市| 渝北区| 株洲市| 铜山县| 图们市| 清流县| 长岭县| 金秀| 固原市| 保山市| 岑溪市| 井冈山市| 凤阳县| 平乡县| 台中县| 万源市| 常熟市| 谢通门县| 定远县| 连州市| 沛县| 延津县| 彰化县| 克什克腾旗| 林周县| 东海县| 凭祥市| 霸州市| 舞阳县| 临洮县| 海南省| 西林县| 巩留县| 辽阳市| 麻城市| 青海省| 光泽县|