使用注释创建原型范围的 Spring bean?

Posted

技术标签:

【中文标题】使用注释创建原型范围的 Spring bean?【英文标题】:Create prototype scoped Spring bean with annotations? 【发布时间】:2012-04-12 21:12:34 【问题描述】:

是否可以将以下XML configuration 转换为基于注释的?

<bean id="myBean" class="my.package.MyBeanClass" scope="prototype" />

我正在使用 Spring 2.5.6。

【问题讨论】:

【参考方案1】:

你可以使用@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)注解。

@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class CustomerService 
    // ...

    Spring API Docs。 Example of the mapping。 Scope annotation reference.

【讨论】:

还有一个不错的常量可以用来代替字符串:BeanDefinition.SCOPE_PROTOTYPE Scope注解Javadoc中,推荐的常量是ConfigurableBeanFactory.SCOPE_PROTOTYPE 在 Spring 4 中删除了 BeanDefinition 类吗? @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) 或者使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)节省一点打字时间【参考方案2】:

截至目前spring version 4.3.2,我们可以使用@Scope("prototype")注解。

@Scope("prototype")
@Repository
public class MovieFinderImpl implements MovieFinder 
    // ...

【讨论】:

我会说使用提供的常量,如接受的答案,更好。 @herman 是什么让它变得更好?是否有这方面的 JSR 标准? @Steve 以防字符串更改(不太可能)或您想使用 IDE 搜索引用【参考方案3】:

在 Spring 5 中,可以如下使用

@Component("myBean")

@Scope("prototype")

public class MyBeanClass//your logics

【讨论】:

以上是关于使用注释创建原型范围的 Spring bean?的主要内容,如果未能解决你的问题,请参考以下文章

Spring会话范围的bean作为原型bean中的依赖项?

在Spring上下文中的原型bean中的单例bean

何时使用 Spring 原型作用域?

spring bean的作用域之间有啥区别

spring 组件类是不是有任何作用域,例如 spring bean?

spring默认的bean范围是单例,但它是如何在实际应用程序中处理的?