记得有次面试中面试官问到,跟我谈谈spring aop,当时我就闷了,当时脑海里只浮现出切入点、切面、引入、通知等等一些很模糊的概念,于是结果可想而知。所以最近用下心来为自己做下记录方便以后查看(为以后的面试做好准备,呵呵),如果以下有什么疏忽的地方或者写的不好的地方,还请发现者多多指导。
什么是AOP
AOP(Aspect-OrientedProgramming),也就是面向切面编程。也可以这样理解,学java的应该都知道面向对象编程(oop),而OOP是从静态解读考虑程序结构,但AOP是从动态角度考虑程序运行过程。也可以说AOP是OOP的补充和完善。OOP引入了封装、继承和多态性等概念来建立一种对象层次结构, 用以模拟公共的一个集合。当我们需要为分散的对象引入公共行为的时候,则OOP显得无能为力了。也就是说,OOP允许你定义从上到下的关系,但并不适合从左到右的关系,例如日志功能。日志代码往往水平的散步在所有对象层次中,而与它所散步到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切代码,在oop设计中,他导致了大量代码的重复,而不利于各个模块的重用。
而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将哪些影响了多个类的公共行为封装到一个可重用模块,并将其名为‘Aspect‘,及方面。 所谓"方面",简单的来说就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来。便于减少系统的重复代码,降低模块间的耦合度等。
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取信息的方式,对该信息进行装饰,以取代鱼油对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
AOP的相关概念
方面:一个关注点的模块化,这个关注点实现可能另外横切多个对象。事物管理是J2EE应用中一个很好的很横切关注点例子。
连接点:程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
通知:在特定的连接点上AOP框架执行的动作。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice
切入点:指定一个通知将被引发的一系列连接点的集合。
引入:添加方法或字段到被通知的类。
目标对象:含连接点的对象。pojo
AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。
织入(Weaving): 组装方面来创建一个被通知对象。
AOP配置
这个可以参考其他地方的写法,这里就不多叙述了。
参考文章地址:http://blog.csdn.net/moreevan/article/details/11977115