用@Component注释类时,是否表示它是Spring Bean和Singleton?


111

作为Spring的新手,我有一个关于注释类的问题。用注释类时@Component,这是否意味着该类将是Spring Bean,默认情况下是单例?

Answers:


129

是的,没错,是@ComponentSpring bean和Singleton。

如果类属于服务层您可能需要使用注释它@Service而不是

但是请记住,为了检测到这些批注,您需要将以下行放在applicationContext.xml

<context:component-scan base-package="com.yourcompany" />

关于单例-缺省情况下,spring bean都在单例范围内。您唯一需要记住的是您不应该将状态存储在字段变量中(它们应该仅包含依赖项)。因此,您的应用程序将是线程安全的,并且不需要每次都需要一个新的bean实例。换句话说,您的bean是无状态的。


1
当使用@Component和或@Service批注等时,意味着我正在创建Singletons,是否会遇到并发问题?对于我的新手来说,它将产生一个在整个ApplicationContext中使用的bean,因此并发用户将获得对单个bean的引用。还是我错过了什么?
马可(Marco)

3
@Marco如果您没有任何状态(实例变量不同于Spring Bean),则不会发生并发问题。
博佐

您“想要”每次都需要一个新的bean实例,或者您“想要”每次都需要一个新的bean实例?
Harshana '16

@Bozho您的意思是:“而且您不会每次都需要一个新的bean实例”?这是否意味着Spring不必创建新实例,或者作为开发人员您不需要创建新实例?
user1766169

24

默认情况下-是。

但是,您可以使用@Scope注释覆盖此行为。例如:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.