【问题标题】:is it possible to create Bean Singleton by name or its value?是否可以按名称或其值创建 Bean Singleton?
【发布时间】:2015-08-17 12:38:43
【问题描述】:

我想通过唯一名称(豆名)创建单个首选项实例。

所以 myBeanName1 将是 spring 上下文中的一个实例。 还有一个跨弹簧上下文的 myBeanName2。

有可能这样做吗?我对在方法级别定义的 @Bean 注释有点困惑。

据我了解,@Bean 将始终返回 new(prototype) 实例,无论何时调用它,直到我使用此 @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) 来控制创建行为。

(我知道spring Bean默认是Singleton。)

请澄清。

@Bean(name="myBeanName1")
@ConfigurationProperties(prefix="proect.entity1")
public Preference entityDefault() {return new Preference();}

@Bean(name="myBeanName2")
@ConfigurationProperties(prefix="proect.entity2")
public Preference entityDefault() {return new Preference();}

【问题讨论】:

  • 你的理解是错误的。默认情况下是单例。
  • 我知道,但我在想@Bean 可能会创建多个 bean,但它不像 XML 配置。谢谢。

标签: spring spring-bean


【解决方案1】:

@Bean 注解将方法标记为用于创建 bean 的工厂。 Spring bean 默认是单例的,并且在启动时注册到容器中。如果您需要多个实例,则需要将其范围显式配置为原型。原型 bean 是按需创建的。

【讨论】:

  • 现在我明白你在说什么了,无论 XML 或注释如何,默认情况下它们都是单例的,如果您想要除了单例之外,还需要手动指定创建模式。谢谢
  • 正确它们是实现相同目标的两种不同方法。 @Bean 注释类似于 XML 中的 <bean> 元素。
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 2020-06-05
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多