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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring AOP功能和目标

發(fā)布時(shí)間:2024/1/17 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring AOP功能和目标 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.AOP的作用

在OOP中,正是這種分散在各處且與對(duì)象核心功能無(wú)關(guān)的代碼(橫切代碼)的存在,使得模塊復(fù)用難度增加。AOP則將封裝好的對(duì)象剖開(kāi),找出其中對(duì)多個(gè)對(duì)象產(chǎn)生影響的公共行為,并將其封裝為一個(gè)可重用的模塊,這個(gè)模塊被命名為“切面”(Aspect),切面將那些與業(yè)務(wù)無(wú)關(guān),卻被業(yè)務(wù)模塊共同調(diào)用的邏輯提取并封裝起來(lái),減少了系統(tǒng)中的重復(fù)代碼,降低了模塊間的耦合度,同時(shí)提高了系統(tǒng)的可維護(hù)性。

2.DI 和 IOC 概念

依賴注入或控制反轉(zhuǎn)的定義中,調(diào)用者不負(fù)責(zé)被調(diào)用者的實(shí)例創(chuàng)建工作,該工作由Spring框架中的容器來(lái)負(fù)責(zé),它通過(guò)開(kāi)發(fā)者的配置來(lái)判斷實(shí)例類型,創(chuàng)建后再注入調(diào)用者。由于Spring容器負(fù)責(zé)被調(diào)用者實(shí)例,實(shí)例創(chuàng)建后又負(fù)責(zé)將該實(shí)例注入調(diào)用者,因此稱為依賴注入。而被調(diào)用者的實(shí)例創(chuàng)建工作不再由調(diào)用者來(lái)創(chuàng)建而是由Spring來(lái)創(chuàng)建,控制權(quán)由應(yīng)用代碼轉(zhuǎn)移到了外部容器,控制權(quán)發(fā)生了反轉(zhuǎn),因此稱為控制反轉(zhuǎn)。

3.BeanFactory與ApplicationContext

ApplicationContext是BeanFactory的子接口,也被稱為應(yīng)用上下文。BeanFactory提供了Spring的配置框架和基本功能,ApplicationContext則添加了更多企業(yè)級(jí)功能(如國(guó)際化的支持),他另一重要優(yōu)勢(shì)在于當(dāng)ApplicationContext容器初始化完成后,容器中所有的 singleton Bean 也都被實(shí)例化了,也就是說(shuō)當(dāng)你需要使用singleton Bean 是,在應(yīng)用中無(wú)需等待就可以用,而其他BeanFactory接口的實(shí)現(xiàn)類,則會(huì)延遲到調(diào)用 getBean()方法時(shí)構(gòu)造,ApplicationContext的初始化時(shí)間會(huì)稍長(zhǎng)些,調(diào)用getBean()是由于Bean已經(jīng)構(gòu)造完畢,速度會(huì)更快。因此大部分系統(tǒng)都使用ApplicationContext,而只在資源較少的情況下,才考慮使用BeanFactory。

4.AOP的實(shí)現(xiàn)策略

(1)Java SE動(dòng)態(tài)代理:
使用動(dòng)態(tài)代理可以為一個(gè)或多個(gè)接口在運(yùn)行期動(dòng)態(tài)生成實(shí)現(xiàn)對(duì)象,生成的對(duì)象中實(shí)現(xiàn)接口的方法時(shí)可以添加增強(qiáng)代碼,從而實(shí)現(xiàn)AOP。缺點(diǎn)是只能針對(duì)接口進(jìn)行代理,另外由于動(dòng)態(tài)代理是通過(guò)反射實(shí)現(xiàn)的,有時(shí)可能要考慮反射調(diào)用的開(kāi)銷。
(2)字節(jié)碼生成(CGLib 動(dòng)態(tài)代理)
動(dòng)態(tài)字節(jié)碼生成技術(shù)是指在運(yùn)行時(shí)動(dòng)態(tài)生成指定類的一個(gè)子類對(duì)象,并覆蓋其中特定方法,覆蓋方法時(shí)可以添加增強(qiáng)代碼,從而實(shí)現(xiàn)AOP。其常用工具是cglib。
(3)定制的類加載器
當(dāng)需要對(duì)類的所有對(duì)象都添加增強(qiáng),動(dòng)態(tài)代理和字節(jié)碼生成本質(zhì)上都需要?jiǎng)討B(tài)構(gòu)造代理對(duì)象,即最終被增強(qiáng)的對(duì)象是由AOP框架生成,不是開(kāi)發(fā)者new出來(lái)的。解決的辦法就是實(shí)現(xiàn)自定義的類加載器,在一個(gè)類被加載時(shí)對(duì)其進(jìn)行增強(qiáng)。JBoss就是采用這種方式實(shí)現(xiàn)AOP功能。
(4)代碼生成
利用工具在已有代碼基礎(chǔ)上生成新的代碼,其中可以添加任何橫切代碼來(lái)實(shí)現(xiàn)AOP。
(5)語(yǔ)言擴(kuò)展
可以對(duì)構(gòu)造方法和屬性的賦值操作進(jìn)行增強(qiáng),AspectJ是采用這種方式實(shí)現(xiàn)AOP的一個(gè)常見(jiàn)Java語(yǔ)言擴(kuò)展。

核心概念

1、橫切關(guān)注點(diǎn)

對(duì)哪些方法進(jìn)行攔截,攔截后怎么處理,這些關(guān)注點(diǎn)稱之為橫切關(guān)注點(diǎn)

2、切面(aspect)

類是對(duì)物體特征的抽象,切面就是對(duì)橫切關(guān)注點(diǎn)的抽象

3、連接點(diǎn)(joinpoint)

被攔截到的點(diǎn),因?yàn)镾pring只支持方法類型的連接點(diǎn),所以在Spring中連接點(diǎn)指的就是被攔截到的方法,實(shí)際上連接點(diǎn)還可以是字段或者構(gòu)造器

4、切入點(diǎn)(pointcut)

對(duì)連接點(diǎn)進(jìn)行攔截的定義

5、通知(advice)

所謂通知指的就是指攔截到連接點(diǎn)之后要執(zhí)行的代碼,通知分為前置、后置、異常、最終、環(huán)繞通知五類

6、目標(biāo)對(duì)象

代理的目標(biāo)對(duì)象

7、織入(weave)

將切面應(yīng)用到目標(biāo)對(duì)象并導(dǎo)致代理對(duì)象創(chuàng)建的過(guò)程

8、引入(introduction)

在不修改代碼的前提下,引入可以在運(yùn)行期為類動(dòng)態(tài)地添加一些方法或字段

Spring對(duì)AOP的支持

Spring中AOP代理由Spring的IOC容器負(fù)責(zé)生成、管理,其依賴關(guān)系也由IOC容器負(fù)責(zé)管理。因此,AOP代理可以直接使用容器中的其它bean實(shí)例作為目標(biāo),這種關(guān)系可由IOC容器的依賴注入提供。Spring創(chuàng)建代理的規(guī)則為:

1、默認(rèn)使用Java動(dòng)態(tài)代理來(lái)創(chuàng)建AOP代理,這樣就可以為任何接口實(shí)例創(chuàng)建代理了

2、當(dāng)需要代理的類不是代理接口的時(shí)候,Spring會(huì)切換為使用CGLIB代理,也可強(qiáng)制使用CGLIB

AOP編程其實(shí)是很簡(jiǎn)單的事情,縱觀AOP編程,程序員只需要參與三個(gè)部分:

1、定義普通業(yè)務(wù)組件

2、定義切入點(diǎn),一個(gè)切入點(diǎn)可能橫切多個(gè)業(yè)務(wù)組件

3、定義增強(qiáng)處理,增強(qiáng)處理就是在AOP框架為普通業(yè)務(wù)組件織入的處理動(dòng)作

所以進(jìn)行AOP編程的關(guān)鍵就是定義切入點(diǎn)和定義增強(qiáng)處理,一旦定義了合適的切入點(diǎn)和增強(qiáng)處理,AOP框架將自動(dòng)生成AOP代理,即:代理對(duì)象的方法=增強(qiáng)處理+被代理對(duì)象的方法。

轉(zhuǎn)載于:https://www.cnblogs.com/hkhk/p/10708260.html

總結(jié)

以上是生活随笔為你收集整理的Spring AOP功能和目标的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。