AOP:
最常用来身份校验、打日志、
也可以写xml里,但是建议写在java里
@Aspect
@Component
@Before:执行前
@Around:执行前,执行后
同时匹配两个,||
执行某个函数前后、做一些事
// 会被注册成切面,这样方法才会在事件发生的时候执行
@Aspect
// 自动注册成 spring bean,这样 spring 就能认得出这个类
@Component
// Aspect 切面:注册事件,在某类事情发生的时候调用
public class PermissionAspect {
private UserService userService;
private TopicService topicService;
private HttpServletRequest request;
public PermissionAspect(UserService service, TopicService topicService, HttpServletRequest request) {
Utility.log("PermissionAspect 注入需要的依赖", request, service);
this.request = request;
this.userService = service;
this.topicService = topicService;
}
// @Before("execution(* kybmig.ssm.controller.TodoController.*(..))")
// public void matchSingle() {
// Utility.log("最简单的单方法匹配 %s", request.getRequestURI());
// }
@Around("execution(* kybmig.ssm.controller.TodoController.index(..)) || execution(* kybmig.ssm.controller.TodoController.add(..))")
public ModelAndView matchSingle(ProceedingJoinPoint joint) throws Throwable {
Utility.log("路由函数之前执行 %s", request.getRequestURI());
// 这一句就是在执行路由函数
ModelAndView result = (ModelAndView) joint.proceed();
Utility.log("路由函数之后执行 %s", request.getRequestURI());
return result;
}
@Around("execution(* kybmig.ssm.controller.TopicController.*(..)) ||execution(* kybmig.ssm.controller.WeiboController.*(..)) ")
public ModelAndView loginRequired(ProceedingJoinPoint joint) throws Thro