第八讲:Scope
目录
第八讲:Scope
学习目标
一、Scope类型有那些
1.1 request, session, application的演示
二、scope失效分析
三 解决Scope失效的方法
1.使用@Lazy 进行代理生成对象
2.使用@Scope的属性proxyMode=ScopedProxyMode.TARGET_CLASS
3.使用工厂来创建
4.直接使用容器中获取
总结
学习目标
1.Scope类型有那些
singleton, prototype, request, session, application
2.在singleton中使用其他几种scope的注意事项
3.scope销毁
单例是 容器创建就将所有的单例都创建出来
容器关闭的时候进行销毁
多例是 每次使用的时候会进行创建
是利用垃圾回收机制进行销毁
4.实战:scope失效分析
一、Scope类型有那些
一共有五种 singleton, prototype, request, session, application
一共有五种 singleton, prototype, request, session, application
1.1 request, session, application的演示
request是一次请求
session一个会话
application应用
request是一次请求
session一个会话
application应用
在同一个网页中刷新页面--即请求改变 因此request会发生变化
在不同的浏览器上访问页面,因为session不同 因此session会发生变化
也为都是一个容器中,因此application不变
二、scope失效分析
正常来将 f1是多例的 我多次输出 返回的f1对象应该是不同的
但是结果确是相同的对象
为什么会出现这种情况呢?
是因为E是单例的,它是在容器创建的时候进行创建,并且只是注入一次依赖
因此已经确定了f1是同一个 因此每次输出都是同一个对象
那么如何进行解决这个问题 使每次输出的f1是不同的对象呢?
三 解决Scope失效的方法
1.使用@Lazy 进行代理生成对象
2.使用@Scope的属性proxyMode=ScopedProxyMode.TARGET_CLASS
3.使用工厂来创建
4.直接使用容器中获取
总结
1.Scope类型有那些
singleton, prototype, request, session, application五种
2.在singleton中使用其他几种scope的注意事项
3.scope销毁
单例是 容器创建就将所有的单例都创建出来
容器关闭的时候进行销毁
多例是 每次使用的时候会进行创建
是利用垃圾回收机制进行销毁
4.实战:scope失效分析
因为scope是单例的时候只是在容器创建的时候进行创建,并且只进行一次依赖注入
所以多例是失效的
解决方法 4种
@Lazy
.使用@Scope的属性proxyMode=ScopedProxyMode.TARGET_CLASS
使用 ObjectFactory
使用容器的getBean()



