Spring3.0第二讲:什么是IOC
2016-08-18 10:51
363 查看
对于IOC(Inversion of Control),很多人有不同的见解,这相当于“一千人心中有一千个哈姆雷特”,其实说来说去总是离不开“控制反转”和“依赖注入”。不要把IOC当成一种什么的很高深的技术,它只是一种概念,告诉你Spring针对程序解耦的实现方法。
首先我们来详细说一下什么叫“控制反转”,分解为两个关键词:控制和反转
①传统的JavaSE中我们如果在一个对象引入其他对象,习惯用new,这样我们就可以用这个对象资源,而IOC则是将对象创建其他对象的控制权收到自己手中,当对象需要引用其他对象时,不需要我们new,IOC容器会为你创建,即将对象新建的控制拿在手里。
②所谓new对象是属于主动的行为,那么被动的获取对象就属于被动行为,从我们自己主动创建依赖对象到由容器控制创建以及注入依赖对象,就是一种反转。
下面图片很好的反应了这个过程:
当引入IOC容器后,用户不需要去创建这些类:
知道IOC原理以后,我们需要知道Spring 的IOC带给我们怎么样的变化:
实现组件之间的解耦,提高程序的灵活性和可维护性。
但是同时:
1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。
其次,我们来说一下“依赖注入”(DI)。
依赖注入其实与控制反转是从不同角度来说明IOC概念,两个对象之间的依赖关系在程序运行时由外部容器动态的注入依赖行为方式称为依赖注入 (DI) 。
①如果类A需要运用类B的方法或者属性,通俗的说他们之前存在依赖关系。
②当A运行时,IOC容器会将类B注入到A中,A不需要知道B什么时候创建以及怎么构造的。
对于IOC,我们只要明白"控制反转"以及"依赖注入"中的每个字的含义就行了,它代表的只是一种设计原理,并非那么高深。
首先我们来详细说一下什么叫“控制反转”,分解为两个关键词:控制和反转
①传统的JavaSE中我们如果在一个对象引入其他对象,习惯用new,这样我们就可以用这个对象资源,而IOC则是将对象创建其他对象的控制权收到自己手中,当对象需要引用其他对象时,不需要我们new,IOC容器会为你创建,即将对象新建的控制拿在手里。
②所谓new对象是属于主动的行为,那么被动的获取对象就属于被动行为,从我们自己主动创建依赖对象到由容器控制创建以及注入依赖对象,就是一种反转。
下面图片很好的反应了这个过程:
当引入IOC容器后,用户不需要去创建这些类:
知道IOC原理以后,我们需要知道Spring 的IOC带给我们怎么样的变化:
实现组件之间的解耦,提高程序的灵活性和可维护性。
但是同时:
1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。
其次,我们来说一下“依赖注入”(DI)。
依赖注入其实与控制反转是从不同角度来说明IOC概念,两个对象之间的依赖关系在程序运行时由外部容器动态的注入依赖行为方式称为依赖注入 (DI) 。
①如果类A需要运用类B的方法或者属性,通俗的说他们之前存在依赖关系。
②当A运行时,IOC容器会将类B注入到A中,A不需要知道B什么时候创建以及怎么构造的。
对于IOC,我们只要明白"控制反转"以及"依赖注入"中的每个字的含义就行了,它代表的只是一种设计原理,并非那么高深。
相关文章推荐
- 防御SQL注入攻击时需要注意的一个问题
- Sql2005注入辅助脚本[修改版]
- MySQL注入中导出字段内容的研究通过注入导出WebShell
- 浅析MySQL的注入安全问题
- sql server注入建立虚拟目录的方法
- PHP中怎样防止SQL注入分析
- C#使用带like的sql语句时防sql注入的方法
- mssql注入躲避IDS的方法
- Spring中属性注入详解
- ASP注入详细命令40条第1/2页
- Cookie 注入是怎样产生的
- 高级php注入方法集锦第1/2页
- Android中三种注入事件方法比较
- sql注入与转义的php函数代码
- 理解php依赖注入和控制反转
- C++封装远程注入类CreateRemoteThreadEx实例
- SQL注入全过程深入分析
- php中sql注入漏洞示例 sql注入漏洞修复
- .Net程序防止被注入代码(整站通用)分享
- ASP.NET数据库缓存依赖实例分析