600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Spring中的IOC是什么意思 为什么要用IOC而不是New来创建实例?

Spring中的IOC是什么意思 为什么要用IOC而不是New来创建实例?

时间:2022-04-14 09:10:41

相关推荐

Spring中的IOC是什么意思 为什么要用IOC而不是New来创建实例?

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

一.背景介绍

Spring是一个开源框架,Spring是于 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的核心是控制反转(IoC)和面向切面(AOP)。

二.知识剖析

什么是反转控制(IOC)?

是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“

第三方”实现具有依赖关系的对象之间的解耦。

通过控制反转客户端不需要再主动创建对象,只需要通过IOC,由IOC去创建就可以了

由应用程序创建对象转变为由IOC容器来创建,用于控制创建对象的主体发生了改变,这是控制反转

应用程序需要的对象信息由IOC容器创建后注入,也就是说依赖于容器来注入,这是依赖注入

表达的是一个东西,只是描述的角度不同。

IOC,从容器的角度出发,容器反向控制应用程序对象的创建。

DI,从应用程序的角度出发,应用程序需要依赖容器注入对象。

三.常见问题

理解好IoC的关键是:谁控制谁,控制什么了,为何是反转,在哪些方面反转了。

谁控制谁,控制什么了

传统JavaSE程序设计,我们在对象内部直接通过new进行创建对象,是程序主动去创建依赖对象,而IoC有一个专门的容器来创建这些对象,即由IoC容器来创建这些对象的创建。谁控制谁?当然是由IoC容器控制了对象;控制了什么?那就主要是控制了外部资源获取(包括对象、文件等)。

为何是反转,在哪些方面反转了

有反转就有正转。传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转。而反转则是由容器来帮忙创建及注入依赖对象。为何是反转?因为容器帮我们查找和注入依赖对象,对象只是被动的接受依赖对象,所以是反转。哪些方面反转了?依赖对象的获取反转了。

理解DI的关键:谁依赖谁,为什么需要依赖,谁注入谁,注入了什么

1.谁依赖谁?当然是应用程序依赖于IoC容器。

2.为什么需要依赖?应用程序需要IoC容器来提供对象需要的外部资源(包括对象,文件等)。

3.谁注入谁?很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象。

4.注入了什么?就是注入某个对象所需要的外部资源(包括对象、资源、变量数据)

四.扩展和思考

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时,该作用域才有效

五.参考文献

/goody9807/p/7472127.html

/weixin_41776493/article/details/80035932

六.更多讨论

PPT链接视频链接

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖

------------------------------------------------------------------------------------------------------------

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。”

技能树·IT修真院:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。