美文网首页
Bean的范围

Bean的范围

作者: TheMrBigHead | 来源:发表于2018-09-06 15:03 被阅读0次

默认情况下,Spring中的Bean都是单例的。

4种范围

  1. Singleton 单例的,整个应用中仅仅存在一个实例
  2. Prototype 每一次注入或者从Spring应用上下文中获取都需要实例化Bean
  3. Session 在web应用中,每一个session会实例化一个Bean
  4. Request 在web应用中,每一个request会实例化一个Bean

变更Bean的范围:

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
// 或 @Scope("prototype")
public class Notepad { ... }

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
// 或 @Scope("prototype")
public Notepad notepad() {
    return new Notepad();
}

<bean id="notepad"
      class="com.myapp.Notepad"
      scope="prototype" />
使用request和session范围
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.INTERFACES)
public ShoppingCart cart() { 
... 
}
@Component
public class StoreService {
  @Autowired
  public void setShoppingCart(ShoppingCart shoppingCart) {
    this.shoppingCart = shoppingCart;
  }
... 
}

这里StoreService是一个单例,ShoppingCart的范围是session,那么Spring在这里会向StoreService注入一个ShoppingCart的代理,当调用ShoppingCart的方法时,这个代理会延迟解析这个ShoppingCart实例,并委托调用一个真正的在session范围内的ShoppingCart的Bean实例。

proxyMode:
  1. ScopedProxyMode.INTERFACES
  2. ScopedProxyMode.TARGET_CLASS 使用CGLib创建一个目标类代理

在xml中使用:

默认使用CGLib

<bean id="cart"
      class="com.myapp.ShoppingCart"
      scope="session">
  <aop:scoped-proxy />
</bean>
<bean id="cart"
      class="com.myapp.ShoppingCart"
      scope="session">
  <aop:scoped-proxy proxy-target-class="false" />
</bean>

相关文章

  • [Java]03.Spring Bean作用域

    Bean 的范围: 范围描述singleton(默认)将单个 bean 定义范围限定为每个 Spring IoC ...

  • Bean的范围

    默认情况下,Spring中的Bean都是单例的。 4种范围 Singleton 单例的,整个应用中仅仅存在一个实例...

  • 2020-03-15spring框架2

    spring框架的相关内容(续) Bean的作用范围的配置scope :Bean的作用范围single...

  • spring注解使用

    @Component/Service/Controller:管理bean @Scope:bean范围,可以指定单例...

  • 7.Spring Bean的作用域

    Bean 的作用域 在Spring中定义一个Bean,Ioc容器可限制该bean作用于某个范围. Bean的常用作...

  • 说说 Spring Bean 的生命周期

    在 Spring 中,我们可以从两个层面定义 Bean 的生命周期: Bean 的作用范围。 实例化 Bean 时...

  • Spring bean scope范围

    spring bean scope类型范围:singleton、property、request、session、...

  • Spring Bean配置项(二)

    Id:在整个ioc容器中这个bean的唯一标示Class:这个bean的实现类Scope:bean的范围,作用域C...

  • Spring IoC容器之bean scope

    一、bean scope范围 默认情况下spring中所有的bean都是单例的,即bean实例只有一个,我们可以在...

  • Spring支持的几种bean的作用域。

    Spring支持的几种bean的作用域。 Spring容器中的bean可以分为5个范围: (1)singleton...

网友评论

      本文标题:Bean的范围

      本文链接:https://www.haomeiwen.com/subject/rqhzwftx.html