当前位置: 首页 > 知识库问答 >
问题:

NoSuchBean定义异常:没有可用的合格Bean类型:预计至少有1个Bean符合自动连线候选条件

夏飞掣
2023-03-14

我正在尝试将Spring 4. x. x迁移到Spring启动,它依赖于外部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包下,并在同一个包下添加了组件scan

下面是我的组件类,带有自动连线的依赖项

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

@Component
public class ComponentClassB {

    @Autowired
    private DependentClass depClass;
}

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

构建应用程序时,所有文件的html" target="_blank">编译都很好,构建成功生成。但是当我启动应用程序时,我收到以下错误

 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
}

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

共有3个答案

赫连昕
2023-03-14

在您当前的Spring上下文中没有定义DependentClass。DependentClass没有用bean (@Bean)进行注释。因此会发生nosuchbeandidefinitionexception。

@Bean
public class DependentClass extends ResourceClass<Map<String, Double>> {
            // Methods and logic
}
夏弘文
2023-03-14

按如下方式定义您的类:-

     @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();
   }

在自动连线类之后,您最终获得实例。

章绪
2023-03-14

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

并且没有必要将主类与< code>DependentClass放在同一个包中。

 类似资料: