【问题标题】:ClassPathScanningCandidateComponentProvider.findCandidateComponents have wrong class nameClassPathScanningCandidateComponentProvider.findCandidateComponents 有错误的类名
【发布时间】:2016-05-09 22:44:34
【问题描述】:

我有一个 java 项目,其中包含一个名为 processor 的 Spring Boot 应用程序。该项目依赖于一个名为rules 的项目和一个名为service 的项目。每个项目都有相同的包模式 - my.com.package.
processorrules 项目都包含使用自定义注释 @Condition 注释的类。注解接口使用@Retention(RetentionPolicy.RUNTIME)注解。当我像这样从serviceprocessor 扫描带有@Condition 注释的类时

private ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(
            false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Condition.class));
        for (BeanDefinition bd : scanner.findCandidateComponents("my.com")) {
            try {
                Class<?> c = Class.forName(bd.getBeanClassName());
                Condition condition = c.getAnnotation(Condition.class);
                register(condition);
            } catch (ClassNotFoundException | IOException e) {
                logger.error(e.getLocalizedMessage());
            }
        }

processor 项目中使用@Condition 注释的类具有正确的类名(my.com.package.x.Class),但rules 项目中使用@Condition 注释的类具有不正确的完全限定类名(@ 987654339@),它只在项目中的 5 个类名中找到 2 个具有注释的类名。
如果我在扫描processorservice 时将scanner.findCandidateComponents 的参数更改为rules 项目(my.com.package.rules) 中的完整包路径,则扫描仪找不到任何候选人。如果我使用my.com.* 作为参数,它只会在processor 项目中找到候选人。
我在这里看到了一个类似的问题Using ClassPathScanningCandidateComponentProvider with multiple jar files?,解决方案是将类加载器传递给组件提供者。我尝试让类的类加载器进行扫描并将其传递给提供者,就像这样

scanner.setResourceLoader(new PathMatchingResourcePatternResolver(classLoader));

它并没有改变我的任何结果。

【问题讨论】:

    标签: java spring spring-boot annotations


    【解决方案1】:

    愚蠢的错误,问题是我在 pom 中为我的 processor 项目定义了错误版本的 rules 项目,因此它使用的是旧版本的代码。 不过这个

    Condition condition = c.getAnnotation(Condition.class);
    

    为从 jar 中取出的类返回 null,所以如果这段代码不是从我的工作区中的源代码运行,这让我有点担心。

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2015-12-01
      • 2014-12-16
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多