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