资讯专栏INFORMATION COLUMN

自定义注解打jar包上传到maven私服

scwang90 / 2985人阅读

摘要:最近工作,有些功能在不同的模块总是会重复的应用,于是想把特定的功能做成一个注解,打成包,放到自己的私服上面。

最近工作,有些功能在不同的模块总是会重复的应用,于是想把特定的功能做成一个注解,打成jar包,放到自己的maven私服上面。这里做一下记录(springboot)

一. 自定义注解

建一个注解接口,加上对应的注解信息

   @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管理

/**
 * 注册自定义的拦截器
 */
@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文件
若没有,则新建此文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.iamcrawler.www.crawler_annotation.config.InterceptorRegister

5.打jar包

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69580.html

相关文章

  • Maven就是这么简单

    摘要:软件项目的管理就会变得简单很多。比如说的驱动程序,,在是获取不到的,就需要手工上传到里是仓库组,在里没有这个概念,是特有的。 什么是Maven Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中.. Maven是一款跨平台的项目...

    leonardofed 评论0 收藏0
  • Maven 实战

    摘要:的主要思想是约定优于配置。强烈建议遵循以上规范,避免不必要的麻烦。依赖传递依赖范围除了控制,还会对依赖传递产生影响。此外还提供了和来进一步管理依赖,分别称为可选依赖和排除依赖。 showImg(https://segmentfault.com/img/remote/1460000012363876?w=1240&h=698); Maven 是跨平台的项目管理工具,主要服务于基于Java...

    twohappy 评论0 收藏0
  • hudson +gradle+git+maven(非必选)持续集成一 动化

    摘要:持续集成正是针对这一类问题的一种软件开发实践。持续集成的原则业界普遍认同的持续集成的原则包括需要版本控制软件保障团队成员提交的代码不会导致集成失败。 第一集 hudson+gradle+git+maven(非必选)持续集成编译,打包,发布到仓库集成 前言 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的...

    xietao3 评论0 收藏0

发表评论

0条评论

scwang90

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<