博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ioc的作用
阅读量:6434 次
发布时间:2019-06-23

本文共 1733 字,大约阅读时间需要 5 分钟。

IoC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF中。

Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了。

Spring通过这种控制反转(IoC)的设计模式促进了松耦合。当应用了IoC,一个对象依靠的其它对象会通过被动的方式传送进来,而不是这个对象自己创建或者查找依靠对象。不是对象从容器中查找依靠,而是容器在对象初始化时不等对象请求就主动将依靠传送给它。我们可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

1.依赖查找

容器提供回调接口和上下文条件给组件。EJB和Apache Avalon 都使用这种方式。这样一来,组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在那些回调方法上(也就是上面所说的 类型1):容器将调用这些回调方法,从而让应用代码获得相关资源。

容器中的受控对象通过容器的API来查找自己所依赖的资源和协作对象。这种方式虽然降低了对象间的依赖,但是同时也使用到了容器的API,造成了我们无法在容器外使用和测试对象。依赖查找是一种更加传统的IoC实现方式。

<bean id="accountService4" class="com.luban.service.impl.AccountServiceImpl" scope="prototype"</bean>

2.依赖注入

组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)。

Spring是一个开源轻量级框架,于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。

Spring 能有效地组织J2EE应用各层的对象。不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大大减少。

上面所说的一切都得宜于Spring的核心机制,依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

复制代码

复制代码

-END-

转载于:https://juejin.im/post/5cd95c50518825695a69673f

你可能感兴趣的文章
虚拟机安装CentOS
查看>>
Auto Scaling 伸缩组支持修改专有网络交换机
查看>>
程序员总数3w+,阿里巴巴首度公开2018代码数据报告
查看>>
采用建站cms制作企业网站的好处
查看>>
学习Python3 进程,这一篇就够了
查看>>
创建一个新的文章分类
查看>>
你在使用大数据技术的时候,你知道大数据语言的工具与框架吗?
查看>>
Es使用指南之Elasticsearch文档读写模型实现原理
查看>>
启蒙教育玩具“优学猫”完成2000万元Pre-A轮融资
查看>>
北京通州引入阿里云城市大脑防控环境污染
查看>>
1月7日云栖精选夜读 | 阿里巴巴,果然开始拥有“预测未来”的能力了
查看>>
Idea里面老版本MapReduce设置FileInputFormat参数格式变化
查看>>
haproxy http实例配置
查看>>
SAP物料主数据不同视图的标志字段
查看>>
选择Serverless还是Kubernetes?这种争辩并没有意义
查看>>
查看远程Redis服务器的版本
查看>>
在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
查看>>
Unity3d游戏开发之-单例设计模式-多线程一
查看>>
Java 程序员必备的 15 个框架,前 3 个地位无可动摇!
查看>>
构建MySQL自动化平台思路
查看>>