最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring框架基于AOP實現(xiàn)簡單日志管理步驟解析

 更新時間:2020年06月17日 14:30:27   作者:臥城聽風(fēng)雨  
這篇文章主要介紹了Spring框架基于AOP實現(xiàn)簡單日志管理步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

SPringAOP的使用

技術(shù)概述,描述這個技術(shù)是做什么?學(xué)習(xí)該技術(shù)的原因,技術(shù)的難點在哪里。
為了實現(xiàn)項目管理員端的操作數(shù)據(jù)庫日志,便于方便所以利用Spring框架的AOP機制進(jìn)行實現(xiàn),項目的難點在于如果設(shè)置切入點,如何獲取參數(shù)。

技術(shù)詳述,描述你是如何實現(xiàn)和使用該技術(shù)的,要求配合代碼和流程圖詳細(xì)描述。可以再細(xì)分多個點,分開描述各個部分。

在applicationContext.xml中開啟AOP代理

<aop:aspectj-autoproxy />

自定義一個注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnno {
	String operatorType();
}

編寫一個切面類

@Component
@Aspect
public class LogAopAspect {
	@Autowired
	LogtableService logtableService;//Logtable為數(shù)據(jù)庫中的一張表,用于存儲日志信息
	@Around("@annotation(qj.admin.aspect.LogAnno)")//設(shè)定需要捕獲的標(biāo)簽
	public Object around(ProceedingJoinPoint pjp) throws Throwable
	{
		MethodSignature methodSignature =(MethodSignature)pjp.getSignature();
		Method method = methodSignature.getMethod();
		String targetName = pjp.getTarget().getClass().getName(); 
		System.out.println("增強的類是:"+targetName);
		System.out.println("增強的方法是:"+method.getName());
		Method realMethod = pjp.getTarget().getClass().getDeclaredMethod(methodSignature.getName(), method.getParameterTypes());
		LogAnno logAnno = realMethod.getAnnotation(LogAnno.class);//獲取注解的方法上的自定義標(biāo)簽類
		String operatortype = logAnno.operatorType();//獲取到自定義標(biāo)簽上的注解如“修改賬戶狀態(tài)”
		//String operatortype = "修改用戶積分";
		AdminLog adminLog = new AdminLog();
		adminLog.setOperatortype(operatortype);
		adminLog.setOperator("123");
		Object resultObject = null;
		Object [] parameter = pjp.getArgs();//獲取注解的方法的傳入?yún)?shù)
		try {
			resultObject = pjp.proceed();
			adminLog.setOperatorresult("正常 "+Arrays.toString(parameter));
		} catch (Exception e) {
			// TODO: handle exception
			adminLog.setOperatorresult("失敗");
		}
		finally {
			adminLog.setOperatordate(new Date());
			logtableService.addLog(adminLog);
		}
		return resultObject;
	}

用自定義注解注解一個方法

@LogAnno(operatorType = "修改賬戶狀態(tài)")
	public void handleUser(int IDNumber, int type) {
		User user = userDAO.get(IDNumber);
		userDAO.update(user, type);
	}

項目目錄結(jié)構(gòu)

技術(shù)使用中遇到的問題和解決過程。要求問題的描述和解決有一定的內(nèi)容,不能草草概括。要讓遇到相關(guān)問題的人看了你的博客之后能夠解決該問題。

剛剛開始的時候時候僅僅利用Method method = methodSignature.getMethod();來獲取當(dāng)前增強的方法,但是在接下來的LogAnno logAnno = method.getAnnotation(LogAnno.class);中g(shù)et到的logAnno類為空,而上面通過打印System.out.println("增強的方法是:"+method.getName());顯示增加的方法并沒有錯誤,導(dǎo)致這就陷入了我的知識盲區(qū),經(jīng)過查找資料,大部分教程都說在自定義注解類中添加@Retention(RetentionPolicy.RUNTIME)即可解決問題,但是我添加之后還是同樣的問題,最后意識到,可能這方法所獲取的函數(shù)是兩個不同的函數(shù),最后又經(jīng)過查找最終發(fā)現(xiàn)原來是這個aop攔截的是ServiceImpl的一個方法,然后這個ServiceImpl又啟動了事務(wù)管理,而事務(wù)管理又是基于AOP的。

也就是說,這個權(quán)限的@Around的切面攔截的是個代理對象的方法,而代理對象的方法是不會把原來父類中的方法的注解加上去的,所以這里這個注解的對象為null。

最后運用Method realMethod = pjp.getTarget().getClass().getDeclaredMethod(methodSignature.getName(), method.getParameterTypes());獲取到了真正需要的增強的函數(shù)。

總結(jié)

利用Spring的AOP機制確實能夠大大減少代碼量,很容易的就實現(xiàn)了日志的管理

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細(xì)節(jié)

    Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細(xì)節(jié)

    這篇文章主要介紹了Hikari?數(shù)據(jù)庫連接池內(nèi)部源碼實現(xiàn)的小細(xì)節(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Java如何實現(xiàn)企業(yè)微信審批流程

    詳解Java如何實現(xiàn)企業(yè)微信審批流程

    這篇文章主要使用了一個Java示例代碼,來向大家展示如何在企業(yè)微信中實現(xiàn)審批流程,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考下
    2024-11-11
  • Spring中自定義攔截器的使用

    Spring中自定義攔截器的使用

    大家好,本篇文章主要講的是Spring中自定義攔截器的使用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(Alibaba Java Coding Guidelines)

    IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(Alibaba Java Coding Guidelines

    這篇文章主要介紹了IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(Alibaba Java Coding Guidelines),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java檢查服務(wù)器的連通兩種方法代碼分享

    java檢查服務(wù)器的連通兩種方法代碼分享

    這篇文章主要介紹了java檢查服務(wù)器的連通兩種方法代碼分享,涉及ping的介紹以及檢查服務(wù)器連通的兩種方法代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 深入聊一聊springboot項目全局異常處理那些事兒

    深入聊一聊springboot項目全局異常處理那些事兒

    最近在做項目時需要對異常進(jìn)行全局統(tǒng)一處理,所以下面這篇文章主要給大家介紹了關(guān)于springboot項目全局異常處理那些事兒,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • SpringBoot+URule實現(xiàn)可視化規(guī)則引擎的方法示例

    SpringBoot+URule實現(xiàn)可視化規(guī)則引擎的方法示例

    規(guī)則引擎其實是一種組件,它可以嵌入到程序當(dāng)中,將程序復(fù)雜的判斷規(guī)則從業(yè)務(wù)代碼中剝離出來,使得程序只需要關(guān)心自己的業(yè)務(wù),而不需要去進(jìn)行復(fù)雜的邏輯判斷,本文給大家介紹了SpringBoot+URule實現(xiàn)可視化規(guī)則引擎的方法示例,需要的朋友可以參考下
    2024-12-12
  • JAVA--HashMap熱門面試題

    JAVA--HashMap熱門面試題

    這篇文章主要介紹了JAVA關(guān)于HashMap容易被提問的面試題,文中題目提問頻率高,相信對你的面試有一定幫助,想要入職JAVA的朋友可以了解下
    2020-06-06
  • Flink結(jié)合Kafka實現(xiàn)通用流式數(shù)據(jù)處理

    Flink結(jié)合Kafka實現(xiàn)通用流式數(shù)據(jù)處理

    這篇文章將和大家一起深入探討Flink和Kafka的關(guān)系以及它們在數(shù)據(jù)流處理中的應(yīng)用,并提供一些最佳實踐和實際案例,希望對大家有一定的幫助
    2025-03-03
  • Java基于Graphics2D實現(xiàn)海報制作

    Java基于Graphics2D實現(xiàn)海報制作

    這篇文章主要為大家詳細(xì)介紹了Java如何基于Graphics2D實現(xiàn)海報制作,并且支持自定義顏色,背景,logo,貼圖,感興趣的小伙伴可以了解一下
    2024-04-04

最新評論

深水埗区| 澄迈县| 鸡西市| 右玉县| 景德镇市| 揭阳市| 哈密市| 开封市| 阳谷县| 章丘市| 定远县| 宝丰县| 遵义县| 深圳市| 阿图什市| 新干县| 香格里拉县| 沙湾县| 台湾省| 会东县| 华宁县| 南丹县| 邵阳市| 分宜县| 商都县| 巴中市| 威海市| 孟村| 航空| 黄冈市| 鸡泽县| 龙川县| 青浦区| 扶风县| 尉氏县| 长武县| 长治市| 三穗县| 建昌县| 揭西县| 库尔勒市|