測(cè)試同學(xué)從0到1上手Spring

最近在各個(gè)大廠的JD中關(guān)于測(cè)試平臺(tái)開(kāi)發(fā)的職位信息頻頻曝光,有很多同學(xué)對(duì)該職位產(chǎn)生了極高的熱情绩郎。也有很多人對(duì)其望而卻步潘鲫,認(rèn)為Spring、Spring boot這些東東太深?yuàn)W了肋杖,開(kāi)發(fā)都很難搞定溉仑,自己是一個(gè)tester又怎能駕馭呢?為了打消大家的顧慮状植,我準(zhǔn)備了一系列文章浊竟,通過(guò)我一個(gè)測(cè)試人的視角(我是從零開(kāi)始學(xué)習(xí)怨喘,我懂測(cè)試同學(xué)的需求),用最通俗的語(yǔ)言幫大家搞定Spring基礎(chǔ)知識(shí)振定,進(jìn)而快速理解Spring并在實(shí)際工作中進(jìn)行應(yīng)用必怜!

Spring定義

Spring是一個(gè)開(kāi)源框架,是為了解決企業(yè)應(yīng)用程序開(kāi)發(fā)復(fù)雜性而創(chuàng)建的后频∈崆欤框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許您選擇使用哪一個(gè)組件卑惜,同時(shí)為 J2EE 應(yīng)用程序開(kāi)發(fā)提供集成的框架膏执。Spring 框架的 7 個(gè)模塊,如下圖所示:

每個(gè)模塊的功能如下:

Spring core:核心容器提供 Spring 框架的基本功能露久。核心容器的主要組件是 BeanFactory胧后,它是工廠模式的實(shí)現(xiàn)。BeanFactory 使用控制反轉(zhuǎn)(IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)抱环。

Spring Context:Spring 上下文是一個(gè)配置文件壳快,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù)镇草,例如 JNDI眶痰、EJB、電子郵件梯啤、國(guó)際化竖伯、校驗(yàn)和調(diào)度功能。

Spring AOP:通過(guò)配置管理特性因宇,Spring AOP 模塊直接將面向切面的編程功能 , 集成到了 Spring 框架中七婴。所以,可以很容易地使 Spring 框架管理任何支持 AOP的對(duì)象察滑。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)打厘。通過(guò)使用 Spring AOP,不用依賴組件贺辰,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中户盯。

Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息饲化。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理莽鸭,并且極大地降低了需要編寫(xiě)的異常代碼數(shù)量(例如打開(kāi)和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)吃靠。

Spring ORM:Spring 框架插入了若干個(gè) ORM 框架硫眨,從而提供了 ORM 的對(duì)象關(guān)系工具,其中包括 JDO巢块、Hibernate 和 iBatis SQL Map礁阁。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)巧号。

Spring Web:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于? ? Web 的應(yīng)用程序提供了上下文氮兵。所以裂逐,Spring 框架支持與 Jakarta Struts 的集成歹鱼。Web 模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

Spring MVC:MVC 框架是一個(gè)全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實(shí)現(xiàn)泣栈。通過(guò)策略接口,MVC 框架變成為高度可配置的弥姻,MVC 容納了大量視圖技術(shù)南片,其中包括 JSP、Velocity庭敦、Tiles疼进、iText和POI

其中最為重要的就是Spring Core(控制反轉(zhuǎn)技術(shù),即IOC)和 Spring AOP秧廉,我會(huì)在后續(xù)的文章中進(jìn)行詳細(xì)介紹伞广,今天我們來(lái)重點(diǎn)講解Spring的環(huán)境搭建和Hello Spring Demo的編寫(xiě)。

環(huán)境搭建

最簡(jiǎn)單的方式疼电,創(chuàng)建一個(gè)maven工程嚼锄,pom.xml如下

<dependency>

??? <groupId>org.springframework</groupId>

??? <artifactId>spring-webmvc</artifactId>

??? <version>5.2.5.RELEASE</version>

</dependency>

Spring 中的Bean

Spring容器可以被看作一個(gè)大工廠,而 Spring 容器中的 Bean 就相當(dāng)于該工廠的產(chǎn)品蔽豺。如果希望這個(gè)大工廠能夠生產(chǎn)和管理 Bean区丑,這時(shí)則需要告訴容器需要哪些 Bean,以及需要以何種方式將這些 Bean 裝配到一起修陡。

Bean 是一種JAVA語(yǔ)言寫(xiě)成的可重用組件沧侥。為寫(xiě)成JavaBean,類(lèi)必須是具體的和公共的魄鸦,并且具有無(wú)參數(shù)的構(gòu)造器绷旗。JavaBean 通過(guò)提供符合一致性設(shè)計(jì)模式的公共方法將內(nèi)部域暴露成員屬性,set和get方法獲取鹏溯≈蝗鳎總之,JavaBean就是遵循一些規(guī)范的Java類(lèi)盾致。眾所周知主经,屬性名稱符合這種模式,其他Java 類(lèi)可以通過(guò)反射機(jī)制發(fā)現(xiàn)和操作這些JavaBean 的屬性庭惜。

范例代碼如下:

public class Person {

??? //Person類(lèi)封裝的私有屬性

??? // 姓名 String類(lèi)型

??? private String name;

??? // 性別 String類(lèi)型

??? private String sex;

??? // 年齡int類(lèi)型

??? private int age;

??? //Person類(lèi)的無(wú)參數(shù)構(gòu)造方法

??? public Person() {

??? }

??? //Person類(lèi)對(duì)外提供的用于訪問(wèn)私有屬性的public方法

??? public String getName() {

??????? return name;

??? }

??? public void setName(String name) {

??????? this.name = name;

??? }

??? public String getSex() {

??????? return sex;

??? }

??? public void setSex(String sex) {

??????? this.sex = sex;

??? }

??? public int getAge() {

??????? return age;

??? }

??? public void setAge(int age) {

??????? this.age = age;

??? }

}

Spring中的配置文件

Spring配置文件是用于指導(dǎo)Spring工廠進(jìn)行Bean生產(chǎn)罩驻、依賴關(guān)系注入(裝配)及Bean實(shí)例分發(fā)的"圖紙"。Spring配置文件是一個(gè)或多個(gè)標(biāo)準(zhǔn)的XML文檔护赊,applicationContext.xml(也可以定義為其他名字)是Spring的默認(rèn)配置文件惠遏,當(dāng)容器啟動(dòng)時(shí)找不到指定的配置文檔時(shí)砾跃,將會(huì)嘗試加載這個(gè)默認(rèn)的配置文件。我們可以把配置文件保存在src/main/resources目錄下

Spring配置文件支持兩種不同的格式节吮,分別是 XML 文件格式和 Properties 文件格式抽高。通常情況下,Spring 會(huì)以 XML 文件格式作為Spring 的配置文件透绩,這種配置方式通過(guò) XML 文件注冊(cè)并管理 Bean 之間的依賴關(guān)系翘骂。XML 格式配置文件的根元素是 <beans>,該元素包含了多個(gè) <bean> 子元素帚豪,每一個(gè) <bean> 子元素定義了一個(gè) Bean碳竟,并描述了該 Bean 如何被裝配到 Spring 容器中。配置文件基礎(chǔ)格式如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

??? xsi:schemaLocation="http://www.springframework.org/schema/beans

??????? https://www.springframework.org/schema/beans/spring-beans.xsd">

? <bean id="..." class="...">?

?? </bean>

<bean id="..." class="...">?

<property name=" ..." value="..."/>

</beans>

其中

xmlns表示xml需要引入的命名空間狸臣。

bean= 對(duì)象

id= 變量名莹桅,id 是bean的標(biāo)識(shí)符,要唯一,可以理解為一個(gè)實(shí)例名

class= new的類(lèi)

property相當(dāng)于給對(duì)象中的屬性設(shè)值

Hello Spring

寫(xiě)一個(gè)類(lèi)代碼

public class HelloSpring {

??? private String name="hello";

??? HelloSpring(){

???? System.out.println("Hello Spring");

??? }?

??? public String getName() {

??????? return this.name ;

??? }????

??? public void setName(String name) {

??????? this.name = name;

??? }

}

在配置文件中添加HelloSpring的類(lèi)配置信息

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

<beansxmlns="http://www.springframework.org/schema/beans"

??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

??? xmlns:context="http://www.springframework.org/schema/context"

??? xsi:schemaLocation="http://www.springframework.org/schema/beans

??????? https://www.springframework.org/schema/beans/spring-beans.xsd

???????http://www.springframework.org/schema/context

???????https://www.springframework.org/schema/context/spring-context.xsd">

<beanid="hellospring"class="com.my.demo.HelloSpring"/>

</beans>?

寫(xiě)一個(gè)測(cè)試類(lèi)

public class HelloTest {

??? ?public static void main(String[] args) {

??? ???????//獲取spring上下文對(duì)象

??? ???????ApplicationContextcontext = new ClassPathXmlApplicationContext("beans1.xml");

??? ???????//我們的對(duì)象能在都在spring中管理了烛亦,我們要使用诈泼,直接取出來(lái)就可以了

??? ???????HelloSpringhello = (HelloSpring) context.getBean("hellospring");

??? ???????System.out.println(hello.getName());

??? ??? }

}

運(yùn)行類(lèi)HelloTest,運(yùn)行結(jié)果如下:

Hello Spring //構(gòu)造函數(shù)中輸出的值

Hello //getName方法中輸出的值

是不是很神奇煤禽,我們可以看到spring并沒(méi)有new 實(shí)例的過(guò)程铐达,但是完成了實(shí)例化的操作!并成功調(diào)用了getName方法呜师,這就是Spring 容器中對(duì)Bean的管理娶桦,簡(jiǎn)單的說(shuō),就是Spring框架從配置文件beans1.xml中獲取了類(lèi)HelloSpring的實(shí)例hellospring汁汗,并自動(dòng)完成了實(shí)例化的相關(guān)工作衷畦!這項(xiàng)技術(shù)就是IOC,我會(huì)在下一篇文章中詳細(xì)說(shuō)明知牌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祈争,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子角寸,更是在濱河造成了極大的恐慌菩混,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁藕,死亡現(xiàn)場(chǎng)離奇詭異沮峡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亿柑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)邢疙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事疟游『艋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵颁虐,是天一觀的道長(zhǎng)蛮原。 經(jīng)常有香客問(wèn)我,道長(zhǎng)另绩,這世上最難降的妖魔是什么儒陨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮板熊,結(jié)果婚禮上框全,老公的妹妹穿的比我還像新娘察绷。我一直安慰自己干签,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布拆撼。 她就那樣靜靜地躺著容劳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闸度。 梳的紋絲不亂的頭發(fā)上竭贩,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音莺禁,去河邊找鬼留量。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哟冬,可吹牛的內(nèi)容都是我干的楼熄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浩峡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼可岂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起翰灾,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缕粹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纸淮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體平斩,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年咽块,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绘面。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖飒货,靈堂內(nèi)的尸體忽然破棺而出魄衅,到底是詐尸還是另有隱情,我是刑警寧澤塘辅,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布晃虫,位于F島的核電站,受9級(jí)特大地震影響扣墩,放射性物質(zhì)發(fā)生泄漏哲银。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一呻惕、第九天 我趴在偏房一處隱蔽的房頂上張望荆责。 院中可真熱鬧,春花似錦亚脆、人聲如沸做院。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)键耕。三九已至,卻和暖如春柑营,著一層夾襖步出監(jiān)牢的瞬間屈雄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工官套, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酒奶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓奶赔,卻偏偏與公主長(zhǎng)得像惋嚎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纺阔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344