zoukankan      html  css  js  c++  java
  • 使用jersey 注解包扫描类PackageNamesScanner

    Jersey 中自带一个包扫描,可以是包,或者具体类名 ,扫描的类型是自己定注解类型,实现功能更加大,可以是jar 包 可以是虚拟地址下的

    Jersey 主要用来扫描Path Provider 类中同时包括以上的Annotation,使用Jersey 包扫描只需要三步。

    1 String aa[] = new String[]{"com.jerweb"};
    2 Scanner scanner =  new PackageNamesScanner(checkNotNull(aa));
    3 final AnnotationScannerListener asl = new PathProviderScannerListener();
    4 scanner.scan(asl);
    5 Set<Class<?>> sets=  asl.getAnnotatedClasses();

    1、包地址传入PackageNamesScanner

    2、自定义的注解实现AnnotationScannerListener 的子类

    3、scan

    查看Jesery PathProviderScannerListener源码

     1 public final class PathProviderScannerListener extends AnnotationScannerListener {
     2 
     3     /**
     4      * Create a scanning listener to check for Java classes in Java
     5      * class files annotated with {@link Path} or {@link Provider}.
     6      *
     7      */
     8     public PathProviderScannerListener() {
     9         super(Path.class, Provider.class);
    10     }
    11 
    12     /**
    13      * Create a scanning listener to check for Java classes in Java
    14      * class files annotated with {@link Path} or {@link Provider}.
    15      *
    16      * @param classloader the class loader to use to load Java classes that
    17      *        are annotated with any one of the annotations.
    18      */
    19     public PathProviderScannerListener(ClassLoader classloader) {
    20         super(classloader, Path.class, Provider.class);
    21     }
    22 }
    View Code

    很简单。自定义实现AnnotationScannerListener 的子类,就可以用来扫描自定义注解

    @Inherited
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Err {
        String value();
    }
    @Inherited
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Info {
        String value();
    }
    public class ErrInfoScannerListener extends AnnotationScannerListener {
    
        public ErrInfoScannerListener() {
            super(Err.class, Info.class);
        }
    
        /**
         * Create a scanning listener to check for Java classes in Java
         * class files annotated with {@link Err} or {@link Info}.
         *
         * @param classloader the class loader to use to load Java classes that
         *        are annotated with any one of the annotations.
         */
        public ErrInfoScannerListener(ClassLoader classloader) {
            super(classloader, Err.class, Info.class);
        }
    }

    测试以上代码

     1 public static void main(String[] args)
     2     {
     3         String aa[] = new String[]{"com.jerweb"};
     4         Scanner scanner =  new PackageNamesScanner(checkNotNull(aa));
     5         final AnnotationScannerListener asl = new PathProviderScannerListener();
     6         final AnnotationScannerListener asl1 = new ErrInfoScannerListener();
     7         scanner.scan(asl1);
     8         scanner.scan(asl);
     9         Set<Class<?>> sets1 = asl1.getAnnotatedClasses();
    10         Set<Class<?>> sets=  asl.getAnnotatedClasses();
    11 
    12     }

    Maven 引用包

             <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
                <version>1.18.1</version>
            </dependency>
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-server</artifactId>
                <version>1.18.1</version>
            </dependency>
  • 相关阅读:
    【Nginx】ngx_event_core_module模块
    ELMAH--Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components 77 out of 90 rated th
    nyist oj 214 单调递增子序列(二) (动态规划经典)
    java 入门书籍(java7)
    ARCGIS将WGS84坐标投影到高斯平面
    【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码
    【springboot】【socket】spring boot整合socket,实现服务器端两种消息推送
    【linux】linux修改open file 大小
    【docker】docker限制日志文件大小的方法+查看日志文件的方法
    【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
  • 原文地址:https://www.cnblogs.com/shouhongxiao/p/5799913.html
Copyright © 2011-2022 走看看