spring知识之二


Bean的作用域

Spring定义了多种Bean作用域,可以基于这些作用域创建bean,包括:

  • 单例(Singleton):在整个应用中,只创建bean的一个实例。

  • 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。

  • 会话(Session):在Web应用中,为每个会话创建一个bean实例。

  • 请求(Rquest):在Web应用中,为每个请求创建一个bean实例。

在代码里看起来是这样的:

  1. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
  2. public class MyIsBean{...}

XML版本:

  1. <bean id="BEANID"
  2. class = "com.my.beans"
  3. scope = "prototype"
  4. >

在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的。也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例。

在大多数情况下,单例bean是很理想的方案。初始化和垃圾回收对象实例所带来的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用中反复重用这些对象可能并不合理。

有时候,可能会发现,你所使用的类是易变的(mutable),它们会保持一些状态,因此重用是不安全的。在这种情况下,将class声明为单例的bean就不是什么好主意了,因为对象会被污染,稍后重用的时候会出现意想不到的问题。

声明Bean

以下是声明Bean的注解:

  • @Component 组件,没有明确的角色

  • @Service 在业务逻辑层使用

  • @Repository 在数据访问层使用

  • @Controller 在展现层使用(MVC -> Spring MVC)使用

  • 在这里,可以指定bean的id名:Component("yourBeanName")

  • 同时,Spring支持将@Named作为@Component注解的替代方案。两者之间有一些细微的差异,但是在大多数场景中,它们是可以互相替换的

猜你喜欢

转载自blog.csdn.net/xywnrf/article/details/80873676
今日推荐