@Configuration是单身人士吗?

时间:2018-04-12 14:28:56

标签: java spring-boot singleton javabeans

我正在做我的日常工作人员而且我已经意识到尽管我经常使用@Configuration我不知道它是如何工作的,在阅读了spring.io文件后我无法确定@Configuration是否是一种方式把班级变成单身人士。

所以....我想我的问题是:

我应该使用什么来正确制作单身@Configuration或@Component?为什么那个'?

我一直在调查这两个选项,其中包括两个例子:

第一个例子

@Configuration
public static class Config {

    @Bean
    public SimpleBean simpleBean() {
        return new SimpleBean();
    }

    @Bean
    public SimpleBeanConsumer simpleBeanConsumer() {
        return new SimpleBeanConsumer(simpleBean());
    }
}

第二个例子

@Component
public static class Config {

    @Bean
    public SimpleBean simpleBean() {
        return new SimpleBean();
    }

    @Bean
    public SimpleBeanConsumer simpleBeanConsumer() {
        return new SimpleBeanConsumer(simpleBean());
    }
}

第一段代码工作正常,正如预期的那样,SimpleBeanConsumer将获得单例SimpleBean的链接。但不幸的是,它在签署的环境中无效。

第二个配置完全不正确,因为spring将创建SimpleBean的单例bean,但SimpleBeanConsumer将获取另一个SimpleBean实例,该实例不在spring上下文控件中。

此行为的原因可以解释如下:

如果使用@Configuration,标记为@Bean的所有方法都将被包装到CGLIB包装器中,该包装器就像是第一次调用此方法一样,然后将执行原始方法的主体,并将结果对象注册到春天的背景。所有进一步的调用只返回从上下文中检索的bean。

所以我想我已经回答了我自己的问题,但不确定我是否遗漏了什么。

0 个答案:

没有答案