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

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

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

SPringAOP的使用

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

技術(shù)詳述,描述你是如何實(shí)現(xiàn)和使用該技術(shù)的,要求配合代碼和流程圖詳細(xì)描述??梢栽偌?xì)分多個(gè)點(diǎn),分開(kāi)描述各個(gè)部分。

在applicationContext.xml中開(kāi)啟AOP代理

<aop:aspectj-autoproxy />

自定義一個(gè)注解

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

編寫(xiě)一個(gè)切面類

@Component
@Aspect
public class LogAopAspect {
	@Autowired
	LogtableService logtableService;//Logtable為數(shù)據(jù)庫(kù)中的一張表,用于存儲(chǔ)日志信息
	@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("增強(qiáng)的類是:"+targetName);
		System.out.println("增強(qiáng)的方法是:"+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;
	}

用自定義注解注解一個(gè)方法

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

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

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

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

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

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    Spring中自定義攔截器的使用

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

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

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

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

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

    深入聊一聊springboot項(xiàng)目全局異常處理那些事兒

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

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

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

    JAVA--HashMap熱門(mén)面試題

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

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

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

    Java基于Graphics2D實(shí)現(xiàn)海報(bào)制作

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

最新評(píng)論

平阳县| 三穗县| 荃湾区| 宜昌市| 连平县| 武隆县| 广饶县| 莱阳市| 根河市| 陇南市| 万山特区| 疏附县| 定襄县| 呈贡县| 宁海县| 淮安市| 行唐县| 贵阳市| 卫辉市| 五峰| 莎车县| 安吉县| 忻州市| 凤凰县| 二手房| 长垣县| 富宁县| 抚州市| 旅游| 射阳县| 仙桃市| 汉沽区| 六安市| 潢川县| 都江堰市| 寿光市| 正安县| 台北县| 扬州市| 东阳市| 宜阳县|