欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在不使用spring框架中使用aop的功能

 更新時間:2022年01月03日 11:20:26   作者:Brrby  
這篇文章主要介紹了如何在不使用spring框架中使用aop的功能,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring框架的AOP機制可以讓開發(fā)者把業(yè)務流程中的通用功能抽取出來,單獨編寫功能代碼。在業(yè)務流程執(zhí)行過程中,Spring框架會根據業(yè)務流程要求,自動把獨立編寫的功能代碼切入到流程的合適位置。

spring提供了兩種方式的AOP使用

使用xml配置方式

在這里插入圖片描述

使用注解方式

在這里插入圖片描述

這里需要注意的是Spring AOP目前僅僅支持方法級別的切面,成員的interception并沒有實現。另外,spring aop僅僅是集成框架,并沒有參與aop的具體開發(fā)。

如果想利用aop的更多功能,或者在不使用spring的框架中使用aop的功能,該怎么辦呢?

AspectJ簡介

在這里插入圖片描述

spring aop集成了AspectJ(可以和java編程語言無縫結合的一個面向切面編程的可擴展框架)

AspectJ的使用實例

Eclipse Marketplace安裝插件AJDT

在這里插入圖片描述

創(chuàng)建Aspect工程

在這里插入圖片描述

創(chuàng)建AspectJ測試類

在這里插入圖片描述

創(chuàng)建一個切面Aspect文件

在這里插入圖片描述

.aj文件

在這里插入圖片描述

運行HelloAspectJDemo的java程序,結果為:

在這里插入圖片描述

不使用spring的aop功能實現日志輸出

第一種

public class TimeBook {undefined
?private Logger logger = Logger.getLogger(this.getClass().getName());
?//審核數據的相關程序
?public void doAuditing(String name){undefined
? logger.log(Level.INFO, name + "開始審核數據...");
? System.out.println("審核程序");
? logger.log(Level.INFO, name + "審核數據結束...");
?}
}
//TestHelloWorld.java
package com.gc.test;
import com.gc.action.TimeBook;
public class TestHelloWorld {undefined
?public static void main(String[] args){undefined
? TimeBook timeBook = new TimeBook();
? timeBook.doAuditing("張三");
?}
}

第二種:通過面向接口編程實現日志輸出

public class TimeBook implements TimeBookInterface {undefined
?//審核數據的相關程序
?public void doAuditing(String name){undefined
? System.out.println("審核程序");
?}
}
//TimeBookProxy.java
package com.gc.action;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import com.gc.impl.TimeBookInterface;
public class TimeBookProxy {undefined
?private Logger logger = Logger.getLogger(this.getClass().getName());
?private TimeBookInterface timeBookInterface;
?//在該類中針對前面的接口TimeBookInterface編程,而不是針對具體的類
?public TimeBookProxy(TimeBookInterface timeBookInterface){undefined
? this.timeBookInterface = timeBookInterface;
?}
?//實際業(yè)務處理
?public void doAuditing(String name){undefined
? logger.log(Level.INFO,"開始審核數據 "+name);
? timeBookInterface.doAuditing(name);
? logger.log(Level.INFO,"審核數據結束 "+name);
?}
}
public class TestHelloWorld {undefined
?public static void main(String[] args){undefined
? TimeBookProxy timeBookProxy = new TimeBookProxy(new TimeBook());
? timeBookProxy.doAuditing("張三");
?}
}

第三種:使用java的代理機制進行日志輸出

public class LogProxy implements InvocationHandler{undefined
?private Logger logger = Logger.getLogger(this.getClass().getName());
?private Object delegate;
?//綁定代理對象
?public Object bind(Object delegate){undefined
? this.delegate = delegate;
? return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
? ? delegate.getClass().getInterfaces(),this);
?}
?//針對接口編程
?public Object invoke(Object proxy,Method method,Object[] args) throws Throwable {undefined
? Object result = null;
? try{undefined
? ?//在方法調用前后進行日志輸出
? ?logger.log(Level.INFO,args[0]+" 開始審核數據...");
? ?result = method.invoke(delegate, args);
? ?logger.log(Level.INFO,args[0]+" 審核數據結束...");
? }catch(Exception e){undefined
? ?logger.log(Level.INFO,e.toString());
? }
? return result;
?}
}
//TimeBookInterface.java
package com.gc.impl;
//針對接口編程
public interface TimeBookInterface {undefined
?public void doAuditing(String name);
}
//TimeBook.java
public class TimeBook implements TimeBookInterface {undefined
?//審核數據的相關程序
?public void doAuditing(String name){undefined
? System.out.println("審核程序");
?}
}
//TestHelloWorld.java
public class TestHelloWorld {undefined
?public static void main(String[] args){undefined
? //實現了對日志類的重用
? LogProxy logProxy = new LogProxy();
? TimeBookInterface timeBookProxy = (TimeBookInterface)logProxy.bind(new TimeBook());
? timeBookProxy.doAuditing("張三");
?}
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 淺談java 增強型的for循環(huán) for each

    淺談java 增強型的for循環(huán) for each

    下面小編就為大家?guī)硪黄獪\談java 增強型的for循環(huán) for each。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 用Java實現全國天氣預報的api接口調用示例

    用Java實現全國天氣預報的api接口調用示例

    查詢天氣預報在APP中常用的一個常用功能,本文實例講述了java調用中國天氣網api獲得天氣預報信息的方法。分享給大家供大家參考。
    2016-10-10
  • Java快速排序QuickSort(實例)

    Java快速排序QuickSort(實例)

    下面小編就為大家?guī)硪黄狫ava快速排序QuickSort(實例)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例

    java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例

    這篇文章主要介紹了java 如何壓縮圖片體積,幫助大家更好的利用Java處理圖片,應對特殊情況,感興趣的朋友可以了解下
    2020-10-10
  • SpringBoot消息國際化配置實現過程解析

    SpringBoot消息國際化配置實現過程解析

    這篇文章主要介紹了SpringBoot消息國際化配置實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • java實現桌球小游戲

    java實現桌球小游戲

    這篇文章主要為大家詳細介紹了java實現桌球小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java中EasyPoi多sheet導出功能實現

    Java中EasyPoi多sheet導出功能實現

    這篇文章主要介紹了Java中EasyPoi多sheet導出功能實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 詳解SpringBoot實現事件同步與異步監(jiān)聽

    詳解SpringBoot實現事件同步與異步監(jiān)聽

    這篇文章主要通過示例為大家詳細介紹了SpringBoot中的事件的用法和原理以及如何實現事件同步與異步監(jiān)聽,快跟隨小編一起學習學習吧
    2022-06-06
  • SpringBoot整合MongoDB實現文件上傳下載刪除

    SpringBoot整合MongoDB實現文件上傳下載刪除

    這篇文章主要介紹了SpringBoot整合MongoDB實現文件上傳下載刪除的方法,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-05-05
  • Java多線程之線程池七個參數詳解

    Java多線程之線程池七個參數詳解

    這篇文章主要介紹了Java多線程之線程池七個參數詳解,文中有很詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論