java - Spring无法创建bean

标签 java spring spring-mvc autowired

我是 Spring 及其概念的初学者。我正在尝试使用 @Configuration 和包扫描注释来扫描单个包下的某些 bean 提供程序类。当其中一个类的 @Bean 注释方法与不同类的另一个 @Bean 注释方法具有相同名称时,不会为这两个类创建 Bean。如果我将 @bean 注释的方法名称更改为未创建的 bean 的不同名称,则两个 bean 都会成功创建。无法理解这种行为。

    @Configuration
    public class ManagementHelperProvider {
        @Bean
        public ManagementHelper getInstance() {
            return new ManagementHelper();
        }
    }

如果我创建另一个类,如下所示,则不会创建顶部 Bean ManagementHelper。

    @Configuration
    public class ManagementValidatorProvider {
        @Bean
        public ManagementValidator getInstance() {
            return new ManagementValidator();
        }
    }

如果我创建另一个类,如下所示,则会创建顶部 Bean ManagementHelper。

    @Configuration
    public class ManagementValidatorProvider {
        @Bean
        public ManagementValidator getInstanceTwo() {
            return new ManagementValidator();
        }
    }

最佳答案

情况1:

bean1 使用名称 getInstance 创建。

bean2 使用相同的名称 getInstance 创建,bean1 被它覆盖

情况2:

使用名称 getInstance 创建 bean1。

使用名称 getInstanceTwo 创建 bean2。没有覆盖,因为名称没有冲突

如果你

 @Bean(name="bean1") 

@Bean(name="bean2") 

它也会起作用。

@Configuration
public class AppConfig {
    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }
}

以上内容完全等同于以下appConfig.xml:

<beans>
    <bean name="transferService" class="com.acme.TransferServiceImpl"/>
</beans>

两者都会导致名为 transferService 的 bean 在 BeanFactory/ApplicationContext 中可用,并绑定(bind)到 TransferServiceImpl 类型的对象实例:

transferService => com.acme.TransferService

关于java - Spring无法创建bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38575903/

相关文章:

javascript - 允许并配置访问控制允许来源

java - Spring REST - 当资源尚不存在时正确的 PUT 功能

java - 如果单元格包含 NULL,则 JTable + getColumnClass() 返回 null

Java JTextField空字符串错误

java - 如何解决 OpenGL 中的 z-fighting 问题?

java - 如何离线模式运行spring项目?

java - 传入文件的 Apache Mina SFTP 服务器端 channel 监听器

spring - 从 Spring 3 注释生成完整的 XML 配置

java - Jasypt加密-加密时删除斜杠

java - 在 Spring Controller 中加载静态文件