Bean创建问题:无法注册在类路径资源中定义的Bean“ xyz”

时间:2019-10-25 09:12:31

标签: spring-boot

我在创建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;
    }

}

对于其他任何信息,请给我帮助,以了解其原因。 预先感谢

1 个答案:

答案 0 :(得分:0)

用Spring的@Component注释的类由spring bean容器自动管理,即:Spring会自己创建一个实例,并在需要时将其注入。问题是您要手动公开另一个bean,因此发生这种情况会造成歧义,并且框架无法确定将哪个bean注入到哪里。

解决方案是删除您对bean的声明,然后让spring做这些事情。