首先:

AOP是一种思想,是一种面向切面编程的思想,AOP的主要作用就是,告诉我们可以通过动态代理的方式,织入一段代码到已经写到另一段代码中去。

再说:

SpringAop 和 AspectJ 都是两个框架,它主要就是通过AOP的思想,来实现面向切面编程。

因为动态代理的方式,不止一种,所以也出现了两个框架,其实实现的作用都是一样的。

但还是有区别:

springAOP是动态织入、AspectJ是静态织入 (静态织入的意思就是:运行AspectJ的代码,将需要被面向切面编程的代码生成出来,变成class文件。)

 

他们的核心就是: 动态代理。

 

很多老项目中出现了,Spring整合AspectJ很麻烦,有很多配置,那是因为AspectJ先出来,后来spring想,让你来和我的spring整合多麻烦呀,我自己写一个AOP的实现,所以出现了SpringAop,最开始spring其实也实现了aop,不过实现的不好,后来看AspectJ这个代码写的不错,然后就借用了AspectJ的语法,又实现了一遍,所以springaop其实是依赖AspectJ的,只不过依赖之后,配置简化了。

 

所以动态代理核心就是: 把程序员写好的逻辑代码拿过来,我用动态代理技术,把你要切入的代码 和 写好的逻辑代码,按照指定的规则,放到另外新生成一个类中,这种思想其实就叫做动态代理。

 

实现方式有很多啊,最笨的一种就是我把你们两个要整合的代码复制到另一个类种,然后我再编译一遍,那好,我实现了动态代理。就这么简单。这种用代码完成代码整合的编程思想,就叫做动态代理。

 

所以:

SpringAOP,AOP,AspectJ的关系就是: Aop是一种编程思想,SpringAop和AspectJ是对aop思想的具体实现,SpringAop借用了AspectJ的配置语法,所以现在直接使用AspectJ做动态代理的项目很少了,现在都是直接使用spring,spring内置了AspectJ。