當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring AOP 本质
生活随笔
收集整理的這篇文章主要介紹了
Spring AOP 本质
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AOP本質是攔截,攔截的本質是代理,代理分動態(tài)和靜態(tài),靜態(tài)代理很簡單,功能有限,應用不是很廣泛,Spring中主要用的動態(tài)代理。
?
用Spring做開發(fā),AOP的實現僅僅是編程實現一些接口,然后配置一下即可。這個可以參看“Spring AOP 模型”一文。
?
為什么配置一下即可,究竟Spring框架內部做了如何的處理,實現了代理。下面可以看看下面的例子就明白了。
/**
* 被代理類
*/
public class MessageWriter{ /** * 業(yè)務方法 */ public void writeMessage() { System.out.print("World"); }
}import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation; /**
* 實現包圍通知,實際就是方法攔截器,MethodInterceptor是AOP聯(lián)盟定義的接口.
*/
public class MessageDecorator implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { System.out.print("Hello "); Object retVal = invocation.proceed(); System.out.println("!"); return retVal; }
}import org.springframework.aop.framework.ProxyFactory; /**
* AOP測試
*/
public class HelloWorldAOPExample { public static void main(String[] args) { //目標對象(被代理的對象) MessageWriter target = new MessageWriter(); //產生一個代理工廠 ProxyFactory pf = new ProxyFactory(); //添加代理工廠的攔截器 pf.addAdvice(new MessageDecorator()); //設置被代理對象 pf.setTarget(target); //獲取一個代理實例 MessageWriter proxy = (MessageWriter) pf.getProxy(); //從目標對象直接輸出信息 target.writeMessage(); System.out.println("\n------------"); //從代理對象輸出信息 proxy.writeMessage(); }
} 例子中用ProxyFactory類來創(chuàng)建目標對象的代理,同時織入通知。通過調用addAdvice(new MessageDecorator()),把MessageDecorator通知傳給ProxyFactory,然后通過調用setTarget(target)設定織入的目標對象。設定了目標對象,也織入了通知,就可以調用ProxyFactory.getProxy()來獲得一個代理對象。 ? 運行結果: - Using JDK 1.4 collections?
World?
------------?
Hello World!?
Process finished with exit code 0 ? 從中可以看到,Spring的代理很牛,不一定要求代理和被代理類都要實現同一個接口,Spring可以代理任何的類,當然final類除外,因為final類不允許繼承。
World?
------------?
Hello World!?
Process finished with exit code 0 ? 從中可以看到,Spring的代理很牛,不一定要求代理和被代理類都要實現同一個接口,Spring可以代理任何的類,當然final類除外,因為final類不允許繼承。
總結
以上是生活随笔為你收集整理的Spring AOP 本质的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 栈和队列之用java实现栈
- 下一篇: Spring+EhCache缓存实例(详