最近工做,有些功能在不一樣的模塊老是會重複的應用,因而想把特定的功能作成一個註解,打成jar包,放到本身的maven私服上面。這裏作一下記錄(springboot)spring
一. 自定義註解springboot
建一個註解接口,加上對應的註解信息maven
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface CrawlerTimed { }
public class CrawlerInterceptor extends HandlerInterceptorAdapter { private Logger logger = LoggerFactory.getLogger(CrawlerInterceptor.class); /** * 調用以前 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod handlerMethod = (HandlerMethod)handler; Method method = handlerMethod.getMethod(); //獲取此方法上的指定註解 CrawlerTimed crawlerTimed = method.getAnnotation(CrawlerTimed.class); //判斷當前註解是否存在 if(crawlerTimed != null){ long millis = System.currentTimeMillis(); request.setAttribute("startTime",millis); logger.info("進入方法:"+method.getName()+" 的時間是:"+millis); } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerMethod handlerMethod = (HandlerMethod)handler; Method method = handlerMethod.getMethod(); //獲取此方法上的指定註解 CrawlerTimed crawlerTimed = method.getAnnotation(CrawlerTimed.class); //若是存在這個註解 if(crawlerTimed!=null){ long endTime = System.currentTimeMillis(); Long startTime =(Long) request.getAttribute("startTime"); long periodTime = endTime - startTime; logger.info("離開方法:"+method.getName()+" 的時間是:"+endTime); logger.info("方法:"+method.getName()+" 總計耗時:"+periodTime +"ms"); } } }
3 註冊此攔截器,否則不會被spring管理ide
/** * 註冊自定義的攔截器 */ @Configuration public class InterceptorRegister extends WebMvcConfigurerAdapter { //建立攔截器bean @Bean public CrawlerInterceptor crawlerInterceptor(){ return new CrawlerInterceptor(); } //蔣攔截器bean註冊到spring @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(crawlerInterceptor()); } }
4.resources/META-INF/spring.factories文件
若沒有,則新建此文件post
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\cn.iamcrawler.www.crawler_annotation.config.InterceptorRegister
5.打jar包code