@Pointcut uses @annotation with parameters

package com.noob.annotation;
/**
 * 操作日志
 *
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OpLog {

	/**
	 * 
	 * 操作类型
	 */
	int opModule();

	/**
	 * 
	 * 是否批量 
	 */
	String batch();

	/**
	 * 
	 * 操作来源(页面+操作)
	 */
	String source();

}
package com.noob.aspectj;

import lombok.extern.slf4j.Slf4j;

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 com.noob.annotation.OpLog;

/**
 * 操作日志的保存
 * @author xiongwenjun 2018年2月27日 下午4:24:25
 */
@Aspect
@Slf4j
public class OpLogAspectj {
	
	@Pointcut(value = "@annotation(com.noob.annotation.OpLog)")  
    public void methodPointcut(){
	    
    }
	
    @Around(value= "methodPointcut()&& @annotation(opLog)" , argNames="opLog")
    public Object around(ProceedingJoinPoint point, OpLog opLog) throws Throwable{
        Object obj = null;
        Object[] args = point.getArgs();
        
        try {
            obj = point.proceed(args);
        } catch (Throwable e) {
            log.error("【操作日志的保存】方法执行异常", e);
        }
        long endTime = System.currentTimeMillis();
        MethodSignature signature = (MethodSignature) point.getSignature();
        String methodName = signature.getDeclaringTypeName() + "." + signature.getName();
        return obj;
    }
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325238472&siteId=291194637