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()); } }