我在创建bean时遇到问题。我尝试通过制作spring.main.allow-bean-definition-overriding=true
解决错误,但我想知道为什么会发生此错误。
发生异常。请参考下面的错误以供参考。
Description:
The bean 'configProvider', defined in class path resource
[com/fidel/fixadaptor/config/BeanConfig.class], could not be registered. A bean with that name has
already been defined in file [D:\Swapnil\Kovacap\CODE\fix-adaptor-
Ver1.1\target\classes\com\fidel\fixadaptor\config\ConfigProvider.class] and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-
definition-overriding=true
Bean配置类
@Configuration
@ComponentScan("com.fidel.fixadaptor")
public class BeanConfig {
/** The destination. */
private AdaptorDestination destination;
private ConfigProvider configProvider;
/**
* Config provider.
*
* @return the config provider
*/
@Bean
public ConfigProvider configProvider() {
if (configProvider == null) {
configProvider = new ConfigProvider();
}
return configProvider;
}
/**
* Recovery.
*
* @return the recovery
*/
@Bean
public Recovery recovery() {
return new RecoveryManager(configProvider());
}
}
ConfigProvider类
@Component
public class ConfigProvider {
private HashMap<String, String> configMap;
@Autowired
private FixUtils fixUtils;
/**
* @param activeProfile
* @param connectionType
* @return
*/
public HashMap<String, String> getConfig(String activeProfile, String connectionType) {
String file = fixUtils.getConfigFile(connectionType, activeProfile);
File cfgFile = new File(file);
configMap = new HashMap<String, String>();
Scanner sc = null;
try {
sc = new Scanner(cfgFile);
while (sc.hasNextLine()) {
String keyValue = sc.nextLine();
String keys[] = keyValue.split("=");
configMap.put(keys[0], keys[1]);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return configMap;
}
}
对于其他任何信息,请给我帮助,以了解其原因。 预先感谢
答案 0 :(得分:0)
用Spring的@Component
注释的类由spring bean容器自动管理,即:Spring会自己创建一个实例,并在需要时将其注入。问题是您要手动公开另一个bean,因此发生这种情况会造成歧义,并且框架无法确定将哪个bean注入到哪里。
解决方案是删除您对bean的声明,然后让spring做这些事情。