aop,spring aop,aspectj区别与联系

来源:互联网 发布:烟台seo整站优化方案 编辑:程序博客网 时间:2024/05/16 06:33

       aop即面向方面的编程,类似于oop,是一种编程思想。aop的典型应用即spring的事务机制,日志记录。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各

部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。它的主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等;主要的意图是:将日志

记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这

些行为的时候不影响业务逻辑的代码。


        aspectj是aop的java实现方案。下面是几点关于aspectj的描述:

1)AspectJ是一个代码生成工具(Code Generator),其中AspectJ语法就是用来定义代码生成规则的语法。基于自己的语法编译工具,编译的结果是Java Class文件,运行的时候classpath需要包含AspectJ的一个jar文件(Runtime lib),支持编译时织入切面,即所谓的CTW机制,可以通过一个Ant或Maven任务来完成这个操作。

2)AspectJ有自己的类装载器,支持在类装载时织入切面,即所谓的LTW机制。使用AspectJ LTW有两个主要步骤,第一,通过JVM的-javaagent参数设置LTW的织入器类包,以代理JVM默认的类加载器;第二,LTW织入器需要一个 aop.xml文件,在该文件中指定切面类和需要进行切面织入的目标类

3)AspectJ同样也支持运行时织入,运行时织入是基于动态代理的机制。(默认机制)


       spring aop是aop实现方案的一种,它支持在运行期基于动态代理的方式将aspect织入目标代码中来实现aop。但是spring aop的切入点支持有限,而且对于static方法和final方

法都无法支持aop(因为此类方法无法生成代理类);另外spring aop只支持对于ioc容器管理的bean,其他的普通java类无法支持aop。同时spring整合了aspectj,使得在spring

体系中可以使用aspectj语法来实现aop。

        


2 0
原创粉丝点击