zoukankan      html  css  js  c++  java
  • Spring学习笔记——Bean的作用域

    1:种类
    singleton:单例,不指定时bean默认均为单例,例如SpringMVC的前端控制器(DispatcherServlet)
    prototype:原型,每次注入或获取bean时都会创建一个新的bean实例,例如Struts2的Action
    session:会话。特指web应用。为每个会话(session)创建一个bean
    request:请求。特指web应用。为每个请求(request)创建一个bean

    2:设置作用域

    (1)xml文件中通过bean的scope属性设置
    (2)如果Bean是通过JavaConfig类进行配置,在方法上和@Bean一起使用@Scope(XX)注解即可
    (3)通过和@Component一起使用@Scope,用于指明该Bean的作用域

    后两种方式的参数可以直接使用小写字符串声明。

    3:session和request作用域下的代理模式:ScopedProxyMode

    最常使用的例子:在电商平台中为每个session生成一个购物车的Bean,或者为每个request生成一个Bean。

    如果使用默认的singleton,则所有用户均使用一个唯一的购物车。如果声明为prototype,在需要该bean的地方就会生成新的购物车bean,都不符合实际需求。

    由于声明为session和request作用域的bean需要在request和session存在时才会被创建,且数量不定,所以引入了代理模式。
    在需要使用到该bean的地方首先会注入一个bean代理,在实际运行时通过懒加载决定实际注入的bean

    通过注解扫描获得Bean:
    session和request作用域:在通过Component注解声明bean时需要额外添加scope注解。该注解内指定proxyMode(代理模式,值来自于ScopedProxyMode的常量):
    proxyMode=ScopedProxyMode.XX
    INTERFACES:表明声明的Bean需要被注入到一个接口,即需要一个接口作为代理,
    TARGET_CLASS:表明Bean是个class,这是最理想的代理模式

    通过xml配置时:
    Bean的子标签<aop:scoped-proxy>,该标签的proxy-target-class属性设置为false时表明代理的是接口

    注意:需要在xml中声明Spring的AOP命名空间

    个人使用的文件头见:

    https://www.cnblogs.com/ForsakenCoder/p/9624113.html

  • 相关阅读:
    配合网页滚屏播放,做解说词
    @enable跟@import注解
    组合注解与元注解
    Spring Aware
    https的设计原理
    用信鸽来解释 HTTPS
    http三次握手四次挥手
    一致性哈希
    redis cluster原理
    redis cluster集群搭建
  • 原文地址:https://www.cnblogs.com/ForsakenCoder/p/9643539.html
Copyright © 2011-2022 走看看