Java:如何在不知道软件包名称的情况下扫描类



我正在编程基于类注释的功能的API。API将被导入,因此它不了解客户端的软件包。因此,问题是:如何在不知道软件包名称的情况下扫描类?

我找到了这些方法:

Package.getPackages()

,但它仅返回包装的子集。

ClassPathScanningCandidateComponentProvider.findCandidateComponents(basePackageName)

,但不接受通配符,例如*.


编辑答案@rakesh

@Component
public class Application {
    @Autowired
    public ApplicationContext appContext;
    public static void main(String[] args) {
        Application a = new Application();
        String[] beanNames=a.appContext.getBeanNamesForAnnotation(Run.class);
        for (String beanName : beanNames) {
            System.out.println(beanName);
            Object bean = a.appContext.getBean(beanName);
            Class<? extends Object> class1 = bean.getClass();
            System.out.println(class1);
        }
    }
}

说您有一个自定义注释@CustomAnnotation,并且您已经注释了类似于此的A

@CustomAnnotation
@Component
public class A{
 ...
}

现在,如果您注入应用程序上下文,您可以获得这样的类

@Autowired
ApplicationContext appContext;
.
.
.
someMethod(){
  string[] beanNames=appContext.getBeanNamesForAnnotation(CustomAnnotation.class);
   for (val beanName : beanNames) {
      Object bean = appContext.getBean(beanName);
      Class<? extends Object> class1 = bean.getClass();
   }
}

相关内容

  • 没有找到相关文章

最新更新