应用Spring的过程中,最大最核心的必须要数AOP啦,比如,向同一水平面上的相同业务操作,我们就可以使用AOP来完成,快速方便,简单安全;如拦截,验证,或者SpringMVC中的事物AOP配置等等..,
1: 首先引入jar包
<dependency><!-- AOP面向切面 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2: 编写切面类
package com.gy.demo.common.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* Description: HTTP请求拦截
* 面向切面: AOP
* 注解: @Component : 将类注入到Spring容器中;
* 注解: @Aspect : 声明AOP处理
* 注解: @Pointcut : 声明拦截地址
* 注解: @Before : 在Value中的方法 之前 都进行拦截
* 注解: @After : 在Value中的方法 之后 都进行拦截
* 注解: @AfterReturning : 在Value中的方法 之后 都进行拦截,并获取返回的数据
* @author geYang
* @since 2017/12/28
**/
@Aspect
@Component
public class HttpAspect {
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
@Pointcut("execution(public * com.gy.demo.controller.*.*.*(..))")
public void logger(){}
@Before("logger()")
public void doBefore(JoinPoint joinPoint){
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
//ip
logger.info("user_ip={}",request.getRemoteAddr());
//url
logger.info("request_url={}",request.getRequestURL());
//method
logger.info("request_method={}",request.getMethod());
//类方法
logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
//参数
logger.info("request_param={}",joinPoint.getArgs());
}
@After("logger()")
public void doAfter(){
logger.info("出来了");
}
@AfterReturning(returning = "object",pointcut = "logger()")
public void doAfterReturning(Object object){
logger.info("response={}",object==null?null:object.toString());
}
}
启动项目,访问Controller就会看到拦截信息;
参考: https://www.imooc.com/video/14341
项目源码: https://gitee.com/ge.yang/SpringBoot