java - 理解 Spring 4 注释 bean

标签 java spring annotations spring-bean

第一次使用带有注释的Spring。我正在尝试定义一个单例 bean,例如:

@Bean
public ActionProducer actionProducer() {
    return new ActionProducer();
}

但我觉得这不是正确的方法,因为每次都会返回一个"new"bean。我应该像下面这样定义吗?

@Bean
public ActionProducer actionProducer() {
    if (bean==null) 
        bean=new ActionProducer();
    return bean 
}

提前致谢。

最佳答案

对于每个@Configuration类,Spring将创建一个代理来控制对这些@Bean方法的调用。因此,如果您有一个 @Bean 方法,该方法应该创建一个单例 bean(如果您没有指定其他范围,则默认情况下会这样做),代理将确保该方法仅被调用一次创建bean。所有进一步的调用都会被代理拦截,并且已经存在的 bean 将被返回。
这样,如果该类中有其他依赖于该 bean 的 bean,您甚至可以只调用该 bean 方法,而无需考虑作用域、重复实例等:

@Bean
public AnotherClass anotherClass() {
    return new AnotherClass(actionProducer());
}

因此,不要绕过 Spring 功能,只需实现如下方法即可:

@Bean
public ActionProducer actionProducer() {
    return new ActionProducer();
}

关于java - 理解 Spring 4 注释 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204909/

相关文章:

java - 为什么属性 '' 导致“异常”永远重复?

java.lang.NoSuchMethodError : org. springframework.util.ReflectionUtils.clearCache()

java - 运行导入的入门项目访问facebook数据出现NullPointerException

java - IE 9 设置 cookie 和重定向失败

java - 用 Java 在数据库中保存 XML 文档(Hibernate 和 JAXB 的组合)

java - 来自配置 yaml 的绑定(bind)映射

java - P6Spy 不记录 SQL

iPhone iOS 是否有开源带注释的折线图示例?

java - 如何从注释处理器创建文件名中带有空格的资源

java - 不使用单例或静态引用 HttpSessionListener 实例