AOP和IOC的区别 电脑版发表于:2022/3/27 20:55 二者没有联系。ioc是控制反转,aop是面向事务。 IOC就是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是通过容器生成,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期。 AOP技术它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 1、定义不同 ioc:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 aop:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 2、功能不同 ioc:Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。 采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。 aop:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。 ![](https://img.tnblog.net/arcimg/xiuxin/d075b2658a2c41139708c1c4da7c1807.png) 3、实现项目不同 ioc:现有的框架实际上使用以下三种基本技术的框架执行服务和部件间的绑定: 类型1 (基于接口): 可服务的对象需要实现一个专门的接口,该接口提供了一个对象,可以重用这个对象查找依赖(其它服务)。早期的容器Excalibur使用这种模式。 类型2 (基于setter): 通过JavaBean的属性(setter方法)为可服务对象指定服务。HiveMind和Spring采用这种方式。 类型3 (基于构造函数): 通过构造函数的参数为可服务对象指定服务。PicoContainer只使用这种方式。HiveMind和Spring也使用这种方式。 aop:AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java),AOP具体实现有以下几个项目: AspectJ (TM): 创建于Xerox PARC. 有近十年历史,成熟 缺点:过于复杂;破坏封装;需要专门的Java编译器。 动态AOP:使用JDK的动态代理API或字节码Bytecode处理技术。 基于动态代理API的具体项目有: JBoss 4.0 JBoss 4.0服务器 基于字节码的项目有: aspectwerkz ,spring 原文:https://www.cnblogs.com/gxyjava/p/11832931.html