SpringBoot提供了强大AOP支持 AOP切面主要是切方法,我们一般搞一些日志分析和事务操作,要用到切面,类似拦截器;
@Aspect注解是切面注解类
@Pointcut切点定义
@Before是方法执行前调用
@After是方法执行后调用
@AfterReturning方法执行返回值调用
在( 七)的基础上添加一个日志跟踪
定义一个切面类!
package com.hlx.aspect;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.jboss.logging.Logger;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.hlx.entity.Student;
/**
* AOP切面
*
* @author Administrator
*
*/
@Aspect
@Component
public class MyAspect {
// 日志
private Logger logger = Logger.getLogger(MyAspect.class);
// 切入点
@Pointcut("execution (* com.hlx.controll.*.*(..))")
public void cut() {
}
/**
* 业务方法之前执行
*
* @param jp
*/
@Before("cut()")
public void before(JoinPoint jp) {
logger.info("业务方法之前.....");
//获得请求属性对象.
ServletRequestAttributes sc=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//获得请求对象
HttpServletRequest request=sc.getRequest();
//获得请求的url,port,ip,method等等.
logger.info("url==>"+request.getRequestURI());
logger.info("port==>"+request.getServerPort());
logger.info("ip==>"+request.getRemoteHost());
logger.info("method==>"+request.getMethod());
logger.info("class==>"+jp.getSignature().getDeclaringTypeName()+"."+jp.getSignature().getName());
logger.info("args==>"+(Student)jp.getArgs()[0]);
}
/**
* 业务方法之后执行
*
* @param jp
*/
@After("cut()")
public void after(JoinPoint jp) {
logger.info("业务方法之后.....");
}
/**
* 执行方法后返回值
*
* @param result
*/
@AfterReturning(pointcut = "cut()", returning = "result")
public void afterReturning(Object result) {
logger.info("执行返回值:" + result);
}
}
效果:
控制台查看执行。。。