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

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

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

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

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

Ioc的作用

1.依赖查找

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

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

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

Ioc的作用
Ioc的作用

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)。

Ioc的作用

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

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

Ioc的作用

-END-

转载于:https://blog.51cto.com/14295469/2393779

你可能感兴趣的文章
[zz]kvm环境使用libvirt创建虚拟机
查看>>
王垠:不再推荐 Haskell_IT新闻_博客园
查看>>
ios开发学习--动画(Animation)效果源码分享
查看>>
Java进阶07 嵌套类
查看>>
美妙的模电2013/4/18
查看>>
转: 多线程编程指南【中文完整翻译版】
查看>>
转 SQL语句的添加、删除、修改多种方法
查看>>
【译】ISupportInitialize的用处
查看>>
Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs
查看>>
IIS中采用ISAPI-Rewrite防盗链
查看>>
【新年呈献】高性能 Socket 组件 HP-Socket v3.1.2 正式发布
查看>>
查询数据库的所有者
查看>>
Android PageAdapter翻译
查看>>
学习:erlang的不定长数据包头部。
查看>>
requirejs:杏仁的优化(almond)
查看>>
CATransition 实践
查看>>
js便签笔记(12)——浏览TOM大叔博客的学习笔记 part2
查看>>
Android发布应用前的代码混淆【转】
查看>>
Python-搭建Nginx+Django环境
查看>>
SendMessage、PostMessage原理
查看>>