云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Spring MVC AOP通过注解方式拦截Controller等实现日志管理

Spring MVC AOP通过注解方式拦截Controller等实现日志管理

  • 62 次阅读
  • 3 次下载
  • 2025/12/9 6:39:15

Spring MVC AOP通过注解方式拦截

Controller等实现日志管理

开始上代码:

注解定义

package com.jiankunking.common;

import java.lang.annotation.*; /**

* @author jiankunking * @Date: 2016/8/15 * @Time: 11:09

* @annotation OperationLogger */

@Retention(RetentionPolicy.RUNTIME)//注解会在class中存在,运行时可通过反射获取 @Target(ElementType.METHOD)//目标是方法

@Documented//文档生成时,该注解将被包含在javadoc中,可去掉 public @interface OperationLogger {

/**

* 模块名字 */

String modelName() default \

/**

* 操作类型 */

String option(); }

@interface是用来自定义注释类型的。

注释的声明用@符号后面跟上这个注释类型的名字,再后面跟上括号,括号中列出这个注释中元 素/方法的key-value对。值必须是常量。 AOP拦截部分

package com.jiankunking.common;

import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.*;

import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component;

import java.lang.reflect.Method; /**

* @author jiankunking * @Date: 2016/8/15 * @Time: 11:11

* @annotation SysLogAspect */

@Aspect @Component

public class SysLogAspect {

private static final Logger logger = Logger.getLogger(SysLogAspect.class);

/**

* 定义Pointcut,Pointcut的名称,此方法不能有返回值,该方法只是一个标示 */

@Pointcut(\ public void controllerAspect() {

System.out.println(\我是一个切入点\ }

/**

* 前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。 * @param joinPoint */

@Before(\

public void doBefore(JoinPoint joinPoint) {

System.out.println(\前置通知开始=====\ //handleLog(joinPoint, null); }

/**

* 后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

* @param joinPoint */

@AfterReturning(pointcut = \ public void doAfter(JoinPoint joinPoint) {

System.out.println(\后置通知开始=====\ //handleLog(joinPoint, null); }

/**

* 抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。 * @param joinPoint * @param e */

@AfterThrowing(value = \ public void doAfter(JoinPoint joinPoint, Exception e) {

System.out.println(\异常通知开始=====\ //handleLog(joinPoint, e); }

/**

* 环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。 * @param joinPoint */

@Around(\

public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {

System.out.println(\环绕通知开始=====\ //handleLog(joinPoint, null); Object obj= joinPoint.proceed();

System.out.println(\环绕通知结束=====\ return obj; }

/**

* 日志处理 *

* @param joinPoint * @param e */

private void handleLog(JoinPoint joinPoint, Exception e) {

try {

//获得注解

OperationLogger logger = giveController(joinPoint); if (logger == null) {

return; }

String signature = joinPoint.getSignature().toString(); // 获取目标方法签名 String methodName = signature.substring(signature.lastIndexOf(\ signature.indexOf(\

String longTemp = joinPoint.getStaticPart().toLongString(); String classType = joinPoint.getTarget().getClass().getName();

Class clazz = Class.forName(classType);

Method[] methods = clazz.getDeclaredMethods(); System.out.println(\

for (Method method : methods) {

if (method.isAnnotationPresent(OperationLogger.class) && method.getName().equals(methodName)) {

//OpLogger logger = method.getAnnotation(OpLogger.class); String clazzName = clazz.getName();

System.out.println(\ + methodName); } }

} catch (Exception exp) {

logger.error(\异常信息:{}\ exp.printStackTrace(); } }

/**

* 获得注解

* @param joinPoint * @return

搜索更多关于: Spring MVC AOP通过注解方式拦截Controll 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

Spring MVC AOP通过注解方式拦截Controller等实现日志管理 开始上代码: 注解定义 package com.jiankunking.common; import java.lang.annotation.*; /** * @author jiankunking * @Date: 2016/8/15 * @Time: 11:09 * @annotation OperationLogger */ @Retention(RetentionPolicy.RUNTIME)//注解会在class中存在,运行时可通过反射获取 @Target(ElementType.METHOD)//目标是方法 @Documented//文档生成时,该注

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com