動態(tài)代理模擬實現(xiàn)aop的示例
AOP實現(xiàn)起來代碼相當簡單.主要核心是動態(tài)代理和反射.
一.接口類:
public interface MethodDao { public void sayHello(); }
二.接口實現(xiàn)類:
public class MethodImpl implements MethodDao { public void sayHello() { System.out.println("hello world"); } }
三.編寫動態(tài)代理類DynamicProxy,***實現(xiàn)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[]) *實現(xiàn)invoke方法,在方法執(zhí)行之后添加操作 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("=====方法執(zhí)行前======="); method.invoke(object, args); System.out.println("=====方法執(zhí)行后======="); return null; } }
四.編寫測試類:
public class Test { public static void main(String[] args) { MethodDao methodDao=new MethodImpl(); InvocationHandler handler = new DynamicProxy(methodDao); //第一個參數(shù)是類加載器,與handler相同; //第二個是參數(shù)對象實現(xiàn)的接口,如果沒有的話需要使用cdlib //第三個參數(shù)是InvocationHandler. //該類返回的其實是MethodImpl類 methodDao=(MethodDao) Proxy.newProxyInstance(handler.getClass().getClassLoader(), methodDao.getClass().getInterfaces(), handler); methodDao.sayHello(); } }
五.查看控制臺輸出:
=====方法執(zhí)行前=======
hello world
=====方法執(zhí)行后=======
六.總結(jié):
通過上面的代碼可以總結(jié)出AOP的應(yīng)用場景:
1.事務(wù)管理,(事務(wù)的開啟跟提交可以直接交由aop來處理,程序員可以更加專注于業(yè)務(wù))
2.日志管理(在方法調(diào)用的前后可以打印日志)
3.權(quán)限管理(比如登錄驗證.管理員權(quán)限等,在調(diào)用某個方法時,如果權(quán)限不夠也可以提示).
以上這篇動態(tài)代理模擬實現(xiàn)aop的示例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot+thymeleaf+druid+mybatis 多模塊實現(xiàn)用戶登錄功能
這篇文章主要介紹了springboot+thymeleaf+druid+mybatis 多模塊實現(xiàn)用戶登錄功能,本文通過示例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07詳解Springboot @Cacheable 注解(指定緩存位置)
這篇文章主要介紹了詳解Springboot @Cacheable 注解(指定緩存位置),使用? @Cacheable ?注解就可以將運行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下2023-09-09java進階解析Springboot上傳excel存入數(shù)據(jù)庫步驟
項目需要,寫了一個,批量導(dǎo)入的接口。因為需要使用excel去批量導(dǎo)入數(shù)據(jù),所以寫了一個例子,經(jīng)過測試已經(jīng)可以用于實際開發(fā),這里記錄一下2021-09-09關(guān)于Java中@SuppressWarnings的正確使用方法
這篇文章主要介紹了關(guān)于Java中@SuppressWarnings的正確使用方法,@SuppressWarnings注解主要用在取消一些編譯器產(chǎn)生的警告對代碼左側(cè)行列的遮擋,有時候這會擋住我們斷點調(diào)試時打的斷點,需要的朋友可以參考下2023-05-05Feign實現(xiàn)多文件上傳,Open?Feign多文件上傳問題及解決
這篇文章主要介紹了Feign實現(xiàn)多文件上傳,Open?Feign多文件上傳問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11