通知(Advice):具體的橫切邏輯,Spring中有四種Advice編程
Spring有兩種實現AOP的方式:Java動態代理和Cglib。默認使用動態代理,當目標對象沒有實現接口時,就會使用後者。
代理模式中存在目標對象和代理對象,它們必須實現相同的接口。用戶直接使用代理對象,而代理對象會將用戶的請求交給目標對象處理。代理對象能夠對用戶的請求增長額外的處理。函數
1.建立目標對象this
//目標對象接口 public interface Subject { public void doSomething(); } //目標對象實現 public class RealSubject implements Subject { public void doSomething() { System.out.println( "call doSomething()" ); } }
2.建立代理對象邏輯處理類spa
public class ProxyHandler implements InvocationHandler { private Object proxied; public ProxyHandler( Object proxied ) { this.proxied = proxied; } public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { //在轉調具體目標對象以前,能夠執行一些功能處理 //轉調具體目標對象的方法 return method.invoke( proxied, args); //在轉調具體目標對象以後,能夠執行一些功能處理 } }
3.簡單調用,建立代理對象代理
RealSubject real = new RealSubject(); Subject proxySubject = (Subject)Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[]{Subject.class}, new ProxyHandler(real)); proxySubject.doSomething();