{eval=Array;=+count(Array);}
spring之所以崛起是因?yàn)樗兄钪匾奶匦?IOC!
IOC:即Inversion of control,意為控制反轉(zhuǎn),原本兩個互相依賴的類,需要通過new對象的方式,然后提供方法調(diào)用,這樣類中會出現(xiàn)大量的new(比如類中有十個方法,每個方法都要new一次),這個對象創(chuàng)建的方式是開發(fā)者自己主觀控制的,而引入了IOC之后,通過依賴注入(DI,IOC的主要實(shí)現(xiàn)方式)需要依賴的類,然后會在運(yùn)行使用的時候,由容器自行創(chuàng)建一個實(shí)例對象提供使用,實(shí)現(xiàn)了容器對對象的控制,這樣就實(shí)現(xiàn)了對象控制的反轉(zhuǎn)!
spring又是如何實(shí)現(xiàn)IOC的呢?我們知道spring項(xiàng)目會使用xml配置(bean定義)或者注解(@service.@component等)進(jìn)行對象的定義,其中包括了需要管理的對象的類路徑,在spring容器啟動的時候,會通過BeanFactory(當(dāng)然通常是這個接口的實(shí)現(xiàn)ApplicationContext)將類路徑以hashMap的方式進(jìn)行存儲,然后再需要使用的時候取出類路徑,再通過反射技術(shù)(class.forName)得到相應(yīng)的實(shí)例對象,并把對象引用傳遞(注入)給依賴的類中,進(jìn)行使用!
當(dāng)然,除了IOC和DI,spring鼎鼎大名的還有AOP(Aspect Oreinted Programming)功能,意為面向切面編程,通過對一個方法的切入,可以在方法前置,后置等進(jìn)行處理!對諸如日志打印,前置安全檢驗(yàn),攔截等都可以通過AOP進(jìn)行實(shí)現(xiàn),而原本的方法不需要感知這些操作,專注于業(yè)務(wù)功能開發(fā),這樣徹底解耦了技術(shù)和業(yè)務(wù)代碼的實(shí)現(xiàn)!
不僅如此,spring還提供了對于其他功能框架良好的支持和擴(kuò)展,比如緩存,事務(wù),數(shù)據(jù)庫連接,安全認(rèn)證,測試等等都能有插件化的支持,方便基于spring搭建一套完整的,功能齊備的應(yīng)用!
現(xiàn)在的spring家族,因?yàn)榧尤肓藄pringboot,springcloud等成熟,集成化的框架,對開發(fā)者來說更是福音!不僅對各種功能有著開箱即用的便利,還能快速搭建一套微服務(wù),對于服務(wù)注冊與發(fā)現(xiàn),網(wǎng)關(guān),雪崩熔斷等都有集成使用!隨著微服務(wù)的進(jìn)程逐漸加快,可以說spring還必將大放光彩!
spring不僅解耦了對象關(guān)聯(lián),還解耦了業(yè)務(wù)和技術(shù),同事提供了成熟的集成方案,是JAVA開發(fā)者沒辦法拒絕的框架,spring說到這,更多的技術(shù)分享,敬請關(guān)注。。。
提起Spring,就不得不提重要的兩大特性IOC(控制反轉(zhuǎn))和AOP(面向切面編程);
IOC 控制反轉(zhuǎn),就是在使用Spring之前,我們想要使用某個類的方法,只能通過new這個類的對象來調(diào)用方法,當(dāng)然類方法除外;使用一次就得不停的new對象。使用了Spring之后,對象的創(chuàng)建就不在依賴程序員手動創(chuàng)建了,而是通過IOC容器,來創(chuàng)建與管理,創(chuàng)建出來的對象有一個統(tǒng)一的名稱叫做Bean,在需要使用的時候通過java的反射機(jī)制,將這些bean注入需要使用對象中。而我們常說的DI(依賴注入)是實(shí)現(xiàn)控制的反轉(zhuǎn)的一種方式。
AOP 面向切面編程,說的直白點(diǎn)就是通過一個方法作為切入點(diǎn),在方法的前后做增強(qiáng)處理,常用的場景為:操作數(shù)據(jù)庫的事務(wù)和日志打印,API入?yún)⑻幚怼?/p>
2
回答10
回答0
回答8
回答0
回答0
回答4
回答0
回答0
回答10
回答