我正在尝试将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包下,并且还在同一包下添加了组件扫描。
这是我的具有自动关联依赖项的组件类
@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扩展了一个类吗?有人可以帮我找出错误的原因吗?
答案 0 :(得分:2)
DependentClass
上没有@Component
批注。因此,您需要通过XML或Java配置自己创建DependentClass
的bean。
不必将主类与DependentClass
放在同一包中。
答案 1 :(得分: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();
}
在自动连接类之后,您终于获得了实例。
答案 2 :(得分:0)
在当前的Spring Context中未定义DependentClass。DependentClass未使用bean(@Bean)注释。因此,会发生 nosuchbeandefinitionexception 。
@Bean
public class DependentClass extends ResourceClass<Map<String, Double>> {
// Methods and logic
}