AOP實現起來代碼相當簡單.主要核心是動態代理和反射.
一.接口類:
public interface MethodDao { public void sayHello(); }
二.接口實現類:
public class MethodImpl implements MethodDao { public void sayHello() { System.out.println("hello world"); } }
三.編寫動態代理類DynamicProxy,***實現InvocationHandler接口
public class DynamicProxy implements InvocationHandler { private Object object; /** * <p>Title: </p> * <p>Description: </p> * 接受被代理類 */ public DynamicProxy(Object object) { this.object=object; // TODO Auto-generated constructor stub } /* (non-Javadoc) * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) *實現invoke方法,在方法執行之后添加操作 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("=====方法執行前======="); method.invoke(object, args); System.out.println("=====方法執行后======="); return null; } }
四.編寫測試類:
public class Test { public static void main(String[] args) { MethodDao methodDao=new MethodImpl(); InvocationHandler handler = new DynamicProxy(methodDao); //第一個參數是類加載器,與handler相同; //第二個是參數對象實現的接口,如果沒有的話需要使用cdlib //第三個參數是InvocationHandler. //該類返回的其實是MethodImpl類 methodDao=(MethodDao) Proxy.newProxyInstance(handler.getClass().getClassLoader(), methodDao.getClass().getInterfaces(), handler); methodDao.sayHello(); } }
五.查看控制臺輸出:
=====方法執行前=======
hello world
=====方法執行后=======
六.總結:
通過上面的代碼可以總結出AOP的應用場景:
1.事務管理,(事務的開啟跟提交可以直接交由aop來處理,程序員可以更加專注于業務)
2.日志管理(在方法調用的前后可以打印日志)
3.權限管理(比如登錄驗證.管理員權限等,在調用某個方法時,如果權限不夠也可以提示).
以上這篇動態代理模擬實現aop的示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。