日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot教程(7) – 直观地理解Spring容器

發(fā)布時間:2023/12/20 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot教程(7) – 直观地理解Spring容器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在你學習Spring之前,你肯定聽說過“控制反轉”、“依賴注入”、“上下文”等名詞,伴隨著這些名詞的,是一些冗長晦澀的解釋,這些解釋并沒有什么顯著的錯誤,但是因為太過抽象導致初學者們無法直觀地去理解它們。

廢話不多說,我們通過舉例或者寫代碼來一步一步理解它們。

在一個系統(tǒng)里,可能有多個業(yè)務部分,比如用戶服務,訂單服務,數據服務等等,在代碼里,這些服務也許分布在多個類中,可能叫做UserService或者OrderService等等。為了簡便,我們假設系統(tǒng)里有A、B、C、D四個類,他們有如下的依賴關系:

簡單來說,D是B的成員,A和B是C的成員。以前Spring這種東西沒有出現(xiàn)的時候,你可能手動地去創(chuàng)建ABCD對象,再設置他們的依賴關系,如下圖:

上面的代碼看起來很簡單,也不復雜。問題是當你的系統(tǒng)規(guī)模擴大了以后,有上百個對象需要初始化以及設置依賴的時候,復雜度就直線上升了。

系統(tǒng)類的對象越多,依賴關系越復雜

為了降低復雜度,減少他們之間的耦合,這個時候我們就需要用上Spring容器了。程序里的對象都可以扔到容器里,對象只需要告訴容器它需要哪些依賴就行,容器自動初始化好并給它。比如上面ABCD那個例子,C告訴容器它需要A和B,B告訴容器它需要D,這樣ABCD四個對象都可以扔到容器里了,當你想用C的時候,就從容器里面拿出來,這時候C的成員就已經包含了A和B了(我們目前只討論單例的情況,就是一個類只有一個對象)。

容器通過“配置”來了解對象之間的依賴關系。

在Spring框架里,ApplicationContext就代表了容器(又叫應用程序上下文),容器里的對象,又叫Bean。配置有兩種方式,一種是xml,一種是Java配置(或者說代碼配置)。早些年的時候,Java Web(SSH)開發(fā)為人詬病的,就是臃腫的xml配置,雖然目前Spring仍然支持xml配置和混合配置,不過Spring Boot已經建議使用Java配置了。我們來通過一個例子來看看如何使用容器和配置:

圖中顯示了項目的源碼結構、程序的入口、配置以及依賴。

上圖寫出了ABCD的源碼。

配置文件是Config.java,它有一個@Configuration注解,這表明Config類是配置類。它還有另外一個注解@ComponentScan,這個注解表示容器應該去掃描程序的代碼,看看那些組件應當被初始化為Bean。哪些類會被初始化為Bean呢?我們看看ABCD的源碼,發(fā)現(xiàn)他們各自都有注解@Component,這個注解就表示了它所在的類是組件,需要初始化Bean。C和B的成員變量都用@Autowired注解來修飾,這樣容器就知道他們都依賴哪些Bean了,ABCD的對象都生成好之后,容器就把D對象賦值給B的成員,把A和B的對象賦值給C的成員。

如果你運行程序,會發(fā)現(xiàn)輸出的結果是true,也就是C里的A成員不為空。這樣你是不是就理解了Spring容器的作用了呢?你的程序不必再在ABCD的外部去設置他們的依賴了,反而只需要在ABCD的類的內部指明依賴就行,這個從外而內的過程就是控制反轉(IoC,Inversion of Control),控制權交給了Spring容器,Spring容器也叫IoC容器。你還可能聽過依賴注入(DI,Dependency Injection),如果你看網上文章沒明白,權當他們是一樣的好了。

對于開源庫,他們的類肯定沒有@Component注解,這樣肯定不能通過掃描來加入容器。那就需要寫點代碼了。Config類中有一個objectMapper方法,返回了一個ObjectMapper對象(ObjectMapper是Jackson的關鍵類),objectMapper方法有個@Bean注解,表示返回的對象會加入到容器中。ObjectMapper對象可以在objectMapper方法里,進行一些修改呀,配置呀等等。

這個時候ObjectMapper對象還沒人用,如果ABCD任何一個類想用,只需要在類中加一個成員@Autowired ObjectMapper objectmapper;,Spring容器會自動把ObjectMapper對象賦值到這個成員上。非常方便,尤其是在大項目里,類非常多,一行代碼就把你需要的對象拿過來用,簡直爽的不行。在實踐中,依賴的類常常是個接口,使用者只調用接口就行,至于容器給它哪種實現(xiàn)并不重要,這個邏輯在“配置”里就可以控制。這樣,程序的耦合度進一步減小了。

在我們之前運行第一個Spring Boot應用的時候,我們曾經添加了一個控制器,他有個@Controller注解,這個注解相當于一個特殊的@Component,只不過@Controller表示當前的組件是用來處理網絡請求的。類似的還有,@Service用來表示業(yè)務相關的組件,@Repository用來表示數據獲取相關的組件。他們都是通過自動掃描放到Spring容器中的。

總結

為了讓大家理解Spring容器,本文忽略了很多技術上的細節(jié),比如Bean的命名,比如說@ComponentScan的掃描路徑和注解參數,比如聲明依賴除了在成員上加@Autowired以外還能通過構造方法或者setter等等。我相信你懂了Spring容器的概念之后,這些都不是什么問題。


博客鏈接:fookwood.com/spring-boot…


轉載于:https://juejin.im/post/5d106ab26fb9a07f03574621

總結

以上是生活随笔為你收集整理的Spring Boot教程(7) – 直观地理解Spring容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品国产美女 | a级黄色录像 | 久久天天干 | 欧美三级在线播放 | 午夜免费福利小电影 | 黄色a区| 日韩黄网站 | 亚洲av无码一区二区二三区 | 成人免费看片入口 | 美女极度色诱图片www视频 | 超碰人人草 | 成人午夜影视 | 国产我不卡 | 91成人免费在线视频 | 伊人网在线 | 精品999久久久一级毛片 | 人妻激情文学 | 国产精品乱码久久久久久 | 三级影片在线免费观看 | 夜夜操网| av大片在线免费观看 | 韩国伦理中文字幕 | 国产男女激情 | 亚洲欧美国产日韩精品 | 美女露胸露尿口 | 青青操在线观看视频 | 极品粉嫩小仙女高潮喷水久久 | 成人手机在线播放 | 一本色道久久88综合日韩精品 | 欧美色图亚洲激情 | 国产精品aⅴ | 里番acg★同人里番本子大全 | 免费看黄色小视频 | 亚洲日本片| 无遮挡av | 免费荫蒂添的好舒服视频 | 91久色视频 | 欧美人妻精品一区二区三区 | 亚洲首页 | 美女屁股眼视频免费 | 色狗网站 | 亚洲精品久久久久中文字幕二区 | 中文字幕av片 | 亚洲欧美另类日韩 | 五月天婷婷激情网 | 91影院在线免费观看 | 久久久999成人 | 国产在线午夜 | 瑟瑟视频在线看 | 激情男女视频 | 日本www黄| 公车乳尖揉捏酥软呻吟 | 麻豆成人在线观看 | 国产一区二区三区色淫影院 | 高清无码一区二区在线观看吞精 | 热九九精品 | 91精品视频免费在线观看 | 蜜桃免费av| avtt亚洲| 一级黄色a | 天天色天天爽 | 人人爽人人干 | 黄色网www | 国精品一区 | 99久久99九九99九九九 | 成人看片网站 | 成年人看的免费视频 | 色婷婷免费| av污在线观看 | 日本成人在线看 | 国产精品自拍第一页 | 欧美色综合网站 | 亚洲天堂影视 | 中文字幕在线观看日本 | 五月天狠狠操 | 欧美日韩国产专区 | av黄在线观看 | 日批毛片 | 国产1页 | 亚洲麻豆| 粉嫩av国产一区二区三区 | 亚洲黄色一区二区三区 | 国产亚洲女人久久久久毛片 | a级在线免费观看 | 五月天在线| 每日av在线 | 日韩欧美视频在线播放 | 在线爽| 久久久久久久久久一区二区三区 | 亚州黄色 | 国产孕妇一区二区三区 | 日本视频www| 日韩经典一区二区 | 亚洲成人一区二区三区 | 黄色av免费在线观看 | 中国女人性猛交 | 午夜蜜桃视频 | 日本久草视频 | 九九热伊人 |