aop自定义切面
来源:互联网 发布:中国农大网络远程教育 编辑:程序博客网 时间:2024/05/19 04:07
先定义注解
import java.lang.annotation.*;/** * Created by dubby on 16/3/23. */@Target({ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface SystemLog { String description() default "";}
在实现切片
import com.ndkey.web.ResponseData;import com.nington.armstrong.aspect.annotation.SystemLog;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import javax.servlet.http.HttpSession;import java.lang.reflect.Method;import java.util.Objects;/** * Created by dubby on 16/3/23. */@Aspect@Order(0)@Componentpublic class SystemLogAspect { private static final Logger logger = LogManager.getLogger(); //切点 @Pointcut("@annotation(***.aspect.annotation.SystemLog)") public void aspect() { } @Around("aspect()") public Object around(JoinPoint joinPoint){ Object object = null; try{ object = ((ProceedingJoinPoint)joinPoint).proceed(); } catch (Throwable t){ logger.error(getMethodDescription(joinPoint) + " "+t.getMessage()); return ResponseData.errorData("server error"); } return object; } /** * 获取注解中对方法的描述信息 * * @param joinPoint 切点 * @return 方法描述 * @throws Exception */ public static String getMethodDescription(JoinPoint joinPoint) { String description = ""; try { String targetName = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); Object[] arguments = joinPoint.getArgs(); Class targetClass = Class.forName(targetName); Method[] methods = targetClass.getMethods(); description = ""; for (Method method : methods) { if (method.getName().equals(methodName)) { Class[] clazzs = method.getParameterTypes(); if (clazzs.length == arguments.length) { description = method.getAnnotation(SystemLog. class).description(); break; } } } } catch (ClassNotFoundException e) { e.printStackTrace(); } return description; }}
使用切面
@RequestMapping("/hello") @SystemLog(description = "hello") @Transactional public ResponseData hello() { Role role = new Role(); role.setId(UUID.randomUUID().toString()); role.setName("测试"); roleMapper.insertSelective(role); role = new Role(); roleMapper.insert(role); return ResponseData.successData(role.getName()); }
0 0
- aop自定义切面
- Spring AOP自定义切面
- aop注解 自定义切面的注解写法
- aop注解 自定义切面的注解写法
- aop注解 自定义切面的注解写法
- Spring基础 导入AOP+自定义标签切面
- Spring自定义面向切面编程(AOP)
- aop切面
- aop 切面
- 面向切面编程spring AoP(自定义注解)
- AOP如何对自定义注解进行切面编程
- 自定义注解 Aspect 实现aop 日志记录切面编程
- Springboot 自定义注解 AOP切面获取操作日志
- 【Java-Spring开发】aop注解 自定义切面的注解写法
- aop切面和redis实现自定义缓存注解
- AOP,面向切面编程
- AOP面向切面编程
- 面向切面编程 (AOP)
- Linux用户空间与内核空间
- init 5和startx的区别
- 红帽CEO:员工经常当面叫我笨蛋
- 一个解决OpenCV ffmpeg的链接错误的解决方法
- RHEL6 命令行下安装图形桌面
- aop自定义切面
- 第五周项目1.4-三角形类雏形
- IntentService
- How to build qemu-system-arm in Linux
- Activity 的 LaunchMode
- ARM汇编调试
- Using QEMU for Embedded Systems Development, Part 1
- Using QEMU for Embedded Systems Development, Part 2
- C#委托的介绍(delegate、Action、Func、predicate)