aop:oriented aspect programming
功能:实现登陆拦截 在aop中计算每个方法的执行时间
导入jar包应该选择下面第二个1.9.4的。第一个会有问题。不生效

execution表达式:
@PointCut("execution(* jinsong.liang.controller..*.*(..))")
/**
第一个* : 所有返回类型
jinsong.liang.controller包路径
.. : 所有包和其子包
第二个* : 所有的java类
之后的 .* 所有的方法名的方法
(..) : 括号表示参数,表示任意参数类型
*/
具体实现:
@Component
@Aspect
@Log4j2
public class MyInterceptor {
@Pointcut("execution(* jinsong.liang.controller..*.*(..))")
public void log() {
}
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
log.info("方法执行前:");
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
log.info("登陆ip{}", request.getRemoteHost());
log.info("执行方法{}", request.getMethod());
log.info("class_method:{},{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
}
@After("log()")
public void doAfter(JoinPoint joinPoint) {
log.info("方法执行完毕!");
}
@Around("log()")
public Object doAround(ProceedingJoinPoint pjp) {
long startTime = System.currentTimeMillis();
Object proceed = null;
try {
proceed = pjp.proceed();
/**
* 设置登陆拦截 如果session里登陆信息过期 手动转发到/login
*/
// ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = requestAttributes.getRequest();
// User user = (User) request.getSession().getAttribute("user");
// if (user == null) {
// requestAttributes.getResponse().sendRedirect("/login");
// }
} catch (Throwable throwable) {
throwable.printStackTrace();
}
log.info("方法执行耗时{}ms", System.currentTimeMillis() - startTime);
return proceed;
}
}
另一种计算方法耗时:
@Component
@Aspect
@Log4j2
public class MyInterceptor {
private Long startTime;
@Pointcut("execution(* jinsong.liang.controller..*.*(..))")
public void log() {
}
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
log.info("方法执行前:");
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
log.info("登陆ip{}", request.getRemoteHost());
log.info("执行方法{}", request.getMethod());
log.info("class_method:{},{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
startTime = System.currentTimeMillis();
}
@After("log()")
public void doAfter(JoinPoint joinPoint) {
log.info("方法执行完毕!耗时{}", System.currentTimeMillis() - startTime);
}
}
1996

被折叠的 条评论
为什么被折叠?



