文档章节

自定义注解,记录操作日志

傻男孩
 傻男孩
发布于 2017/04/18 15:06
字数 271
阅读 68
收藏 0

Spring的配置文件

<aop:aspectj-autoproxy />

日志拦截器

package com.vem.interceptor;

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.stereotype.Component;

import com.vem.entity.BussAnnotation;  

@Aspect  
@Component  
public class LogInterceptor {  
  
  
    @Pointcut("execution(* com.vem.service..*.*(..))")  
    public void aApplogic() {  
    	
    }  
      
    /** 
     * 环绕通知 用于拦截指定内容,记录用户的操作 
     */  
    @Around(value = "aApplogic() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")  
    public void interceptorApplogic(ProceedingJoinPoint joinPoint,  
            BussAnnotation annotation, Object object) throws Throwable {  
        System.out.println("模块名称moduleName:" + annotation.moduleName());  
        System.out.println("操作名称option:" + annotation.option()); 
        String methodName = joinPoint.getSignature().getName();
		System.out.println("方法名methodName:" + methodName); 
        
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();  
        String[] strings = methodSignature.getParameterNames();  
        
        joinPoint.proceed();  
        
        Object[] arguments = joinPoint.getArgs();   //获得参数列表
        if(arguments.length<=0){  
            System.out.println(methodName+"方法没有参数");  
        }else{  
	        for(int i=0;i<arguments.length;i++){  
	        	System.out.println(strings[i]+" : "+arguments[i]+" : ");
	        }  
        }  
    }  
}  

自定义注解

@Retention(RetentionPolicy.RUNTIME)  
@Target({ElementType.METHOD})  
@Documented  
public @interface BussAnnotation {  
    //模块名  
    String moduleName() default "";  
    //操作内容  
    String option() default "";  
}  

接口实现

写在service

@BussAnnotation(moduleName="人员管理",option="添加用户")  
public void testDemo1(PageData pd) throws Exception{
		
}

junit测试类

package com.vem.entity;

import javax.annotation.Resource;

import org.junit.Test;  
import org.junit.runner.RunWith;  
import org.springframework.test.context.ContextConfiguration;  
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.vem.service.data.DemoService;
import com.vem.util.PageData;  
  
@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(
		{"classpath:spring/ApplicationContext.xml"
		})
public class AopTest {  
	
	@Resource(name = "demoService")
	public DemoService demoService;
    
    @Test  
    public void testAopAddUser1(){  
    	PageData pd = new PageData();
    	pd.put("name", "zhangzexing");
    	pd.put("age", "21");
    	pd.put("passward", "123456");
    	try {
			demoService.testDemo2(pd);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }  

}  

 

© 著作权归作者所有

共有 人打赏支持
傻男孩
粉丝 2
博文 47
码字总数 52350
作品 0
深圳
高级程序员
私信 提问
SpringBoot(四)之优雅地日志处理

一、简介 日志功能在j2ee项目中是一个相当常见的功能,在一个小项目中或许你可以在一个个方法中,使用日志表的Mapper生成一条条的日志记录,但这无非是最烂的做法之一,因为这种做法会让日志...

郑加威
2018/12/23
0
0
Spring boot自定义注解方式实现日志记录

Annontation是Java5开始引入的新特性,中文名称叫注解。 一、常见注解 1.1 JDK自带注解 @Override:表示覆盖或重写父类的方法。 @Deprecated:表示该方法已经过时了。 @suppressWarnings:表...

Lienson
03/28
0
0
Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录

目的: 需要对一些事物的操作进行日志记录,如果在service内进行记录,大量的代码重复,并且维护比较麻烦。所以采用AOP的方式对service进行拦截。使用自定义注解的目的则是判断是否需要记录日...

凯文加内特
2015/05/12
0
2
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
2018/07/22
0
0
spring 自定义注解,实现日志

采用自定义注解实现 用户操作日志记录 简介及说明: 记录登陆用户的操作日志,目前只针对(运营管理平台)itas系统 目前采用spring的切面技术来实现记录日志的功能,切面点在controller层,主要...

hotsmile
2016/08/31
347
0

没有更多内容

加载失败,请刷新页面

加载更多

dockerfile 镜像构建(1)

通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下: [root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 . 运行镜像: [root@iZuf61quxhnlk9m2tkx16cZ de...

Canaan_
26分钟前
0
0
Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构,其结构体...

阿里云云栖社区
29分钟前
5
0
vue import 传入变量

在做动态添加component的时候,传入变量就会报错,出现以下错误信息: vue-router.esm.js?fe87:1921 Error: Cannot find module '@/components/index'. at eval (eval at ./src/components ......

朝如青丝暮成雪
31分钟前
0
0
Flutter开发 Dio拦截器实现token验证过期的功能

前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求,所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重...

EmilyWu
32分钟前
6
0
final Map可以修改内容,final 常量不能修改

1.final Map 可以put元素,但是不可以重新赋值 如: final Map map = new HashMap(); map = new HashMap();//不可以 因为栈中变量map引用地址不能修改 2.final str = “aa”; str = "bb";/......

qimh
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部