【问题标题】:Reflections - Get package classes in order of @Order annotation反射 - 按 @Order 注释的顺序获取包类
【发布时间】:2020-09-27 12:57:30
【问题描述】:

我目前正在像这样遍历包中的类:

for (var entityClass : new Reflections("com.something.someotherthing").getSubTypesOf(Entity.class))
{
    //Do stuff
}

我为每个类添加了一个@Order 注释,我希望这个循环按照这些注释的顺序遍历包。怎么办?

【问题讨论】:

  • 这个@Order注解是从哪里来的?
  • org.springframework.core.annotation.Order,它实际上只是一个带有 int 参数的基本注释,表示我希望遍历包的顺序
  • Reflections 和 Spring 是两个不相关的库。 Spring 提供了一个AnnotationAwareOrderComparator。使用它对 getSubTypesOf 返回的任何内容进行排序。
  • 我会调查的,谢谢!

标签: java reflection annotations package


【解决方案1】:

我最终按照建议使用AnnotationAwareOrderComparator,并将这个逻辑提取到一个实用方法中,如下所示:

public static ArrayList<Class<? extends Entity>> getOrderedClassList(String packageName)
{
    var entityClasses = new ArrayList<Class<? extends Entity>>(
        new Reflections(packageName).getSubTypesOf(Entity.class));

    AnnotationAwareOrderComparator.sort(entityClasses);

    return entityClasses;
}

【讨论】:

    猜你喜欢
    • 2014-04-13
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多