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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YII2集成GOAOP,实现面向方面编程!

發布時間:2024/1/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YII2集成GOAOP,实现面向方面编程! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言:
  軟件開發的目標是要對世界的部分元素或者信息流建立模型,實現軟件系統的工程需要將系統分解成可以創建和管理的模塊。于是出現了以系統模塊化特性的面向對象程序設計技術。模塊化的面向對象編程極度地提高了軟件系統的可讀性、復用性和可擴展性。向對象方法的焦點在于選擇對象作為模塊的主要單元,并將對象與系統的所有行為聯系起來。對象成為問題領域和計算過程的主要元素。但面向對象技術并沒有從本質上解決軟件系統的可復用性。創建軟件系統時,現實問題中存在著許多橫切關注點,比如安全性檢查、日志記錄、性能監控,異常處理等,它們的實現代碼和其他業務邏輯代碼混雜在一起,并散落在軟件不同地方(直接把處理這些操作的代碼加入到每個模塊中),這無疑破壞了OOP的"單一職責"原則,模塊的可重用性會大大降低,這使得軟件系統的可維護性和復用性受到極大限制。這時候傳統的OOP設計往往采取的策略是加入相應的代理(Proxy)層來完成系統的功能要求,但這樣的處理明顯使系統整體增加了一個層次的劃分,復雜性也隨之增加,從而給人過于厚重的感覺。由此產生了面向方面編程(AOP)技術。這種編程模式抽取出散落在軟件系統各處的橫切關注點代碼,并模塊化,歸整到一起,這樣進一步提高軟件的可維護性、復用性和可擴展性。

AOP簡介:
AOP: Aspect Oriented Programming 面向切面編程。
  面向切面編程(也叫面向方面):Aspect Oriented Programming(AOP),是目前軟件開發中的一個熱點。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
  AOP是OOP的延續,是(Aspect Oriented Programming)的縮寫,意思是面向切面(方面)編程。
  主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理等等。
  主要的意圖是:將日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的代碼。
  可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目標的一種實現。
假設把應用程序想成一個立體結構的話,OOP的利刃是縱向切入系統,把系統劃分為很多個模塊(如:用戶模塊,文章模塊等等),而AOP的利刃是橫向切入系統,提取各個模塊可能都要重復操作的部分(如:權限檢查,日志記錄等等)。由此可見,AOP是OOP的一個有效補充。
注意:AOP不是一種技術,實際上是編程思想。凡是符合AOP思想的技術,都可以看成是AOP的實現。

AOP 的基本概念:
在面向對象編程中,類,對象,封裝,繼承,多態等概念是描述面向對象思想主要術語。與此類似,在面向方面編程中,同樣存在著一些基本概念:
?????? 聯結點(JointPoint) :一個聯結程序執行過程中的一個特定點。典型的聯結點有:調用一個方法;方法執行這個過程本身;類初始化;對象初始化等。聯結點是 AOP 的核心概念之一,它用來定義在程序的哪里通過 AOP 加入新的邏輯。
??????? 切入點(Pointcut) :一個切入點是用來定義某一個通知該何時執行的一組聯結點。通過定義切入點,我們可以精確地控制程序中什么組件接到什么通知。上面我們提到,一個典型的聯結點是方法調用,而一個典型的切入點就是對某一個類的所在方法調用的集合。通常我們會通過組建復雜的切入點來控制通知什么時候被執行。
??????? 通知(Advice) :在某一個特定的聯結點處運行的代碼稱為“通知”。通知有很多種,比如
在聯結點之前執行的前置通知(before advice)和在聯結點之后執行的后置通知(after advice) 。
?????? 方面(Aspect) :通知和切入點的組合叫做方面,所以,方面定義了一段程序中應該包括的邏輯,以及何時應該執行該邏輯。
?????? 織入(Weaving) :織入是將方面真正加入程序代碼的過程。對于靜態 AOP 方案而言,織入是在編譯時完成的,通常是在編譯過程中增加一個步驟。類似的,動態 AOP 方案則是在程序運行是動態織入的。
?????? 目標(Target) :如果一個對象的執行過程受到某一個 AOP 的修改,那么它就叫一個目標對象。目標對象通常也稱為被通知對象。
?????? 引入(Introduction) :?? 通過引入,可以在一個對象中加入新的方法或屬性,以改變它的結構,這樣即使該對象的類沒有實現某一個接口,也可以修改它,使之成為該接口的一個實現。? ?

?????? 靜態和動態:靜態 AOP 和動態 AOP 兩者之間的區別主要在于什么時間織入,以及如何織入。最早的 AOP 實現大多都是靜態的。在靜態 AOP 中,織入是編譯過程的一個步驟。用Java 的術語說,靜態 AOP 通過直接對字節碼進行操作,包括修改代碼和擴展類,來完成織入過程。顯然,這種辦法生成的程序性能很好,因為最后的結果就是普通的 Java 字節碼,在運行時不再需要特別的技巧來確定什么時候應該執行通知。這種方法的缺點是,如果想對方面做什么修改,即使只是加入一個新的聯結點,都必須重新編譯整個程序。AspectJ 是靜態 AOP 的一個典型例子。與靜態 AOP 不同,動態 AOP 中織入是在運行時動態完成的??椚刖唧w是如何完成的,各個實現有所不同。Spring AOP 采取的方法是建立代理,然后代理在適當的時候執行通知。動態 AOP 的一個弱點就在于,其性能一般不如靜態 AOP。而動態AOP 的主要優點在于可以隨時修改程序的所有方面,而不需重新編譯目標。

AOP實踐:
YII2框架本身擁有一個功能,叫做行為.它可以動態的為當前的類附加額外的功能,但這種功能在代碼層級結構是靜態的,有侵入性的。

下面以YII2框架集成go!aop庫為例,介紹在YII2中如何實現AOP編程.(go!aop簡介,可以參考go!aop的官網.)

由于YII框架擁有自己的類加載器,所在集成go!aop的時候,不能正常的工作,所以要將其禁用掉,使用composer提供的類加載器。
如下代碼所示(這里使用YII2高級應用模板):

1、找到? spl_autoload_register(['Yii', 'autoload'], true, true);? (PROJECT_PATH/vendor/yiisoft/yii2/Yii.php) 將其禁用掉.


2、執行? composer require goaop/framework


3、修改composer.json文件,加入如下代碼段:

"autoload": {"psr-4": {"backend\\": "backend//","frontend\\": "frontend//","common\\": "common//"}}


4、 在frontend 目錄下創建一個components是目錄,并新建一個類AopAspectKernel,例如:

namespace frontend\components; use frontend\aspects\MonitorAspect; use Go\Core\AspectContainer; use Go\Core\AspectKernel; class AopAspectKernel extends AspectKernel {protected function configureAop(AspectContainer $container){$container->registerAspect(new MonitorAspect());} }

?
5、在forntend目錄下在新建一個類InitAopComponent,并使其實現BootstrapInterface,使其可以在YII2框架引導時被自動引導

namespace frontend\components; use yii\base\BootstrapInterface; class InitAopComponent implements BootstrapInterface {public function bootstrap($app){print_r(\Yii::$app->params['aop']);$applicationAspectKernel = AopAspectKernel::getInstance();$applicationAspectKernel->init(\Yii::$app->params['aop']);} }

?
6、在frontend/config/params.php中新增如下代碼:

'aop' => ['debug' => true,'appDir' => dirname(__DIR__),'cacheDir' => dirname(__DIR__) . '/runtime/aop','includePaths' => [dirname(__DIR__)]]

?
7、在frontend下面新建aspects目錄,并新建類MonitorAspect,代碼如下:

namespace frontend\aspects;use Go\Aop\Aspect; use Go\Aop\Intercept\MethodInvocation; use Go\Lang\Annotation\Before; class MonitorAspect implements Aspect {/*** Method that will be called before real method** @param MethodInvocation $invocation Invocation* @Before("execution(public frontend\components\AopTestComponent->*(*))")*/public function beforeMethodExecution(MethodInvocation $invocation){$obj = $invocation->getThis();echo 'Calling Before Interceptor for method: ',is_object($obj) ? get_class($obj) : $obj,$invocation->getMethod()->isStatic() ? '::' : '->',$invocation->getMethod()->getName(),'()',' with arguments: ',json_encode($invocation->getArguments()),"<br>\n";} }

?
9、修改frontend/config/main.php文件,并在components數組下新增一個key,代碼如下:

'components'=>['aop' => ['class' => 'frontend\components\InitAopComponent']]

?
10、修改frontend/config/main.php文件,并在bootstrap數組下新增aop值,代碼如下:

'bootstrap'=>['log','aop']


至此,YII2整合go!aop完成...

?

轉載于:https://www.cnblogs.com/cmacro/p/9327602.html

總結

以上是生活随笔為你收集整理的YII2集成GOAOP,实现面向方面编程!的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 性xxxxx大片免费视频 | 黄网站免费观看 | 尹人综合网| 狠狠五月天 | 成人淫片 | 91在线视频免费播放 | 亚洲日本国产 | 黄色一级片在线 | 国产性生活视频 | 国产综合欧美 | 爱爱视频网址 | 91黄色影视 | 国产精品mv | 男人天堂你懂的 | 啪啪网站免费看 | 在线观看日批视频 | 免费av地址 | 久久影院视频 | 99re这里只有精品66 | 久久精品片 | 天天做夜夜操 | 美女搞黄在线观看 | av福利网址 | 半推半就一ⅹ99av | 偷拍一区二区 | av黄色在线看 | 中文字幕乱码人妻无码久久 | 日韩一级黄 | a视频免费在线观看 | 五月天六月色 | 51免费看成人啪啪片 | 在线观看av日韩 | 色大师在线观看 | 久久久久久久久99精品 | 天天干天天添 | 欧美性色网 | 欧美一区二三区 | 中文字幕理伦片免费看 | 果冻传媒18禁免费视频 | 亚洲成人精品在线 | 国产一区二区三区中文字幕 | 日日射日日干 | 奇米色影视 | 国产激情网站 | 久久精品视频在线免费观看 | 无遮挡国产 | 免费福利在线 | 欧美成人免费在线观看 | 最新黄色av网站 | 蜜桃av噜噜 | 日韩色av | 性欧美18| 精品欧美一区二区久久久久 | 亚洲一久久 | 日本一本不卡 | japan粗暴video蹂躏| 91成年视频 | 九月婷婷 | 99久久婷婷国产综合精品 | 最新av中文字幕 | 在线精品观看 | 国内自拍青青草 | 日韩精品一区二区三区中文在线 | 亚洲日本色 | 88xx成人永久免费观看 | 午夜不卡在线观看 | 91视频成人免费 | 又大又长粗又爽又黄少妇视频 | 日本中文字幕在线观看视频 | 国产精九九网站漫画 | 免费看黄色片子 | 成人免费片库 | av免费网页| 激情91| 国产一区二区自拍视频 | 国产精品91一区二区 | 国产偷人爽久久久久久老妇app | 国产亚洲精品自拍 | 可以免费观看av的网站 | 18欧美性xxxx极品hd | 先锋影音在线 | 欧美另类xxx| 天天干天天做天天操 | 另类老妇性bbwbbw图片 | av在线第一页 | 日韩毛毛片 | 激情网页 | 亚洲另类色图 | 欧洲免费毛片 | 国产成人无码av | 免费国产a级片 | www.四色| a天堂在线观看视频 | 破处视频在线观看 | 五月天丁香婷 | 精品人妻av一区二区三区 | 少妇高潮久久久久久潘金莲 | 窝窝午夜理论片影院 | 99精品国产成人一区二区 |