package cn.nin.aop.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
@Aspect
public class LogAspect {
private Logger logger= LoggerFactory.getLogger("cn.nin.aop.aspect.LogAspect");
// @Before(value = "execution(* cn.nin.aop.controller.GoodsController.*(..))")
// @Before("@within(cn.nin.aop.aspect.Inter)")
// @Before("@annotation(cn.nin.aop.aspect.Inter)")
// @Before("@within(cn.nin.aop.aspect.Inter) && @annotation(cn.nin.aop.aspect.Inter)")
@Before("@within(cn.nin.aop.aspect.Inter) || @annotation(cn.nin.aop.aspect.Inter)")
public void doBefore(JoinPoint joinPoint){
logger.info("in before advice");
logger.info(joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
logger.info(Arrays.toString(joinPoint.getArgs()));
}
}
@Before(value = "execution(* cn.nin.aop.controller.*.*(..))")
拦截cn.nin.aop.controller包下的所有类型所有方法;
@Before(value = "execution(* cn.nin.aop.controller..*.*(..))")
拦截cn.nin.aop.controller包和子包下的所有类型所有方法;
@Before(value = "execution(* cn.nin.aop.controller.GoodsController.*(..))")
拦截cn.nin.aop.controller包下GoodsControllerle类型下的所有方法;
@Before("@annotation(cn.nin.aop.aspect.Inter)")
方法上标注了Inter注解就会拦截;
@Before("@annotation(cn.nin.aop.aspect.Inter)")
方法上标注了Inter注解就会拦截;
@Before("@within(cn.nin.aop.aspect.Inter)")
类上标注了Inter注解就会拦截;
@Before("@within(cn.nin.aop.aspect.Inter) && @annotation(cn.nin.aop.aspect.Inter)")
且的关系,类和方法上同时标注这个注解才会拦截;
@Before("@within(cn.nin.aop.aspect.Inter) || @annotation(cn.nin.aop.aspect.Inter)")
或的关系,类或者方法上有标注这个注解就会拦截,类上标注拦截所有方法,方法上 标注类上没有只拦截标注的方法。