作为 Spring 的新手,我有一个关于注释类的问题。当用
@Component
注释一个类时,这是否意味着这个类将是一个 Spring Bean,默认情况下是一个单例?
对,没错,
@Component
是一个Spring bean和一个Singleton。
如果该类属于服务层,您可能需要用
@Service
来注释它
但是请记住,为了检测到这些注释,您需要将此行放在
applicationContext.xml
:
<context:component-scan base-package="com.yourcompany" />
关于单例——spring bean默认都在单例范围内。您唯一需要记住的是,您不应该将状态存储在字段变量中(它们应该只包含依赖项)。因此,您的应用程序将是线程安全的,并且您不会每次都需要一个新的 bean 实例。换句话说,你的 bean 是无状态的。
默认 - 是。
但是,您可以使用
@Scope
注释覆盖此行为。例如:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
以上答案不准确
是的,在设计模式中,
@Component
的行为就像单例模式所暗示的那样。
但是,在 JavaEE 术语中,
@Singleton
和 @ApplicationScoped
bean 是有区别的。在 Spring 中,@Service
和 @Component
的行为更像传统的 @ApplicationScoped
bean,在同一 ServletContext 中运行的多个基于 servlet 的应用程序之间进行代理和共享,而单例作用域 beans 仅作用于单个应用程序上下文.
如果你用
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
注释 Bean,它将在服务器启动时实例化,而常规的 @Component
或 @Service
将被代理并休眠直到被访问。