1:AOP在项目中怎么用?何时用到?
1:何为IOC(DI)
IOC:(Intervation of contol)多译为控制反转。在面向对象设计的软件系统中,各个对象之间是通过相互合作调用,最终实现业务逻辑的。类似下图
对象之间的耦合关系是无法避免的,也是必须存在的,只有存在耦合关系我们才可以相互合作实现业务逻辑。虽然耦合度高会实现业务逻辑,但是当一个系统中存在大量的对象,之间耦合关系复杂,存在多重耦合的时候,这时系统的必然会存在更高的风险,因为当一个对象出现问题的时候可能会导致整个业务逻辑的瘫痪。因此耦合度需要尽量的底下,这就是IOC产生的原因。
当我们去创建对象的时候必须依赖BCD对象,IOC理论上的观点是使用第三方将有依赖的对象之间实现解耦的效果。类似下图2
图1 图2
我们利用第三方容器,也就是Ioc容器,来实现的ABCD四个对象的相互解耦,因此我们在利用ioc实现之后,当我们创建A对象的时候就不用再去考虑BCD对象的问题,从而实现解耦。而当我们的A对象使用到BCD对象中的任何一个的时候,这个时候,IOC就会主动创建一个所需的对象注入到A需要的地方。也就是当一个对象需要另一个对象的时候,其行为由主动获取转变为被动注入,控制权产生颠倒,这就是控制反转。
既然我们知道了IOC是控制反转,,那么到底是哪些方面被控制反转了?---“获得依赖对象的过程被反转了”
由此我们可以知道,依赖注入也就是反转的另一种说法,“可以动态的将某种依赖关系注入到对象中”。
IOC的底层实际上的基本技术就是“反射,XML文件解析(DOM,SAX,STAX),工厂模式”。
何为AOP?
AOP:(Aspect Oriented Programming)面向切面编程的简称。其是基于IOC的一种思想,我们可以在一个闭环的代码中向指定的切面插入我们附加的代码。
我们可以利用AOP对业务逻辑的各个部分进行隔离,降低业务的耦合度,提高程序的可重用型和开发效率,主要用于对同一对象的公用层次的建模。
是通过预编译方式和运行期动态代理实现,在不修改源代码的情况下,给程序统一添加功能的技术。
常见的通知:(切面采用@PointCut注解exceution属性去指定切面方法,无参无方法体的构造方法)
前置 @Before 方式执行前调用
后置 @After 方法执行后调用
返回 @AfterReturning 方法返回后调用
异常 @AfterThrowing 方法出现异常时调用
环绕 @Around 动态代理,手动推荐方法运行
我们可以在一个方法的执行前后采用环绕去实现程序执行时间的记录,也可以在使用过滤器(布隆过滤器)的时候采用AOP的方式。此外也可使用Aop进行日志记录。
参考:浅谈IOC--说清楚IOC是什么----ivan820819 CSDN 2002