使用jersey 注解包扫描类PackageNamesScanner
Jersey 中自带一个包扫描,可以是包,或者具体类名 ,扫描的类型是自己定注解类型,实现功能更加大,可以是jar 包 可以是虚拟地址下的
Jersey 主要用来扫描Path Provider 类中同时包括以上的Annotation,使用Jersey 包扫描只需要三步。
String aa[] = new String[]{"com.jerweb"};
Scanner scanner = new PackageNamesScanner(checkNotNull(aa));
final AnnotationScannerListener asl = new PathProviderScannerListener();
scanner.scan(asl);
Set<Class<?>> sets= asl.getAnnotatedClasses();
1、包地址传入PackageNamesScanner
2、自定义的注解实现AnnotationScannerListener 的子类
3、scan
查看Jesery PathProviderScannerListener源码
public final class PathProviderScannerListener extends AnnotationScannerListener {
/**
* Create a scanning listener to check for Java classes in Java
* class files annotated with {@link Path} or {@link Provider}.
*
*/
public PathProviderScannerListener() {
super(Path.class, Provider.class);
}
/**
* Create a scanning listener to check for Java classes in Java
* class files annotated with {@link Path} or {@link Provider}.
*
* @param classloader the class loader to use to load Java classes that
* are annotated with any one of the annotations.
*/
public PathProviderScannerListener(ClassLoader classloader) {
super(classloader, Path.class, Provider.class);
}
}
很简单。自定义实现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);
}
}
测试以上代码
public static void main(String[] args)
{
String aa[] = new String[]{"com.jerweb"};
Scanner scanner = new PackageNamesScanner(checkNotNull(aa));
final AnnotationScannerListener asl = new PathProviderScannerListener();
final AnnotationScannerListener asl1 = new ErrInfoScannerListener();
scanner.scan(asl1);
scanner.scan(asl);
Set<Class<?>> sets1 = asl1.getAnnotatedClasses();
Set<Class<?>> sets= asl.getAnnotatedClasses(); }
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>
使用jersey 注解包扫描类PackageNamesScanner的更多相关文章
- Java 扫描实现 Ioc 动态注入,过滤器根据访问url调用自定义注解标记的类及其方法
扫描实现 Ioc 动态注入 参考: http://www.private-blog.com/2017/11/16/java-%e6%89%ab%e6%8f%8f%e5%ae%9e%e7%8e%b0-i ...
- spring的compentScan注解扫描类机制
1主要通过ConfigurationClassParser类的doProcessConfigurationClass(ConfigurationClass configClass, SourceCla ...
- spring 排除指定的类或者包扫描
<!-- 排除Controller注解的扫描 --> <context:component-scan base-package="exampleBean"> ...
- 记录一下SpringMVC扫描注解包的配置
最近做了一个小项目,使用Spring4+SpringMVC+Hibernate5 但是整合完毕了之后,在页面上请求添加记录的时候发现无法开启事务,报错的信息如下: org.springframewor ...
- Spring IoC 源码分析 (基于注解) 之 包扫描
在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫 ...
- Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
阅前提醒 全文较长,建议沉下心来慢慢阅读,最好是打开Idea,点开Spring源码,跟着下文一步一步阅读,更加便于理解.由于笔者水平优先,编写时间仓促,文中难免会出现一些错误或者不准确的地方,恳请各位 ...
- 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持多包扫描(六)
实现功能 1.我们看到@ComponentScan注解一个开始定义就是需要支持,扫描多个包,将多个包的类名获取到.现在就实现这个功能. 实现思路 根据传入的字符串数组,获得多个包下的类全限制名. 实现 ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- SpingMVC的<context:component-scan>包扫描踩坑记录
公司项目配置的Spring项目的包扫描有点问题,出现了一个被Spring容器管理的Bean被创建了2次的现象.在此记录下解决的过程,方便后续查阅. 改动前: 容器启动监听器中会扫描全部包,创建 ...
随机推荐
- cas4.2.7与shiro进行整合
准备工作 cas单点登录开始前准备,请参考cas4.2.7实现单点登录. 与shiro进行整合 注:准备工作的基础上,对cas客户端进行如下改进. 引入相关jar包 shiro-cas-1.2.6.j ...
- 读《深入理解Java虚拟机》
Java虚拟机运行时数据区 对象的创建 Java创建对象,在语言层面上使用new关键字.虚拟机遇到new关键字时,会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的 ...
- 网络安全——一图看懂HTTPS建立过程
关于网络安全加密的介绍可以看之前文章: 1. 网络安全--数据的加密与签名,RSA介绍 2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512) 3. When I ...
- java中的一些规则(菜鸟的课堂笔记)
ls 查看目录下文件 java规则 代码都定义在类中,用class定义 禁止一个源文件写两个类: 一个源文件中,只能有一个类文件是pubic: 一个源文件中如果有多个类,编译完之后会产生多个class ...
- 移动平台Unity3D 应用性能优化
WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...
- cp的用法
1.cp的功能 拷贝一个或多个文件(或目录)到目的地 2.例子 1)一次拷贝多个源文件到目的地#cp /mnt/hgfs/DOC/{1,2,3,4,5}.txt /root/ldj 2)只拷贝链接文件 ...
- WPF中带水印的Textbox
很多时候我们都希望通过水印来告诉用户这里该填什么样格式的数据,那么我们就希望有这样的一个控件. 为了方便起见,先定义一个依赖属性专门来存放水印中显示的字符串. public sealed class ...
- MVC启动windows身份验证时初次访问特别慢
最近做了一个关于MVC的项目,刚开始往服务器上面部署时,没有开启windows身份验证,等开发基本收尾时候,将验证开启时,第一次打开的时候需要将近15s的访问时间,别说用户受不了,自己都受不了了. 对 ...
- DW3 消息推送
1.新建项目 参见:http://www.cnblogs.com/yysbolg/p/yys_Blogs_java.html 2.添加jar包: commons-fileupload-1.2.jar ...
- [HNOI2007]紧急疏散EVACUATE (湖南2007年省选)
[HNOI2007]紧急疏散EVACUATE 题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面 ...