Aspect切面的使用实例

1、导入切面库spring

以maven工程为例,除了springmvc基础的库,须要导入切面库,本例aspectj为例。mvc

    <properties>
        <aspectj.version>1.9.3</aspectj.version>
    </properties>
  ......
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency>

2、编写基础植入的类,以打印功能为例。maven

不得不歌颂一下注解和Spring,引入和配置大大的简化了。url

@Aspect
@Slf4j
@Component
public class LogAspectUtil {
    @Pointcut("execution(public * com.sanro.controller..*.*(..))")//配置须要植入打印的包路径
    public void controllerLog() {
    }

    @Before("controllerLog()")
    public void logBefore(JoinPoint joinPoint) {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
        log.info("full url = " + request.getRequestURL().toString());
        log.info("http method = " + request.getMethod());
        log.info("class method = " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
    }

    @After("controllerLog()")
    public void logAfter(JoinPoint joinPoint) {
        log.info("controller execute finished... ");
    }

}

3、不劳而获spa

如今com.sanro.controller目录下的全部controller类都能1. 在请求进入的时候自动打印请求的url,method等想要的信息和处理动做;2. 在请求处理结束的时候都能打印时间或者增长想要的处理动做。
相关文章
相关标签/搜索