Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoSuchBeanDefinitionException:没有可用类型的符合条件的bean:至少需要1个符合autowire候选条件的bean_Java_Spring_Spring Boot_Autowired_External Dependencies - Fatal编程技术网

Java NoSuchBeanDefinitionException:没有可用类型的符合条件的bean:至少需要1个符合autowire候选条件的bean

Java NoSuchBeanDefinitionException:没有可用类型的符合条件的bean:至少需要1个符合autowire候选条件的bean,java,spring,spring-boot,autowired,external-dependencies,Java,Spring,Spring Boot,Autowired,External Dependencies,我正在尝试将Spring4.x.x迁移到SpringBoot,它依赖于外部Spring2.5JAR中的一个类。我已经做了所有的自动布线更改,下面是我的应用程序类 @SpringBootApplication @EnableAutoConfiguration @ComponentScan(basePackages = { "com.xyz" }) public class MainApiApplication { public static void main(String[] args

我正在尝试将Spring4.x.x迁移到SpringBoot,它依赖于外部Spring2.5JAR中的一个类。我已经做了所有的自动布线更改,下面是我的应用程序类

@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扩展了ResourceClass{
//方法与逻辑
}

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

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


而且不必将主类放在与当前Spring上下文中未定义的
DependentClass

相同的包下。DependentClass未使用bean(@bean)进行注释。因此不会发生任何SochBeanDefinitionException

@Bean
public class DependentClass extends ResourceClass<Map<String, Double>> {
            // Methods and logic
}
@Bean
公共类DependentClass扩展了ResourceClass{
//方法与逻辑
}

根据以下内容定义您的课程:-

     @Component("depClass") 
     public class DependentClass extends ResourceClass<Map<String, Double>> {
            // Methods and logic
      }
如果该类在外部类中定义,则使用@Bean注释,如:-

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

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

您的
DependentClass
是否作为Bean存在于Spring上下文中(xml或
@Bean
注释)?不,它不存在。它只是jarIt的一部分,应该是一个bean,然后只有自动布线才能工作。最好在您的@Configuration文件中创建一个bean,然后进行自动连接。如果您不/不能修改.jar文件中的类,我建议使用xml配置Use@Bean public DependentClass depClass(){return new DependentClass();}通过从jar中定义已经存在的类,我将复制它知道!这是唯一的方法吗?根据我的观点,这是我使用的唯一方法,可能还有更多的东西需要定义类。如果我找到另一种方法,我也会与您分享。
@Bean
不允许在类或接口上进行注释;粘贴的代码将无法编译
 @Bean
   public DependentClass depClass(){
    return new DependentClass();
   }