轉(zhuǎn)自:https://blog.csdn.net/huxiaodong1994/article/details/82991828
@RestController@RequestMapping('/user')public class UserController { @GetMapping('/{id:\\d }') @JsonView(User.UserDetailView.class) public User getInfo(@PathVariable String id) { User user = new User(); user.setUsername('tom'); return user; }}
編寫方法的過(guò)濾器:
@Componentpublic class TimeFilter implements Filter { /* (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println('time filter init'); } /* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println('time filter start'); long start = new Date().getTime(); chain.doFilter(request, response); System.out.println('time filter:' (new Date().getTime() - start)); System.out.println('time filter finish'); } /* (non-Javadoc) * @see javax.servlet.Filter#destroy() */ @Override public void destroy() { System.out.println('time filter destroy'); }}
編寫方法的攔截器:
@Componentpublic class TimeInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println('preHandle'); System.out.println(((HandlerMethod)handler).getBean().getClass().getName()); System.out.println(((HandlerMethod)handler).getMethod().getName()); request.setAttribute('startTime', new Date().getTime()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println('postHandle'); Long start = (Long)request.getAttribute('startTime'); System.out.println('time interceptor 耗時(shí):' (new Date().getTime() - start)); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println('afterCompletion'); Long start = (Long) request.getAttribute('startTime'); System.out.println('time interceptor 耗時(shí):' (new Date().getTime() - start)); System.out.println('ex is ' ex); } }
編寫方法的切面:
@Aspect@Componentpublic class TimeAspect { @Before('execution(public * com.hu.web.controller.UserController.*(..))') public Object handlerControllerMethod() throws Throwable { System.out.println('time aspect start'); return new Object(); }}
運(yùn)行結(jié)果:1、當(dāng)攔截器中preHandle的方法返回為true時(shí):`
time filter startpreHandlecom.hu.web.controller.UserController$$EnhancerBySpringCGLIB$$b0bb0dcfgetInfotime aspect startpostHandletime interceptor 耗時(shí):76afterCompletiontime interceptor 耗時(shí):76ex is nulltime filter:92time filter finishtime filter starttime filter:46time filter finish
2、當(dāng)攔截器中preHandle的方法返回為false時(shí):
time filter startpreHandlecom.hu.web.controller.UserController$$EnhancerBySpringCGLIB$$b0bb0dcfgetInfotime filter:12time filter finishtime filter starttime filter:23time filter finish
聯(lián)系客服