JAVA-TUTORIAL JAVA-TUTORIAL
首页
JavaEE
  • Java 构建
  • Java IDE
  • Java 监控诊断
  • Java IO 工具
  • JavaBean 工具
  • Java 模板引擎
  • Java 测试工具
Java框架
Java中间件
  • Java 教程 📚 (opens new window)
  • JavaCore 教程 📚 (opens new window)
GitHub (opens new window)
首页
JavaEE
  • Java 构建
  • Java IDE
  • Java 监控诊断
  • Java IO 工具
  • JavaBean 工具
  • Java 模板引擎
  • Java 测试工具
Java框架
Java中间件
  • Java 教程 📚 (opens new window)
  • JavaCore 教程 📚 (opens new window)
GitHub (opens new window)
  • JavaEE

  • 软件

  • 工具

    • IO

    • JavaBean

    • 模板引擎

    • 测试

    • 其他

      • javalib-log
      • javalib-util
      • Reflections 快速入门
        • 使用
        • ReflectionUtils
      • JavaMail 快速入门
      • Jsoup 快速入门
      • Thumbnailator 快速入门
      • ZXing 快速入门
  • 框架

  • 中间件

  • Java
  • 工具
  • 其他
dunwu
2022-02-17
目录

Reflections 快速入门

# Reflections 快速入门

引入 pom

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.11</version>
</dependency>

典型应用

Reflections reflections = new Reflections("my.project");
Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class);
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(SomeAnnotation.class);

# 使用

基本上,使用 Reflections 首先使用 urls 和 scanners 对其进行实例化

//scan urls that contain 'my.package', include inputs starting with 'my.package', use the default scanners
Reflections reflections = new Reflections("my.package");

//or using ConfigurationBuilder
new Reflections(new ConfigurationBuilder()
     .setUrls(ClasspathHelper.forPackage("my.project.prefix"))
     .setScanners(new SubTypesScanner(),
                  new TypeAnnotationsScanner().filterResultsBy(optionalFilter), ...),
     .filterInputsBy(new FilterBuilder().includePackage("my.project.prefix"))
     ...);

然后,使用方便的查询方法

// 子类型扫描
Set<Class<? extends Module>> modules =
    reflections.getSubTypesOf(com.google.inject.Module.class);
// 类型注解扫描
Set<Class<?>> singletons =
    reflections.getTypesAnnotatedWith(javax.inject.Singleton.class);
// 资源扫描
Set<String> properties =
    reflections.getResources(Pattern.compile(".*\\.properties"));
// 方法注解扫描
Set<Method> resources =
    reflections.getMethodsAnnotatedWith(javax.ws.rs.Path.class);
Set<Constructor> injectables =
    reflections.getConstructorsAnnotatedWith(javax.inject.Inject.class);
// 字段注解扫描
Set<Field> ids =
    reflections.getFieldsAnnotatedWith(javax.persistence.Id.class);
// 方法参数扫描
Set<Method> someMethods =
    reflections.getMethodsMatchParams(long.class, int.class);
Set<Method> voidMethods =
    reflections.getMethodsReturn(void.class);
Set<Method> pathParamMethods =
    reflections.getMethodsWithAnyParamAnnotated(PathParam.class);
// 方法参数名扫描
List<String> parameterNames =
    reflections.getMethodParamNames(Method.class)
// 方法使用扫描
Set<Member> usages =
    reflections.getMethodUsages(Method.class)

说明:

  • 如果未配置扫描程序,则将使用默认值 - SubTypesScanner 和 TypeAnnotationsScanner。
  • 还可以配置类加载器,它将用于从名称中解析运行时类。
  • Reflection 默认情况下会扩展超类型。 这解决了传输 URL 不被扫描的一些问题。

# ReflectionUtils

import static org.reflections.ReflectionUtils.*;

Set<Method> getters = getAllMethods(someClass,
  withModifier(Modifier.PUBLIC), withPrefix("get"), withParametersCount(0));

//or
Set<Method> listMethodsFromCollectionToBoolean =
  getAllMethods(List.class,
    withParametersAssignableTo(Collection.class), withReturnType(boolean.class));

Set<Field> fields = getAllFields(SomeClass.class, withAnnotation(annotation), withTypeAssignableTo(type));
📝 帮助改善此页面! (opens new window)
#Java#反射#Reflections
上次更新: 2024/12/31, 08:02:35
javalib-util
JavaMail 快速入门

← javalib-util JavaMail 快速入门→

最近更新
01
Spring Data 综合
02-08
02
Spring 访问 Redis
01-31
03
Spring EL 表达式
01-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 钝悟(dunwu) | CC-BY-SA-4.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×