面向切面編程介紹:php
介紹:java
使用「橫切」技術,AOP把軟件系統分爲兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的一個特色是,他們常常發生在覈心關注點的多處,而各處都基本類似。好比權限認證、日誌、事務處理。Aop 的做用在於分離系統中的各類關注點,將核心關注點和橫切關注點分離開來。正如Avanade公司的高級方案構架師Adam Magee所說,AOP的核心思想就是「將應用程序中的商業邏輯同對其提供支持的通用服務進行分離。」
實現AOP的技術,主要分爲兩大類:一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行爲的執行;二是採用靜態織入的方式,引入特定的語法建立「方面」,從而使得編譯器能夠在編譯期間織入有關「方面」的代碼。*然而異曲同工,實現AOP的技術特性倒是相同的,分別爲:編程
上述的技術特性組成了基本的AOP技術,大多數AOP工具均實現了這些技術。它們也能夠是研究AOP技術的基本術語。安全
要點:
把模塊做爲一批關注點來實現
架構
關注點識別:三棱鏡法則
工具
將橫切關注點織入到核心關注點中
this
爲了創建鬆散耦合的、可擴展的企業系統,AOP應用到的橫切技術,一般分爲兩種類型:動態橫切和靜態橫切。
spa
動態橫切是經過切入點和鏈接點在一個方面中建立行爲的過程,鏈接點能夠在執行時橫向地應用於現有對象。動態橫切一般用於幫助向對象層次中的各類方法添加日誌記錄或身份認證。在不少應用場景中,動態橫切技術基本上表明瞭AOP。設計
AOP動態橫切的技術實現
3d
靜態橫切和動態橫切的區別在於它不修改一個給定對象的執行行爲。相反,它容許經過引入附加的方法字段和屬性來修改對象的結構。此外,靜態橫切能夠把擴展和實現附加到對象的基本結構中。在AOP實現中,一般將靜態橫切稱爲introduce或者mixin。
靜態橫切在AOP技術中,受到的關注相對較少。事實上,這一技術蘊含的潛力是巨大的。使用靜態橫切,架構師和設計者能用一種真正面向對象的方法有效地創建複雜系統的模型。靜態橫切容許您不用建立很深的層次結構,以一種本質上更優雅、更逼真於現實結構的方式,插入跨越整個系統的公共行爲。尤爲是當開發應用系統時,若是須要在不修改原有代碼的前提下,引入第三方產品和API庫,則靜態橫切技術將發揮巨大的做用。
實現:橫切
java:實現:www.jianshu.com/p/a833d114099a
php 簡單實例:
<?php //Object Data class User { private $name; //Join Point 鏈接點 function set_name( $value ) { $this->name = $value; } //Join Point 鏈接點 function get_name() { echo "COde......\n"; return $this->name; } } //Aspect 方面 class Logged { private $obj; //Point Cut 切入點 function __call( $method, $args ) { //Advice 通知 echo( "$method( ".join( ",", $args )." )\n" ); $cron = call_user_func_array(array(&$this->obj,$method),$args); echo( "$method( ".join( ",", $args )." )END--\n" ); return $cron; } function __construct( $obj ) { $this->obj = $obj; } } $c1 = new Logged( new User() ); $c1->set_name( "XuGuo" ); $name = $c1->get_name(); echo( "name = $name\n" );