Spring 中使用@Aspect 控制自定义注解
来源:互联网 发布:在手机淘宝上如何开店 编辑:程序博客网 时间:2024/05/28 06:07
Spring 中使用@Aspect 控制自定义注解
转载一篇介绍@Aspect
1.定义系统日志注解类
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
String value() default "";
}
2.定义切面处理类
package com.kxs.common.aspect;import com.google.gson.Gson;import com.kxs.common.annotation.SysLog;import com.kxs.common.utils.HttpContextUtils;import com.kxs.common.utils.IPUtils;import com.kxs.modules.sys.entity.SysLogEntity;import com.kxs.modules.sys.entity.SysUserEntity;import com.kxs.modules.sys.service.SysLogService;import org.apache.shiro.SecurityUtils;import org.aspectj.lang.ProceedingJoinPoint;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.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;import java.lang.reflect.Method;import java.util.Date;/** * 系统日志,切面处理类 * * @author * @email * @date */@Aspect@Componentpublic class SysLogAspect { @Autowired private SysLogService sysLogService; @Pointcut("@annotation(com.kxs.common.annotation.SysLog)")//指向自定义注解路径 public void logPointCut() { } /** * 切面记录系统日志 * @param point * @return * @throws Throwable */ @Around("logPointCut()")// public Object around(ProceedingJoinPoint point) throws Throwable { long beginTime = System.currentTimeMillis(); //执行方法 Object result = point.proceed(); //执行时长(毫秒) long time = System.currentTimeMillis() - beginTime; //保存日志 saveSysLog(point, time); return result; }//保存日志 private void saveSysLog(ProceedingJoinPoint joinPoint, long time) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); SysLogEntity sysLog = new SysLogEntity(); SysLog syslog = method.getAnnotation(SysLog.class); if(syslog != null){ //注解上的描述 sysLog.setOperation(syslog.value()); } //请求的方法名 String className = joinPoint.getTarget().getClass().getName(); String methodName = signature.getName(); sysLog.setMethod(className + "." + methodName + "()"); //请求的参数 Object[] args = joinPoint.getArgs(); try{ String params = new Gson().toJson(args[0]); sysLog.setParams(params); }catch (Exception e){ } //获取request HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); //设置IP地址 sysLog.setIp(IPUtils.getIpAddr(request)); //用户名 String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername(); sysLog.setUsername(username); sysLog.setTime(time); sysLog.setCreateDate(new Date()); //保存系统日志 sysLogService.save(sysLog); }}
阅读全文
0 0
- Spring 中使用@Aspect 控制自定义注解
- Spring中Aspect注解使用
- Spring使用@Aspect注解编译出错
- 【Spring】 (1)Aspect 自定义注解 使用该注解的地方 自动注入该注解里传的参数
- Aspect编程中@Around注解的使用
- spring aspect 注解
- 循序渐进之Spring AOP(6) - 使用@Aspect注解
- 在spring 中使用自定义注解
- spring mvc使用自定义注解控制访问权限
- spring Aspect 实现自定义注解的日志记录,有时候注解类不起作用的原因分析
- spring 自定义注解annotation+aspect 环绕通知配置对dubbo的consumer监控报警
- 利用Spring AOP (aspect) 自定义注解解决日志和签名校验
- Spring AOP自定义注解实现权限控制
- Spring Aop +自定义注解实现用户权限控制
- Spring @Aspect 全注解完成AOP测试
- Spring 基于 Aspect 注解的增强实现
- 使用Spring处理自定义注解
- Spring自定义注解的使用
- 小程序隐藏元素的几种方式
- 杭电ACM 2000题
- 命令模式的简单使用
- CSDN博客积分规则
- Error:This Gradle plugin requires Studio 3.0 minimum 问题 笔记
- Spring 中使用@Aspect 控制自定义注解
- webdriver——上传文件,滚动条控制操作,网页截图操作
- audio开发资料
- 重置表格
- 爬虫-urllib2-Headers (常用)
- 如何:启用和禁用自动绑定重定向
- 数据库概论
- 如何成为一名程序员面霸
- springboot+Rabit实战一:(Rabbit MQ windows 环境搭建)