【Spring源码分析】34-Spring-Bean作用域的设计与实现.docxVIP

【Spring源码分析】34-Spring-Bean作用域的设计与实现.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
? ? 【Spring源码分析】34-Spring Bean作用域的设计与实现 ? ? 1、Spring Bean作用域简介 bean定义的配方是很重要的,因为这意味着,对于一个类,你可以使用一个配方创建许多对象实例。你不仅可以通过特定的bean定义控制各种依赖关系和配置值创建一个对象,还控制创建的对象的作用域。这种方法是强大和灵活的,因为你可以选择您创建的对象的作用域通过配置,而不是靠对象在Java类级别的作用域。可以定义bean被部署在一个作用域。Spring框架支持六个作用域,其中四个作用域需要使用带有Web功能的ApplicationContext(AbstractRefreshableWebApplicationContext)。您还可以创建一个自定义作用域。下表描述了支持的作用域: Bean作用域 作用域 描述 singleton (默认作用域) 一个bean定义对应一个在Spring IoC容器中存在的对象实例。 prototype 一个bean定义可以创建任意数量的对象实例。 request 一个bean定义代表一个单独的HTTP请求的生命周期。也就是说,每个HTTP请求都有自己的bean的实例。只有在web应用的Spring?ApplicationContext中生效。 session 一个bean定义代表对应bean的作用域与Http Session的生命周期相同。只有在web应用的Spring?ApplicationContext中生效。 application 一个bean定义代表对应bean的作用域与ServletContext的生命周期相同。?只有在web应用的Spring?ApplicationContext中生效。 websocket 一个bean定义代表对应bean的作用域与WebSocket的生命周期相同。只有在web应用的Spring?ApplicationContext中生效。 1.1、Singleton作用域 只有一个共享一个单例bean管理的实例,以及所有bean的请求ID或bean定义ID相匹配的结果在一个特定的Spring容器返回的bean实例。换句话说,当你定义一个作用域为singleton的bean的BeanDefinition,Spring的IoC容器创建一个BeanDefinition定义的实例对象的。这单一实例会被当做单例缓存起来,以后所有后续请求和引用bean返回缓存的对象。 1.2、Prototype作用域 导致每次请求特定bean都会创建一个新的bean实例。即在一个bean注入另一个bean或者请求通过在容器调用getBean()方法的时候。 与其他作用域相比,Spring不管理prototype作用域bean的完整生命周期。容器实例化,配置和组装原型对象并将其交给客户端,而没有该原型实例的进一步记录。因此,尽管无论是什么作用域都会在所有对象上调用初始化生命周期回调方法,但在prototype作用域的情况下,不会调用已配置的销毁生命周期回调。客户端代码必须清理prototype作用域的对象并释放prototype bean所拥有的昂贵资源。要使Spring容器释放prototype的bean所拥有的资源,请尝试使用自定义bean后处理器,它包含对需要清理的bean的引用。 1.3、Request, Session, Application和WebSocket作用域 仅当您使用Spring WebApplicationContext实现(例如XmlWebApplicationContext)时,Request,Session,Application和WebSocket作用域才可用。如果将这些作用域与常规的Spring IoC容器(例如ClassPathXmlApplicationContext)一起使用,则会引发未知bean 作用域的IllegalStateException。 1.3.1、初始Web配置 要在请求,会话,应用程序和websocket级别(Web作用域的bean)支持bean的作用域,在定义bean之前需要一些小的初始配置。 (标准作用域不需要此初始设置:单例和原型。) 如何完成此初始设置取决于您的特定Servlet环境。 如果您在Spring Web MVC中访问scoped bean,实际上是在Spring DispatcherServlet处理的请求中,则无需进行特殊设置。 DispatcherServlet已经公开了所有相关状态。 如果您使用Servlet 2.5 Web容器,并且在Spring的DispatcherServlet之外处理请求(例如,使用JSF或Struts时),则需要注册org.springframework.w

文档评论(0)

科技之佳文库 + 关注
官方认证
文档贡献者

科技赋能未来,创新改变生活!

版权声明书
用户编号:8131073104000017
认证主体重庆有云时代科技有限公司
IP属地浙江
统一社会信用代码/组织机构代码
9150010832176858X3

1亿VIP精品文档

相关文档