AOP原理网上有很多, 只记录一下笔记代码
@Aspect
@Component //引入到spring容器中
public class HttpAspect {
public static final Logger log = LoggerFactory.getLogger(HttpAspect.class);
// .. 表示不管里面有什么方法都会被拦截 方法执行之前就已经执行了
@Pointcut("execution(public * com.controller.xxx.*(..))")
public void log() {
System.out.println("1111");
}
@Before("log()")
public void before(JoinPoint joinPoint) {
System.out.println("111111111111");
// 获取http请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); //javax.servlet.http.HttpServletRequest
// 获取url
log.info("url={}", request.getRequestURL());
// 获取Method
log.info("Method={}", request.getMethod());
// 获取ip
log.info("ip={}",request.getRemoteAddr());
// 获取类方法
log.info("ip={}",joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
// 获取参数
log.info("ip={}",joinPoint.getArgs());
}
//@After("execution(public * com.imocc.controller.xxx.*(..))") // 又是重复的代码
@After("log()") // 可以调用统一的方法
public void after() {
System.out.println("22222222222222");
}
// 获取返回给前台的信息
@AfterReturning(returning = "object", pointcut = "log()")
public void doAfterReturning(Object object) {
log.info("response={}", object.toString());
}
}