Spring --- AOP

来源:互联网 发布:ios开发需要学linux 编辑:程序博客网 时间:2024/05/20 00:17
一)什么是AOP
AOP(Aspect Oriented Programming) 面向切面编程(也叫面向方面)。众所周知,我们的编程语言从最初的面向过程编程(C)发展到了面向对象编程(C++,Java),而面向方面编程则可以视为对其编程理念的又一次发展。
在面向过程编程时,我们是这样思考的:第一步我们做什么,第二步我们做什么,第三步...,于是代码的一个个方法就按步就班的生成了。但经过众高手的反复实践,发现这样思考编程在实际中好像更简便更清晰:第一步我们实现的功能会有哪些对象,第二步这些对象各有哪些特性(属性)可以完成哪些事情(方法),第三步将这些设计合理的对象组织起来形成功能程序。这便是面向对象编程。又经过长时间的众高手的实践总结,发现部分情况下这样思考编程可能还会更好:第一步问题有几个方面(比如 日志 性能统计 事务处理等待),第二步对每个方面的功能做统一逻辑处理。这便是AOP的思想。
就像我们在OOP时也会有面向过程的代码融入其中一样。我们面向方面编程时也会融入面向对象甚至是面向过程的代码在里面。也许这样的融入有好有坏,但这至少绝不妨碍代码的准确运行。这三者虽然依次递进,但却不互相排斥。
而AOP与OOP关系的特别之处在于,AOP也许还处于一个不完全的发展期,它还只能有条件的部分取代OOP编程,而不能像OOP那样全方位的接替面向过程。所以有时候可能给人的感觉是它只是基于OOP的部分改进(也许这么说也对 = =!)。
那么,到底什么是AOP?就像面向对象的对象啦、属性啦、继承啦这些概念一样,要搞懂AOP首先要知道AOP的一些常用概念:
切面(Aspect)
连接点(Joinpoint)
通知(Advice)
切入点(Pointcut)
引入(Introduction)
目标对象(Target Object)
AOP代理(AOP Proxy)
织入(Weaving)
这些概念具体什么意思,稍后会结合例子说明,现在么先混个眼熟,哈哈~~

二)不得不说的AspectJ
说到面向过程,我们知道有C。说到面向对象,我们知道有C++ Java。那么说到面向方面,我们有什么与之对应呢?我想勉强应该就是AspectJ了吧。因为最后的一个"J"说明了它与java有着千丝万缕的联系!
它有自己的语法AspectJ Lanuage(http://www.eclipse.org/aspectj/doc/released/progguide/index.html)
它需要有自己的编辑器(= =!其实不是自己的,而是基于java编辑器的...)
Eclipse为它专门开发了一个插件组AJDT: The AspectJ Development Tools,用于使用AspectJ的开发。
你完全可以用AspectJ独立的开发程序。但你还需要知道的是:
1 AspectJ代码编译后生成.class文件,与java编译器可以兼容
2 在合适的JDK版本下,引入aspectjrt.jar即可使用AspectJ开发。其开发模式与java无异,只是语法不同。显然,AspectJ还没有完全独立,它是基于java拓展而来的一个框架。虽然它实现的是AOP的思想概念。

三)Spring AOP
终于讲到主题了。Spring在很早其实就提供了AOP开发的功能。虽然你使用的是OOP的java语言,但通过一些巧妙的设计,我们是可以部分使用AOP的理念的。但不巧的是那时候Spring 把它叫做“拦截器”(Interceptor)而不是切面(aspect)。Spring 2.0以后,为了与AOP的理论寻求统一,所以spring增加了两种AOP的配置方式schema-based approach和@AspectJ annotation style。它们在概念名称甚至一些使用上已经与AspectJ基本一致了,只是AOP的实现上Spring完全采用了自己的方式。如果你想在Spring中使用AspectJ框架,功能强大的Spring也提供了相应的注入方式。
所以总结而言,在Spring中使用AOP,你有如下选择:
AOP-----Spring AOP(实现方式其实还分CGLIB和动态代理两种) ----- Spring AOP APIs
| |
| |
| --- schema-based approach(Spring 2.0以后)
| |
| |
| --- @AspectJ annotation style(Spring 2.0以后)
|
|
---AspectJ ------- schema-based approach(Spring 2.0以后)
|
|
--- @AspectJ annotation style(Spring 2.0以后)

四)后续的一点说明
既然本文的主旨是说Spring AOP的。那无非就是再对以上5种AOP的形式详加介绍了。在本文的第二部分我们先说Spring AOP---schema-based approach。这应该是目前最常用的一种形式了。通过它,我们也可以进一步说明什么是AOP以及AOP的一些概念。 而后介绍Spring AOP APIs,很多用spring的老项目估计会使用到它,所以也有必要了解。Spring AOP ---@AspectJ annotation style放最后。在介绍完以上3种的基础上,相信再说明AspectJ的引用方式就方便许多了。 
原创粉丝点击