亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring基礎篇之初識DI和AOP

2024-07-13 10:15:46
字體:
來源:轉載
供稿:網友

前言

  作為從事java開發的碼農,Spring的重要性不言而喻,你可能每天都在和Spring框架打交道。Spring恰如其名的,給java應用程序的開發帶了春天般的舒爽感覺。Spring,可以說是任何一個java開發者通往技術高階的必備基礎。當然,要學好Spring,尤其是了解Spring的底層原理并不容易,需要花費很多時間和精力來潛心的研習,并在實際的項目中不斷的試錯和總結,才能形成屬于自己的思維理解。博主對Spring最初的認識頗淺,項目中遇到問題依靠度娘大概也能籠而統之的解決。不過呢,接觸Spring這么一年多時間里,對其框架體系認知比較雜亂,深層技術依然是霧里看花一般,沒有形成自己的認知和理解,這對編程技術的提升是十分不利的。鑒于此,才決定靜下心來從頭至尾系統的學習Spring框架,并通過博客的形式記錄學習點滴,分享技術知識,算是拋磚引玉吧。好了,閑言少敘,咱們開始切入正題——

Spring框架核心介紹

  DI(Dependency Injection),依賴注入,和我們常聽說的另一個概念 IOC(控制反轉)其實歸根結底實現的功能是相同的,只是同樣的功能站在不同的角度來闡述罷了。這里博主就不去過多的辨析,度娘上有一大堆解釋。我們需要知道的是,什么叫依賴注入,為什么要依賴注入。搞清這兩點,我想對Spring的學習在思想上就算是上道了。

  在沒用使用Spring的時候——也就是沒有依賴注入的時候,java應用程序的類與類之間要實現相互的功能協作是比較費勁的,某個類(A)要實現它的功能如果需要依賴另一個類(B)的協作的話,就需要在A類中主動創建出B類的對象,才能使用B類的方法完成功能(這里看官就不要去糾結靜態方法之類的情況了)。這等于是A類需要負責B類對象整個生命周期的管理。在極度簡單的情況下,在一個類中new出另一個類的對象似乎并沒有什么問題,但是復雜的應用程序類與類的協作關系往往是多邊的,我們并不知道一個類功能的實現會依賴多少個另類對象來協作,所以在類中自行創建對象并且管理對象的整個生命周期,會造成代碼的高度耦合以及不可想象的復雜度。那么,試想,如果我們能將對象的生命周期交給第三方組件來管理,當某個類需要另外的對象時第三方組件就直接創建出來交給它,這樣,類就可以只專注于自己功能的實現,而不用去管理其他類對象的生命周期,這樣類的功能就單純了很多。是的,你一定已經明白了,Spring(容器)就是這個第三方組件。我們只需要告訴Spring(容器)有哪些對象需要管理就行了,不用去關心Spring框架是如何創建對象的。這樣,當某個類A需要類B對象時,如果類B已經聲明交給了Sping容器管理,那么在程序運行到類A需要類B時,Spring容器就通過依賴注入的方式,將類B對象注入到類A中協助完成業務功能。通過第三方組件的依賴注入,對象無需再自行的創建和管理類與類之間的依賴關系了。對象的創建依賴注入的方式也有多種,譬如接口注入,構造方法注入,setter方法注入等等。說到這里,你對依賴注入應該有比較直白的認知了。至于為什么要依賴注入,上文已經說得很明白了,就是為了減少代碼中組件之間的耦合度,我們還是先通過簡單示例來直觀感受下依賴注入比自己管理對象的好處吧——

public class Man implements Human {  private QQCar car;  public Man() {    this.car = new QQCar();  }  @Override  public void xiabibi() {  }  public void driveCar(){    car.drive();  }}

    接口Car暫有兩個實現:奔馳車和QQ車,在以上Man類和QQCar類高度耦合的代碼中,老司機通過構造器只創建了QQ車對象,所以只能開QQ車,那么老司機想開奔馳怎么辦呢,你讓他重新創建奔馳車的對象嗎?這樣高度耦合的代碼似乎是毫無辦法的,那么,我們通過注入對象的方式對上述代碼做一番改進:

public class Man implements Human {  private Car car;  public Man(Car car) {    this.car = car;  }  @Override  public void xiabibi() {  }  public void driveCar() {    car.drive();  }}

 以上代碼根據多態特性,通過構造器接口注入的方式屏蔽掉了具體的對象實現,這樣,老司機就能想開什么車就開什么車了。這就是依賴注入帶來的好處。

  AOP(Aspect Oriented Programming),面向切面編程。日常開發中,我們在完成某個業務功能的時候,寫了一堆代碼,到最后代碼優化的時候發現,真正完成業務的代碼可能就那么兩句,而其余都是與該部分業務相關度不大,僅僅是為了實現某種技術的代碼,是完全可以抽離出去的,于是很自然的,我們會將其抽取成一個工具類,這樣凡是用到的地方只需調用一下工具方法就ok了。我們再站高一點看,各個業務模塊的功能組件中除了完成相關的業務功能外,都有涉及日志、事務、安全控制等額外的操作等。這些并不是模塊的核心功能,卻又不可或缺。如果將這些額外功能添加進代碼,業務系統每個組件都來一套又顯得太過重復,而且讓業務代碼顯得混亂,不夠純粹。這個時候,你問上帝,可不可以讓你的業務代碼只專注于業務的實現,不去管什么日志、事務等不相干的東西?喔,上帝說沒問題,于是就有了AOP。如果說依賴注入的目的是讓相互協作的組件保持一種較為松散的耦合狀態的話,AOP則是將遍布應用各處的功能分離出來形成可重用的組件。通俗點說,日志、事務等都是可以重用的組件,我們完全可以將分散于業務代碼各處的日志、事務、安全等功能代碼抽離出成為一個單獨的工具組件,在Spring的配置中將其進行聲明為一個功能切面,再告訴Spring你想在哪些地方、什么時機使用(切入)這些可重用組件就行了。這就是我對面向切面的簡單釋義。該篇只是引子,所以博主就只是簡單闡述一下概念,不做具體的代碼、配置實現,在會在后續的博文中將陸續奉上,歡迎拍磚。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美夫妻性生活视频| 亚洲精品久久久久| 亚洲精品电影网站| 91极品女神在线| 国产精品无av码在线观看| 热门国产精品亚洲第一区在线| 91免费看视频.| 国产日韩在线免费| 亚洲高清免费观看高清完整版| 中文字幕视频一区二区在线有码| 国产精品日韩在线观看| 久久久精品久久| 国产女精品视频网站免费| 91高清免费视频| 国产日韩欧美另类| 久久久久久香蕉网| 国产欧美在线视频| 在线午夜精品自拍| 亚洲美女动态图120秒| 欧美日韩国产一区二区三区| 亚洲色图在线观看| 久久久久这里只有精品| 国产日韩换脸av一区在线观看| 国产精品免费观看在线| 97在线视频免费播放| 亚洲欧洲免费视频| 欧美性jizz18性欧美| 日韩天堂在线视频| 国产精品美女无圣光视频| 欧美国产日产韩国视频| 亚洲欧美成人网| 国产精品激情av电影在线观看| 国产精品激情av电影在线观看| 欧美视频不卡中文| 亚洲福利精品在线| 亚洲福利视频在线| 日本一区二区在线免费播放| 精品国产乱码久久久久久婷婷| 国产+成+人+亚洲欧洲| 亚洲第一网站男人都懂| www日韩欧美| 国产亚洲视频在线观看| 久久久久久成人精品| 国产精品成人免费电影| 7m精品福利视频导航| 欧美日韩成人黄色| 97精品视频在线| 成人午夜激情网| 久久视频在线免费观看| 亚洲精品www久久久久久广东| 国产精品麻豆va在线播放| 久久精品99久久久久久久久| 国产精品吹潮在线观看| 中文字幕日韩av电影| 亚洲毛片在线看| 国产一区二区在线免费视频| 国产黑人绿帽在线第一区| 欧美影院久久久| 中国china体内裑精亚洲片| 精品视频—区二区三区免费| 91午夜理伦私人影院| 亚洲视频777| 色哟哟网站入口亚洲精品| 亚洲欧美中文字幕| 久久久久久久久电影| 欧美成人免费大片| 日本精品免费观看| 亚洲国产精品高清久久久| 日韩av电影在线免费播放| zzjj国产精品一区二区| 日韩在线视频观看正片免费网站| 久久91亚洲精品中文字幕| 欧美成人sm免费视频| 日韩亚洲精品电影| 亚洲欧美成人一区二区在线电影| 久久福利视频导航| 久久久之久亚州精品露出| 91啪国产在线| 伊人激情综合网| 国产剧情久久久久久| 在线播放日韩欧美| 亚洲国产日韩精品在线| 久久99视频精品| 日韩a**站在线观看| 国产精品91久久久久久| 性欧美xxxx视频在线观看| 亚洲伊人久久综合| 97视频在线观看网址| 久久成人亚洲精品| 亚洲最大的成人网| 丝袜亚洲另类欧美重口| 亚洲一区二区久久| 亚洲国产精久久久久久久| 国产亚洲视频在线| 91免费精品国偷自产在线| 国产一区二中文字幕在线看| 韩国福利视频一区| 亚洲精品电影网| 久久久久北条麻妃免费看| 国内揄拍国内精品少妇国语| 91精品国产自产在线观看永久| 精品激情国产视频| 国产亚洲精品一区二555| 国产乱肥老妇国产一区二| 久久久天堂国产精品女人| 亚洲午夜精品久久久久久性色| 久久天天躁狠狠躁夜夜躁2014| 亚洲欧美日韩在线高清直播| 日韩欧美高清在线视频| 亚洲欧洲av一区二区| 久久久999国产| 91伊人影院在线播放| 日韩av电影院| 日本一本a高清免费不卡| 国产精品视频自拍| 亚洲mm色国产网站| 欧美猛交免费看| 亚洲精品www久久久久久广东| 91精品视频免费观看| 国产精品av电影| 久久国产天堂福利天堂| 亚洲色图色老头| 国产香蕉97碰碰久久人人| 欧美黑人性视频| 久久久精品一区二区| 一区二区在线视频播放| 91欧美精品成人综合在线观看| 久久久人成影片一区二区三区| 欧美国产日韩一区| 中文字幕日韩av| 久久久99久久精品女同性| 正在播放亚洲1区| 亚洲国产另类久久精品| 欧美精品福利视频| 92国产精品久久久久首页| 亚洲最大的成人网| 91国产美女在线观看| 欧美大尺度激情区在线播放| 欧美激情一级精品国产| 亚洲社区在线观看| 国产精品一区二区三区成人| 欧美成人精品三级在线观看| 久久亚洲精品国产亚洲老地址| 日韩欧美主播在线| 38少妇精品导航| 亚洲性生活视频| 国产精品国产亚洲伊人久久| 欧美电影免费播放| 亚洲午夜精品久久久久久久久久久久| 日韩视频欧美视频| 国产精品久久久久久久久久99| 久久九九精品99国产精品| 最近2019中文字幕大全第二页| 人人爽久久涩噜噜噜网站| 2019中文字幕免费视频| 日韩精品在线观| 久久精品电影一区二区| 一区二区av在线| 亚洲欧美成人网| 亚洲美女自拍视频| 欧美日韩国产激情| 国产欧美亚洲视频| 日韩av高清不卡| 亚洲激情小视频|