ioc 的思考
开始学spring时,spring两大特性IOC 和AOP ,ioc的解释是:
IoC (Inversion of Control) 中文译为控制反转 又称为“依赖注入”—I =Dependence Injection)
IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。
其原理是基于OO设计原则的The Hollywood Principle:Don't call us, we'll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。
简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。AOP的解释是:
面向切面编程:Aspect Oriented Programming
AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面编程。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
上面这些概念都是我们开始学的时候,的一些理论知识,其实刚开始谁也不会完全懂这些。本篇文章主要解释IOC,对AOP只是介绍下。扯远点,谈谈面向对象和面向过程。为什么面向对象优于面向过程。其实就是在软件开发的过程中,软件变化的地方越来越多。各种各样的变化。导致用传统面向过程的设计。并不能适应软件变化越来越多。变的越来越庞大的需求。面向过程的程序设计方法并不是不好。如果我们的软件一开发出来就定型了,没有变化升级 了,我个人觉得面向对象和面向过程在某些方面应该没有区别,面向对象的优点就是它对应于软件开发过程中的变化,能够比面向过程更好的适应。更好的扩展系统。来适应变化。我觉得一句话概括:面向对象比面向过程能更好的适应变化,其实包含本篇讲的IOC,也是这样。如果软件开发中没有变化,IOC也就没有什么用。包括设计模式。AOP,软件的模式等等。我们首先要学会对比分析。首先要学会假设,学会假设需求的变化。这样才能更好的理解设计模式。IOC,AOP等这些经典的思想。扯远了,回到本文的讨论。举个例子。下面例子一步步的变化。注意变化后与上次对比,
好在哪里。这样我们才能够更好的理解IOC思想。举一个人去北京,他可以坐火车,汽车,飞机等工具的例子。类如下: