免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      7天學(xué)完Spring:Spring框架搭建和解析以及Bean對象的創(chuàng)建

      7天學(xué)完Spring:Spring框架搭建和解析以及Bean對象的創(chuàng)建

      目錄

      • 二丶Spring核心和設(shè)計思想
      • Spring是什么?如何理解SpringIoC和DI是什么?區(qū)別?
      • 通過容器對象.getBean()獲取依賴注入:把一個Bean對象,注入到另一個Bean的屬性當(dāng)中byName:通過Bean的id/名稱來匹配如果此時你的id/名稱不存在或者說不唯一。怎么綁定?方式一:使用 @Qualifier(“XXX”)方式二: 使用@Resource(name=”XXX”)說一下@Autowired 和 @Resource 的區(qū)別

      這一部分就是關(guān)于Spring的部分了,在這里我們主要學(xué)習(xí)四個部分

      1、Spring2、Spring Boot3、Spring NVC4、MyBatis

      這里特別對最后一個說一下,MyBatus。它是用來 代替 JDBC 編程,JDBC 作為Java 提供的一組 用來 操作數(shù)據(jù)庫 的 API非常繁瑣

      1、獲取數(shù)據(jù)源2、與數(shù)據(jù)建立連接3、編寫 SQL 語句。4、執(zhí)行SQL5、此時 SQL 已經(jīng)執(zhí)行完畢,然后需要我們?nèi)メ尫刨Y源

      所以重復(fù)的代碼就很多,所以不推薦使用。這里我們一步一步來

      一丶為什么學(xué)框架

    1. 學(xué)習(xí)框架相當(dāng)于從“小作坊”到“工廠”的升級,小作坊什么都要自己做,工廠是組件式裝配,特點就是高效。
    2. 框架更加易用、簡單且高效
    3. 框架的便捷性

      什么意思呢?

      1、 需配置 Tomcat,點擊“運 ”按鈕就可以運 項 ,Spring Boot 內(nèi)置了 Web 容器(可直接運 )。2、 快速添加外部 jar 包(依賴)。3、 快速發(fā)布項 (使 java -jar 式就可以發(fā)布)。4、 對象 動裝配。5、 …

      和servlet進(jìn)行對比

      我們傳統(tǒng)的servlet怎么使用的呢?

      1、創(chuàng)建一個 maven 項目2、在 pom.xml 中 引入相關(guān)依賴3、創(chuàng)建特定的目錄4、編寫代碼5、打包6、部署7、驗證程序8、發(fā)布【使用 (Tomcat) 進(jìn)行 程序的部署和發(fā)布】

      光是這一連串的流程下來,就讓人絕望,我們可以清楚的發(fā)現(xiàn)servlet有以下不足

      1、添加外部 jar 不 便,容易出錯, 如添加了 個不匹配的外部 jar 版本;

      2、運 和調(diào)試的時候需要配置 tomcat 不 便;

      3、 發(fā)布不 便,servlet 項 必須依靠外置的 tomcat(外置的 web 容器)運 。

      4、 路由配置不 便, 個訪問地址對應(yīng) 個 Servlet 類。

      5、…

      而以上痛點問題,都可以通過 JavaEE 進(jìn)階框架解決,接下來我們一起來看。

      二丶Spring核心和設(shè)計思想

      Spring是什么?如何理解Spring

      先從第一個問題開始,啥是Spring?

      Spring 指的是 Spring Framework(Spring 框架),它是 個開源框架,有著活躍 龐 的社區(qū),這就是它之所以能 久不衰的原因。Spring 持 泛的應(yīng) 場景,它可以讓 Java 企業(yè)級的應(yīng) 程序開發(fā)起來更簡單。

      所以總結(jié)一下: Spring就是包含了眾多工具方法的loC容器

      這里可能就有鐵子會發(fā)問啥是容器?

      容器是用容納某種物品的(基本)裝置。

      是不是有點迷,那就想想我們的數(shù)據(jù)結(jié)構(gòu),List,Map。如果還是想不出來,那就再想想我們的Tomcat

      List/Map -> 數(shù)據(jù)存儲容器

      Tomcat -> Web 容器

      這里是不是好奇為啥Tomcat是一個容器呢?

      但是 Tomcat 為什么是一個 Web 容器呢?

      思考一下:

      Tomcat 是用來運行 外部的項目,因此它是一個 Web 容器。

      你有一個項目,想要運行。

      肯定是要將項目部署到 Tomcat 的 webapps 目錄底下,才可以運行。

      此時,webapps 就是一個項目的容器

      而 webapps 目錄,就是 Tomcat 下面的一個子目錄。

      那么,我們將 Tomcat 稱為是一個容器,沒有任何問題

      IoC和DI是什么?區(qū)別?

      IoC = Inversion of Control 翻譯成中文是“控制反轉(zhuǎn)”的意思,也就是說 Spring 是一個“控制反轉(zhuǎn)”的容器,怎么理解這句話呢?

      分成兩點,第一個點是控制,第二個點是反轉(zhuǎn)。

      也就是說:之前程序的控制權(quán)限是在我們自己手上,現(xiàn)在,我們把這個控制權(quán)交出去了。

      那么通過一個實際的情況來說一下

      我們在 A 類 中,想去調(diào)用 B 類中的方法,是怎么做的?

      是不是 要去new B 類對象,通過 對象 去調(diào)用 B類中的方法。當(dāng)前 B 的控制權(quán),是我們手上的。而 控制反轉(zhuǎn),就是將我們手上的權(quán)限,交由 “其他人” 來操作這個類。這個“其他人”,就是 Spring 框架。

      此時,我們想要 A 類中調(diào)用 B 的時候, 告訴 框架,我要在 A 中 調(diào)用 B 了。

      至于 B 的生命周期,和我們沒有任何關(guān)系。

      這是控制反轉(zhuǎn)。

      前面也說了:spring是一個控制反轉(zhuǎn)容器

      也就是 像之前在傳統(tǒng)開發(fā)的時候,所有需要我們自己去new東西,都不需要我們再去new 了。因為我們把控制權(quán) “反轉(zhuǎn)給了” Spring 框架。Spring 會幫我們管理所有的對象(Bean)。

      哪一個例子來舉例吧

      比如說我們構(gòu)造一個car類,然后我們肯定是要new一個car對象,在car對象進(jìn)行初始化的時候是不是要new一個Framework對象?那么繼續(xù)往下走,每一次的初始化都帶著底層的對象的new,那么問題就來了,這對應(yīng)著什么呢?

      如果輪胎的尺寸的固定的,然而隨著對的車的需求量越來越大,個性化需求也會越來越多,這時候我們就需要加工多種尺寸的輪胎,那這個時候就要對上面的程序進(jìn)行修改了。這一修改,就是全部的修改呀!

      那么我們怎么解決呢?

      我們可以嘗試不在每個類中自己創(chuàng)建下級類,如果自己創(chuàng)建下級類就會出現(xiàn)當(dāng)下級類發(fā)生改變操作,自己也要跟著修改。

      此時,我們只需要將原來由自己創(chuàng)建的下級類,改為傳遞的方式(也就是注入的方式),因為我們不需要在當(dāng)前類中創(chuàng)建下級類了,所以下級類即使發(fā)生變化(創(chuàng)建或減少參數(shù)),當(dāng)前類本身也無需修改任

      何代碼,這樣就完成了程序的解耦。

      是不是有點繞?沒關(guān)系,這樣想,原來我們是從下往上,一層包含一層,上面包含這下一層的New的對象,然后我們可以不這樣搞,我們可以從下往上走

      也就是說,我們先創(chuàng)建好下層,然后把下層的屬性注入到上層,一層一層往上遞歸包含,最后到最頂上。

      在傳統(tǒng)的代碼中對象創(chuàng)建順序是:Car -> Framework -> Bottom -> Tire改進(jìn)之后解耦的代碼的對象創(chuàng)建順序是:Tire -> Bottom -> Framework -> Car

      通用程序的實現(xiàn)代碼,類的創(chuàng)建順序是反的,傳統(tǒng)代碼是 Car 控制并創(chuàng)建了

      Framework,F(xiàn)ramework 創(chuàng)建并創(chuàng)建了 Bottom,依次往下,而用了容器之后是上級對象創(chuàng)建并控制下級對象了,而是下級對象把注入將當(dāng)前對象中,下級的控制權(quán)不再由上級類控制了,這樣即使下級類發(fā)生任何改變,當(dāng)前類都是不受影響的,這就是典型的控制反轉(zhuǎn),也就是 IoC 的實現(xiàn)思想

      那么回到開頭,什么是loC?什么是DI?

      1>理解loC

      我們可以直接認(rèn)為 Spring 就是一個 IoC 容器。

      既然它是一個容器,那么,容器主要的兩個核心功能,肯定是具有的

      1、裝東西: 那些被 控制反轉(zhuǎn) 的對象(Bean),都可以存儲在 Spring 中。 2、取東西: 作為一個容器,不可能只存不取吧? 將 對象(Bean),從 Spring 中 取出來。

      這也是 Spring IoC 容器 最核心的兩個功能【存 和 取 】。

      那根據(jù)上面我的例子,為啥說能簡化開發(fā)呢?

      將對象存放到容器中的好處:將對象存儲在 IoC 容器相當(dāng)于將以后可能用的所有工具制作好都放到倉庫中,需要的時候直接取就行了,用完再把它放回到倉庫。而 new 對象的方式相當(dāng)于,每次需要工具了,才現(xiàn)做,用完就扔掉了也不會保存,下次再用的時候還得重新做,這就是 IoC 容器和普通程序開發(fā)的區(qū)別。

      2>理解DI

      說到 IoC 不得不提的一個詞就是“DI”,DI 是 Dependency Injection 的縮寫,翻譯成中文是“依賴注入”的意思。

      所謂依賴注入,就是由 IoC 容器在運行期間,動態(tài)地將某種依賴關(guān)系注入到對象之中。所以,依賴注入(DI)和控制反轉(zhuǎn)(IoC)是從不同的角度的描述的同一件事情,就是指通過引入 IoC 容器,利用依賴關(guān)系注入的方式,實現(xiàn)對象之間的解耦。

      說一說DI和loC的區(qū)別

      兩者其實是一個東西,但是是對一個事物從不同角度進(jìn)行了闡述。loC就是把某個對象交給Spring,然后用的時候跟他要,Spring怎么把對象給我我我不關(guān)心,我只要能拿到就可以了。而DI就是一個具體的實現(xiàn),DI關(guān)于于怎么將依賴注入對應(yīng)的對象里面。

      哪一個例子來說

      還是這個車,我們從兩個角度來說一下

      處理思維(loC):一個類外部依賴的對象,其控制權(quán)限發(fā)生了反轉(zhuǎn),我們就不再去new它了,而是直接用。然后直接從Spring哪里拿,告訴他,我要用實際操作(DI):這里我們從底向上就不是new了,而是Spring中,把我的下一級拿過來,直接注入。

      所以DI是實際實現(xiàn),但是loC是思想。

      1>Spring 是什么?如何理解 Spring?

      Spring 是一個包含 眾多工具方法 的 IoC 容器。既然 Spring 是一個 IoC 容器(反轉(zhuǎn)控制容器)。Spring是 存儲 IoC【反轉(zhuǎn)控制(后的對象)】 的一個容器

      2>IoC 和 DI 是什么?有什么區(qū)別?

      IoC – Inversion Of Control(控制反轉(zhuǎn))主要是將 對象的權(quán)限(創(chuàng)建與銷毀)交由 Spring 來管理。程序員 不必再去 new 對象了!在使用到某個對象的時候,直接向 Spring 索取,直接使用即可。DI dependency injection(依賴注入)將 引入的依賴 (執(zhí)行所依賴的對象),拿過來使用。區(qū)別:IoC 是一種 思想。DI 是具體的實現(xiàn)。

      Spring核心功能?

      這里上面也說了,這里最后再提一下

      既然 Spring 是一個容器,那么,肯定是具有容器的兩個核心功能(存 和 ?。?。1、將 Bean(反轉(zhuǎn)的對象)存儲到 Spring 容器中。2、將 Bean(反轉(zhuǎn)的對象)從 Spring 容器中取出來。這也就是 Spring 的 兩個核心功能。

      三丶Spring創(chuàng)建和使用

      準(zhǔn)備環(huán)境

      首先就是創(chuàng)建一個maven項目

      然后之后直接創(chuàng)建就好

      這里沒有太多可以說的,主要就是要記得添加一下spring的依賴

      org.springframework spring-context 5.2.3.RELEASE org.springframework spring-beans 5.2.3.RELEASE

      創(chuàng)建核心容器–注解配置方式

      這里我們創(chuàng)建容器有多種方式,比如說

      ApplicationContext context = new ClassPathXmlApplicationContext(“spring-config.xml”);

      但是這里種方式用的很少,這里我也不在對他介紹過多,這里我介紹另外一種

      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(“org.example.lifecycle”);

      首先說一下這種方式

      具體的格式為

      Application context = new 接口實現(xiàn)類()

      這里我們就會有很多很多的接口,但是這里我們就只介紹兩種

      如果說你是加載類加載路徑下的xml容器,然后再把內(nèi)容裝到容器當(dāng)中,那么過程無疑就很麻煩,這里我們不推薦使用這種方式。我們推薦用配置的方式去創(chuàng)建容器

      1>包掃描

      可以看到,我上面的圖中,通過注解配置的方式去創(chuàng)建容器的時候,加了個包的路徑,什么意思呢?

      但是這里有問題呀!我不可能這個類中所有的東西都是要使用的,那我怎么辦呢?

      2>添加類注解–五類注解解析

      這里的話就要加注解,告訴容器,那個類是我需要的,那個是我不需要的

      1. 類注解:@Controller、@Service、@Repository、@Component、@Configuration。2. 方法注解:@Bean。

      這里的話一一說明一下:

      @Controller:表示的是業(yè)務(wù)邏輯層;用于web開發(fā)處理http請求和響應(yīng),類似servlet@Servie:服務(wù)層;做業(yè)務(wù)邏輯的@Repository:持久層;數(shù)據(jù)庫訪問,一般是數(shù)據(jù)庫操作@Component:一般組件@Configuration:配置層。系統(tǒng)啟動前提前加載一些資源

      然后這里我們進(jìn)行寫個代碼驗證一下

      那么誰可以被掃描注冊到容器中呢?答案毋庸置疑,肯定就是 UserService

      這里特別說明一下!?。。。。。。。。。。。。。。。。。。。。。?!

      你類注解這里的ID是有講究的:

      就是說:

      Bean ID/名稱,默認(rèn)是類名首字母小寫

      那么我接就接著往下說,你類當(dāng)中所有的東西都是需要的嘛?那肯定不一定呀,對不對?那么我們怎么辦呢?這個時候就要用到我們的方法注解了

      3>添加方法注解

      這里我們就直接上代碼圖

      所以你甚至還可以再過分一點:在當(dāng)前方法注解的同時放開類注解,讓類一邊被掃描的時候方法也在被掃描(玩的挺花哈)

      所以其實你可以發(fā)現(xiàn), Spring 存放的東西,其實是一個類似于 Map 的這樣子的結(jié)構(gòu),這里的鍵就是我們的 BeanID ,值呢就是我們的 Bean對象

      總結(jié)

      這里小小的總結(jié)一下

      說一下ApplicationContexte和BeanFactory的區(qū)別

      四丶Bean對象的使用

      通過容器對象.getBean()獲取

      這里就是我們上面的使用方式

      所以這里不做過多闡述,主要是下面的這種,是我們主要的學(xué)習(xí)目標(biāo)

      依賴注入:把一個Bean對象,注入到另一個Bean的屬性當(dāng)中

      獲取 bean 對象也叫做對象裝配,是把對象取出來放到某個類中,有時候也叫對象注入。

      對象裝配(對象注入)的實現(xiàn)方法以下 3 種:

    4. 屬性注入
    5. 構(gòu)造方法注入
    6. Setter 注入
    7. 接下來,我們分別來看具體的實現(xiàn)

      byType類型匹配

      屬性注入是使用 @Autowired 實現(xiàn)的,將 Service 類注入到 Controller 類中。

      這種的就是屬性/setter方法上加 @Autowired ,這里我們直接來代碼演示

      繼續(xù)往下走,如果說你再多來幾個呢?就是我再來一個 屬性:二號張三 還能往出拿嘛?當(dāng)然可以拿,這根本不沖突,不是嘛?

      那么問題就來了,既然字符對象我可以往出拿,那么其他類的對象我是不是也可以存著,然后需要的時候往出拿呢?

      那就試一試唄?

      byName:通過Bean的id/名稱來匹配

      但是你仔細(xì)看一看,有沒有發(fā)現(xiàn)這個打印出來的有點眼熟?沒錯,他就是我們第一個創(chuàng)建的UserService對象

      所以這啥意思?你是通過變量名稱去獲取打印對象的???

      不知道,也不好說,所以我們試一試好嘛?

      這里如果說對我這個us1有疑問的,那么可以看我上面 [三丶Spring創(chuàng)建和使用 == >創(chuàng)建核心容器–注解配置方式 ==> 3>添加方法注解]這里。往下走:

      然后我們之后打印一下

      所以就是的了?那么規(guī)則是什么呢?如果說我此時來一個us3呢?我這個時候是沒有new us3呢呀?

      然后此時解決一下我們上面的問題,這里你怎么搞?那么觸發(fā)一個問題

      如果此時你的id/名稱不存在或者說不唯一。怎么綁定?

      這里先梳理一下,先是檢查類型,發(fā)現(xiàn)好幾個相同類型,然后就去檢查id,然后你此時id不唯一或者id不存在怎么辦?那就要會報錯?。?!

      方式一:使用 @Qualifier(“XXX”)

      直接加注解,里面指定唯一的對象

      方式二: 使用@Resource(name=“XXX”)

      說一下@Autowired 和 @Resource 的區(qū)別

      1.出身不同:@Autowired 來自于 Spring,而 @Resource 來自于 JDK 的注解;2.使用時設(shè)置的參數(shù)不同:相比于 @Autowired 來說,@Resource 支持更多的參數(shù)設(shè)置,例如name 設(shè)置,根據(jù)名稱獲取 Bean,@Autowired 只有一個 value 屬性3.用法不同@Autowired 支持 屬性注入,構(gòu)造方法注入,Setter 注入@Resource 支持 屬性注入,Setter 注入

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      (0)
      用戶投稿
      上一篇 2022年7月24日 17:05
      下一篇 2022年7月24日 17:05

      相關(guān)推薦

      • 視頻轉(zhuǎn)語音其實很簡單!用對了方法,5秒鐘搞定

        平時刷短視頻時經(jīng)常會刷到一些英語短文朗誦,對于我這種英語差的人來說,經(jīng)常聽能大大提高我的英語口語能力,于是就想要將視頻轉(zhuǎn)換成語音保存到手機(jī),這樣就可以無限循環(huán)學(xué)習(xí)了! 可是該如何轉(zhuǎn)…

        2022年8月19日
      • 魔靈召喚刷藍(lán)水晶怎么快?符文經(jīng)驗稀有魔靈一樣適用

        魔靈召喚里面藍(lán)水晶這玩意缺的還是比較多,用處太多了,對于很多玩家而言這個都是要經(jīng)常去刷的,那么用什么方法去刷比較快呢?下面就給大家分享下方法,不管是自己刷還是搬磚的都適合,可以一直…

        2022年8月8日
      • 城投公司轉(zhuǎn)為國投公司就能走出困境嗎?

        作者|席加省 資深國資國企研究專家 擁有18年以上的國企改革、管理咨詢經(jīng)驗、企業(yè)高級管理工作經(jīng)驗,常年活躍在國企改革一線,深度服務(wù)客戶超過100家,執(zhí)行咨詢項目超過200個 很多城…

        2022年8月13日
      • 負(fù)債怎樣調(diào)整好自己的心態(tài)

        負(fù)債者怎樣調(diào)整心態(tài)?對于這個問題,做為一名負(fù)債者,我選擇回答。 1、學(xué)會關(guān)愛自己,只有多關(guān)愛自己,才可以更多的能量去關(guān)愛他人,多幫助他人,善待自己,也是一種減壓的方式。 2、遇到心…

        2022年4月26日
      • 楊紫秦俊杰疑復(fù)合?被曝同行聚餐,女方回應(yīng)吃飯對象另有其人

        這不,有八卦媒體曬出這樣一組照片,照片中女星楊紫和前男友秦俊杰先后從同一家飯店走出來,猜測兩人是一起聚餐了,還有人指出兩人疑似有感情復(fù)合的趨勢。 楊紫與秦俊杰之間的這段戀愛往事,曾…

        2022年5月13日
      • 書摘 以幽默的方式過一生2

        生活,就是心懷最大的善意在荊棘中穿行 1. 生活,就是心懷最大的善意在荊棘中穿行。即使被刺傷,亦不改初衷。 2. 當(dāng)你想行善的時候,你總是被騙。當(dāng)你對所有人都失去信任的時候,又總有…

        2022年8月23日
      • 5歲多的孩子,看到人就想打人怎么辦?

        5歲多的孩子,正處于想要交朋友,并且還想要交很多朋友的階段。但是很多孩子不知道如何正確地與人溝通,也不知道怎么樣讓別人喜歡自己。所以就會在有小朋友的地方要么給人家搗亂,要么伸手打人…

        2022年8月21日
      • 凱子不削了?平衡補(bǔ)丁又有新消息!這套牌獲得所有職業(yè)選手認(rèn)可?

        昨天我們聊了聊偷跑的平衡補(bǔ)丁內(nèi)容,目前已經(jīng)到被大家發(fā)現(xiàn)了多張削弱和增強(qiáng)的牌,可有的兄弟們不注意審題嗷,目前公布的只是偷跑內(nèi)容,不是全部內(nèi)容,可能還會有牌被削弱,還會有牌被增強(qiáng)。 另…

        2022年8月15日
      • 《王者榮耀》鏡頭跟隨技能怎么開啟 鏡頭跟隨技能開啟方法

        《王者榮耀》鏡頭跟隨技能怎么開啟?最近游戲中新上線了一個功能,在這里玩家們可以設(shè)置技能鏡頭跟隨,提高了我們釋放技能的準(zhǔn)確率,體驗感更加舒適。那么鏡頭跟隨技能應(yīng)該怎么開啟?還不清楚的…

        2022年8月16日
      • 《寶可夢朱紫》可騎乘傳說寶可夢還有太晶化

        寶可夢直面會如期開啟,如之前介紹的一樣,本次直面會只介紹了《寶可夢朱紫》的新情報,沒有出現(xiàn)其他寶可夢新作的消息。本次直面會更進(jìn)一步的介紹了游戲的全新機(jī)制。 直面會全程視頻:http…

        2022年8月6日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息