4

我正在尝试将 Spring 4.xx 迁移到 Spring boot,它依赖于外部 spring 2.5 jar 中的一个类。我已经进行了所有自动装配更改,下面是我的应用程序类

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.xyz" })
public class MainApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(MainApiApplication.class, args);
    }
}

外部 jar 中的依赖类存在于 com.xyz.abc 包下,因此我将主应用程序类放在 com.xyz 包下,并在同一包下添加了组件扫描

这是我的组件类,具有自动装配的依赖项

@Component
public class ComponentClassA {
    @Autowired
    private ComponentClassB currencyService;
}

@Component
public class ComponentClassB {

    @Autowired
    private DependentClass depClass;
}

DependentClass 是我在本地附加并构建的外部依赖 jar 中存在的类

在构建应用程序时,所有文件的编译都很好,并且构建成功。但是当我启动应用程序时,出现以下错误

 Field DependentClass in com.xyz.ComponentClassB required a bean of type 'com.xyz.common.util.DependentClass' that could not be found.

我不明白为什么找不到来自外部 jar 的类,因为我已经为包添加了组件扫描

DependentClass 的定义如下

public class DependentClass extends ResourceClass<Map<String, Double>> {
            // Methods and logic
}

是因为 DependentClass 正在扩展一个类吗?有人可以帮我找出错误的原因吗?

4

3 回答 3

4

DependentClass上面没有@Component注释。因此,您需要DependentClass通过 XML 或 Java 配置创建自己的 bean。

并且没有必要将主类与DependentClass.

于 2018-07-17T15:24:35.423 回答
1

如下定义您的班级:-

     @Component("depClass") 
     public class DependentClass extends ResourceClass<Map<String, Double>> {
            // Methods and logic
      }

如果此包位于您的 ScanBasePackages 中,则组件将其注册到您的上下文定义中,并且组件注释中的depClass定义了您的 bean 的名称。

您也可以通过以下方式调用它:-

    @Autowired
    @Qualifier("depClass")
    private DependentClass dependentClass;

如果该类在您的外部类中定义,则使用 @Bean 注释,例如:-

 @Bean
   public DependentClass depClass(){
    return new DependentClass();
   }

之后自动装配类,你最终得到了实例。

于 2018-07-18T06:46:29.193 回答
0

DependentClass 未在您当前的 Spring Context 中定义。DependentClass 未使用 bean (@Bean) 进行注释。因此不会发生nosuchbeandefinitionexception

@Bean
public class DependentClass extends ResourceClass<Map<String, Double>> {
            // Methods and logic
}
于 2018-07-17T15:34:09.983 回答