AOP 面向方面程式設計的介紹----基本概念(2) (轉)
/develop/read_article.?id=18737" target=_blank>面向方面的介紹----基本概念(2) :namespace prefix = o ns = "urn:schemas--com::office" />
AOP 面向方面程式設計的介紹----基本概念(3)
面向方面的程式設計思路很簡單。從程式導向、的程式設計到面向的程式設計到面向介面的程式設計到面向、模組程式設計的發展歷史我們可以知道,程式設計方法學的演進是一步一步的擴大了程式設計考慮的“邊界”。到目前為止我們的程式設計世界裡的宇宙邊界是“類、介面,或者元件”,在這個邊界裡,我們認為,一個類實現一個介面,那就不能動態的實現另一個介面,已有類的行為在編譯以前就基本固定,要麼是類內部定義的方法,要麼是要麼是繼承和實現介面繼承過來的方法。但是實際的程式設計工作中我們碰到了“跨邊界的情況”,需要多個類,介面,元件合作才能完成的工作,比如:多執行緒併發訪問,流集中控制,序列化和程式狀態保持,以及需要多個“類、介面、元件邊界”共同參於才能完成的工作。為了更好的處理多個邊界共同完成同一方面的工作,面向方面的程式設計出現了。這裡的方面,我們可以指:為完成同一任務而需要多個類、介面、元件一起協作工作的綜合。你可以認為方面其實就是一個更大的類,這個類主要由我們中的類、介面組成,當然這些類和介面是如此的親密,以至於他們行為(方法)可以相互轉換。其實這沒什麼大不了的,介面的出現不是實現了動態的改變類的行為的嗎?面向方面的程式設計只是做了一個延伸,把這個改變提升到了介面這個層次上。寫到這裡,我感到:耳朵清靜了,但是世界還沒有清靜,因為到實際的運用這種思路程式設計,還需要很長的時間,和更多工具開發商的支援。
在我以後的文章中我想統一下面的概念:
1、inter-type declarations 邊界內部型別宣告:Inter-type 宣告在AspectJ中有很多種形式,使用他來描述類之間的關係、類本身成員和結構資訊。
2、join point 連線點:連線點是在程式流程中定義的一個點。
4、crosscutting concerns :考慮邊界交叉
5、Pointcuts 連線點集:程式執行中持有對多個連線點狀態的集合。
5、advice 通知點行為:連線點集如同一個包括多個的“結構”,本身不具有行為,其行為靠通知點行為來實現。
以上的名詞主要用於:AspectJ的介紹中。
4.0 提供了AOP,這個框架是和Jboss應用緊密整合的,但是也可以獨立執行。
下面我們看看基於AOP程式設計的基本過程:
1、 定義“訊息攔截器”Interceptor
Jboss 提供了一個訊息攔截器的介面,如下:
public interface Interceptor
{
public String getName();
public InvocationResponse invoke
(
Invocation invocation
)
throws Throwable;
}
值的一提的是:類中所有欄位、建構函式、方法等的相關操作全部由“訊息攔截器”攔截invoke,然後“打包”成一個Invocation物件,操作完成後返回IvvocationResponse物件。
詳見下例:
import org.jboss.aop.*;
import .lang.reflect.*;
public class TracingInterceptor implements Interceptor
{
public String getName()
{
return TracingInterceptor;
}
public InvocationResponse invoke(
Invocation invocation)
throws Throwable
{
String message = null;
if (
invocation.getType() == InvocationType.METHOD
)
{
Method method =
MethodInvocation.getMethod(invocation);
message =
method: + method.getName();
}
else if (
invocation.getType() ==
InvocationType.CONSTRUCTOR
)
{
Constructor c = ConstructorInvocation.getConstructor(invocation);
message = constructor: + c.toString();
}
else
{
return invocation.invokeNext();
}
System.out.println(Entering + message);
InvocationResponse rsp = invocation.invokeNext();
System.out.println(Leaving + message);
return rsp;
}
}
2、 把“訊息攔截器”和一個具體的類相關聯
這裡的關聯用到上面提到的“膠水”pointcut,在xml中實現:
和配置檔名一樣,AOP配置檔案的命名是固定的:META-INF/jboss-aop.xml
相關文章
- AOP 面向方面程式設計的介紹----基本概念(3) (轉)程式設計
- 面向方面程式設計的介紹----基本概念(1) (轉)程式設計
- Spring 面向方面程式設計 AOPSpring程式設計
- 面向方面程式設計的Annotation簡介(轉)程式設計
- Spring Boot中面向方面程式設計 (AOP)教程Spring Boot程式設計
- PHP 的面向方面程式設計PHP程式設計
- 面向方面的程式設計程式設計
- AOP 面向切面程式設計程式設計
- AOP(面向切面程式設計)程式設計
- 面向切面程式設計AOP程式設計
- Java 面向切面程式設計AOPJava程式設計
- AOP--面向切面程式設計程式設計
- aop面向切面程式設計的實現程式設計
- Java中的面向切面程式設計(AOP)Java程式設計
- 設計模式之面向切面程式設計AOP設計模式程式設計
- Android AOP面向切面設計程式設計Android程式設計
- 前端js面向切面程式設計(AOP)前端JS程式設計
- Android面向切面程式設計(AOP)Android程式設計
- 前端解讀面向切面程式設計(AOP)前端程式設計
- Spring之AOP面向切面程式設計Spring程式設計
- 01.AOP(AspectOrientatedProgramming面向切面程式設計)程式設計
- Swift 面向協議程式設計 基礎篇 (一) 介紹Swift協議程式設計
- Spring AOP——Spring 中面向切面程式設計Spring程式設計
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- mod_perl 程式設計介紹 (轉)程式設計
- AOP程式設計之AspectJ介紹及在Android中的應用程式設計Android
- 手寫Spring---AOP面向切面程式設計(4)Spring程式設計
- 手寫Spring---AOP面向切面程式設計(3)Spring程式設計
- Spring 面向切面程式設計AOP 詳細講解Spring程式設計
- Linux下面程式設計工具介紹(轉)Linux程式設計
- Avalon:面向元件的程式設計(COP) (轉)元件程式設計
- Day67 Spring AOP(面向切面程式設計) 和代理設計模式Spring程式設計設計模式
- C++設計模式::裝飾模式or代理模式or面向切片程式設計(AOP)C++設計模式程式設計
- JS實現AOP 面向切面程式設計 (裝飾者模式)JS程式設計模式
- Spring Boot實戰系列(3)AOP面向切面程式設計Spring Boot程式設計
- Spring之旅第七站:面向切面程式設計(AOP)Spring程式設計
- NIO程式設計介紹程式設計
- 面向切片程式設計(AOP)應用的一些實際例子程式設計