一、什么是AOP?
aop技术是面向切面编程思想,作为OOP的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想。AOP底层也是面向对象;只不过面向的不是普通的Object对象,而是特殊的AOP对象。AOP的关注点是组成系统的非核心通用服务模块(比如登录检查等),相对于普通对象,aop不需要通过继承、方法调用的方式来提供功能,只需要在xml文件中以引用的方式,将非核心服务功能引用给需要改功能的核心业务逻辑对象或方法中。最终实现对象的解耦。spring 中ioc技术实现了核心业务逻辑对象之间的解耦(如LoginAction与DaoImpl)
二、AOP相对于OOP有什么好处?
OOP,面对对象编程思想。OOP的问题不存在于开发阶段,在开发阶段和首次测试阶段中,使用OOP是效率最高也是最简单的一种方式。OOP问题体现在软件开发完毕之后的二次测试阶段,软件修改完毕之后,需要对软件中修改的方法进行重新测试,之后才可以上线运行。这时测试的对象是当前修改的方法 以及 和该方法具有级联/依赖关系的所有的其他方法。这样做显然了延长二次测试周期。 而使用aop在二次测试时,因为他是配置在xml文件中的,所以并不需要测试相关的所有类。
三、spring中如何使用aop?
我们使用一个例子来介绍下如何在spring中使用aop,
这里我们提供一个类StuAction,为这个类中的核心业务逻辑方法(addStu、delStu)添加登录检查的功能。
spring中的AOP技术提供了四种基本类型的通知:
- before通知 ~ 核心方法执行之前的通知 MethodBeforeAdvice
- after通知 ~ 核心方法执行之后的通知 AfterReturningAdvice
- around通知 ~ 核心方法执行时的通知before+after filter、interceptor都是一种around通知 MethodInterceptor
- throws通知 ~ 核心方法执行出现异常之后执行的通知 ThrowsAdvice
这四种通知我们都来测试下:
注意:在测试athrows通知时把StuAction中的int i = 1/0;
取消注释,我们创建一个异常来进行测试。
另外,after通知主要用来核心方法调用结束后输出日志,所以这里用到了log4j 。
log4j.properties
好了,准备工作完毕,那我们如何在spring容器中配置aop呢?
重点的来了!
在applicationContext.xml中配置aop:
首先导入spring 中aop下所有包,log4j 包
使用test类测试一下:
结果如下: