切面, 方法的执行前后,切入代码,
1,新建一个 aspect包,新建RequestAspect类,添加注解,写方法,
对Controller层的public 的任一类返回值的任一类的任意方法的任意参数。
获取logger,
定义切点,
定义方法前执行...(获取访问ip,获取访问路径,获取访问方式,
获取包名,类名,方法名,参数列表)
定义方法后执行...
定义返回值...
package com.cruise.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.cruise.entity.Student; @Aspect @Component public class RequestAspect { private Logger logger = Logger.getLogger(RequestAspect.class); @Pointcut("execution(public * com.cruise.controller.*.*(..))") public void log(){ } @Before("log()") public void doBefore(JoinPoint jointPoint){ logger.info("方法执行前..."); ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); logger.infof(request.getRemoteHost()); logger.infof( request.getRequestURI()); logger.infof(request.getMethod()); logger.infof(jointPoint.getSignature().getDeclaringTypeName()+"."+ jointPoint.getSignature().getName()); System.out.println(((Student)jointPoint.getArgs()[0]));} @After("log()") public void doAfter(JoinPoint jointPoint){ logger.info("方法执行后..."); } @AfterReturning(returning="object",pointcut="log()") public void doAfterReturning(Object object){ logger.info("方法的返回值:"+object); } } |
2,在Student实体中,加入toString方法,
@Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } |
3,查看日eclipse日志测试,