分享人:崔震
1.背景介绍
2.知识剖析
3.常见问题
4.编码实战
5.扩展思考
6.参考文献
7.更多讨论
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,
它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,
分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
Spring的核心是控制反转(IoC)和面向切面(AOP)。
什么是反转控制(IOC)?
是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。
其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。
通过控制反转客户端不需要再主动创建对象,只需要通过IOC,由IOC去创建就可以了
由应用程序创建对象转变为由IOC容器来创建,用于控制创建对象的主体发生了改变,这是控制反转
应用程序需要的对象信息由IOC容器创建后注入,也就是说依赖于容器来注入,这是依赖注入
表达的是一个东西,只是描述的角度不同。
IOC,从容器的角度出发,容器反向控制应用程序对象的创建。
DI,从应用程序的角度出发,应用程序需要依赖容器注入对象。
谁控制谁,控制什么了
传统JavaSE程序设计,我们在对象内部直接通过new进行创建对象,是程序主动去创建依赖对象,
而IoC有一个专门的容器来创建这些对象,即由IoC容器来创建这些对象的创建。
谁控制谁?是由IoC容器控制了对象;控制了什么?那就主要是控制了外部资源获取(包括对象、文件等)。
为何是反转,在哪些方面反转了
有反转就有正转。传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转。
而反转则是由容器来帮忙创建及注入依赖对象。
为何是反转?因为容器帮我们查找和注入依赖对象,对象只是被动的接受依赖对象,所以是反转。
哪些方面反转了?依赖对象的获取反转了。
谁依赖谁,为什么需要依赖,谁注入谁,注入了什么
谁依赖谁?当然是应用程序依赖于IoC容器。
为什么需要依赖?应用程序需要IoC容器来提供对象需要的外部资源(包括对象,文件等)。
谁注入谁?很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象。
注入了什么?就是注入某个对象所需要的外部资源(包括对象、资源、变量数据)
spring中Bean的五个作用域
当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,
还可以为Bean指定特定的作用域。Spring支持如下5种作用域:
singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。
容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。
在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。
如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需进行内存申请;销毁实例时,需完成垃圾回收,这些工作都会导致系统开销的增加。
因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。
因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。
典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
https://www.cnblogs.com/goody9807/p/7472127.html
https://blog.csdn.net/weixin_41776493/article/details/80035932