當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringAOP+自定义注解实现日志功能
生活随笔
收集整理的這篇文章主要介紹了
SpringAOP+自定义注解实现日志功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SpringAOP+自定義注解實現(xiàn)日志功能
上篇文章講解了springAOP實現(xiàn)簡單日志功能,這次講解使用自定義注解實現(xiàn)日志功能。具體pom、Spring、SpringMVC的配置不再進行講解,詳情點擊鏈接查看[SpringAOP Aspect注解實現(xiàn)簡單日志功能]。
如果你的項目使用的是springBoot的話,直接在pom中引入SpringAOP的相關(guān)依賴即可:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>完成相關(guān)配置后,首先創(chuàng)建一個自定義注解類MethodInfo:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MethodInfo {String info() default ""; }Controller中的使用:
@RequestMapping(value = "test") @MethodInfo(info="測試管理") public String list() {System.out.println("這是一個joinPoint");return "xxx"; }創(chuàng)建切面類LogAspect:
import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;@Component @Aspect public class LogAspect { /*** 切入點,使用方法切點函數(shù)@annotation匹配* @annotation(com.xx.xx.MethodInfo):表示標注了特定注解MethodInfo的JointPoint* 如果想特定某些包下使用MethodInfo注解的JointPoint可以結(jié)合使用* execution(* com.xx.xx..*(..))&& @annotation(com.xx.xx.MethodInfo)*/@Pointcut("@annotation(com.xx.xx.MethodInfo)")public void logPointcut(){}/*** 后置通知,JointPoint執(zhí)行完成后執(zhí)行,不論是否JointPoint異常,實質(zhì)是finally中的代碼塊* @param joinPoint*/@After("logPointcut()")public void doAfter(JoinPoint joinPoint){MethodSignature ms = (MethodSignature)joinPoint.getSignature();/*** 此處不使用((MethodSignature)joinPoint.getSignature()).getMethod()獲取Method,* 因為如果方法是接口的實現(xiàn)獲取到的將是該方法接口*/Method method = joinPoint.getTarget().getClass().getDeclaredMethod(ms.getName(), ms.getParameterTypes());MethodInfo mi = method.getAnnotation(MethodInfo.class);//獲取自定義注解對象String info = mi.info();//獲取注解成員信息,例如@MethodInfo(info="測試管理")獲取到的就是測試管理HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String ip = request.getRemoteAddr(); // 獲取IP地址HttpSession session = request.getSession();//獲取sessionUser user = (User)session.getAttribute("userCache");//從session中獲取當前用戶信息,根據(jù)自身項目實際情況而定//保存日志操作System.out.println("執(zhí)行保存日志操作...");} }以上我們就簡單實現(xiàn)了使用自定義注解方式的aop,自定義注解可以定義多個成員,根據(jù)實際需求使用。
總結(jié)
以上是生活随笔為你收集整理的SpringAOP+自定义注解实现日志功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyTorch随笔-3
- 下一篇: SpringBoot:解决日期转换问题和