1.不同的定义
Ioc:控制反转(简称IoC)是面向对象编程中的一个设计原则,可以用来减少计算机代码之间的耦合。
Aop:面向方面编程,通过预编译和运行时动态代理实现程序功能统一维护的技术。
2.不同的功能
IOC:A类使用B类的对象B,一般需要在A的代码中显式新增一个B的对象。
采用依赖注入技术后,A的代码只需要定义一个私有的B对象,而不是通过new直接获取这个对象,而是通过相关的容器控制程序,将B对象从外部新建并注入到A类中的引用中,具体的获取方式以及获取时对象的状态由配置文件(如XML)指定。
Aop:日志记录、性能统计、安全控制、事务处理、异常处理等代码。与业务逻辑代码分离。通过分离这些行为,我们希望可以将它们分离成不指导业务逻辑的方法,这样当这些行为发生变化时,业务逻辑的代码就不会受到影响。
3.不同的实施项目
Ioc:现有的框架实际上使用了以下三种基本技术的框架来执行服务和组件之间的绑定:
类型1(基于接口): Serviceable对象需要实现一个特殊的接口,该接口提供了一个可以重用的对象来查找依赖项(其他服务)。早期的容器神剑就采用了这种模式。
类型2(基于setter):通过JavaBean属性(setter方法)为可服务对象指定服务。HiveMind和Spring采用这种方法。
类型3(基于构造函数):通过构造函数的参数为可服务对象指定服务。PicoContainer只使用这个方法。HiveMind和Spring也使用这种方法。
AOP: AOP是一个概念,没有具体的语言实现。它可以克服只有单一继承特性的语言(如Java)的缺点。AOP的具体实施包括以下项目:
AspectJ (TM):成立于施乐PARC。有近十年的历史,成熟。
缺点:太复杂;销毁包裹;需要一个专用的Java编译器。
动态AOP:使用JDK的动态代理API或字节码字节码处理技术。
基于动态代理API的具体项目有:
JBoss 4.0 JBoss 4.0服务器
基于Bycode的项目包括:
春天
参考资料:百度百科-AOP
参考资料:百度百科-国际奥委会