0. 问题引入

理论生产环境中,存在着在现有运行我的项目性能的业务逻辑上,须要拓展新增业务性能的状况,此时大概率咱们改的我的项目不是咱们开发的,有可能存在以下问题:

  1. 有我的项目源代码:此时须要费时费力去浏览原来的源代码,弄懂有可能较为简单的业务逻辑,而后再来新增业务代码。可是……看懂代码可能须要一周,但领导要求三天搞定………………
  2. 我的项目长远已无源代码:此时真是头大了,想不吃不喝去啃他人代码的机会都没……

那么,问题就来了,怎么办???SpringAOP就呈现了

1. SpringAOP的解决方案

比方上图所示,须要扩大的是A对象的testA()办法。SpringAOP的具体解决思路:

  1. 为咱们创立了同样实现C接口的B对象;
  2. 在对象B中申明扩大前的接口属性和扩大后的接口属性
  3. 在对象B中申明接口C的属性
  4. 重写要扩大的办法
  5. 在重写的办法中调用扩大前的办法和原有的办法以及扩大后的办法
  6. 将B类配置为Bean对象,并依照规定组装A和E、F

2. SpringAOP的SchemaBase形式实现

2.1 基本思路

咱们将要进行性能扩大相干的资料以及对应的组织规定通知Spring容器,Spring容器帮咱们动态创建一个代理对象。咱们间接从Spring容器中获取代理对象实现性能开发。

2.1 具体实现

2.1.1 导入Jar包

2.1.2 在src下创立包advice,并创立前置告诉类和后置告诉类

前置告诉类:
创立一个一般的java类,实现MethodBeforeAdvice接口,重写before办法,在before办法中申明扩大前的逻辑代码。

后置告诉类:
创立一个一般的Java类,实现AfterReturningAdvice接口,重写after办法,并在after办法中申明扩大后的逻辑代码。

2.1.3 在applicationcontext.xml文件中配置资源的bean对象以及申明组装规定

资源对象:

  1. 要进行性能扩大的bean对象
  2. 前置告诉的bean对象
  3. 后置告诉的bean对象

申明组装规定:(应用AOP标签实现)

  1. 申明切点
  2. 申明组装

2.1.4 从Spring容器中间接获取代理对象实现性能开发

留神:如果让Spring容器对象某个bean对象依照AOP进行性能扩大,则从Spring容器中应用该对象的ID获取的对象曾经不是其自身了,而是他的代理对象

3.SpringAOP的业余概念

  • 实在对象:

要进行性能扩大的对象,相当于A对象

  • 代理对象:

实现性能扩大的对象,相当于B对象.

  • 切点:

要进行性能扩大的办法,相当于testA()办法

  • 前置告诉办法:

在切点之前执行的扩大办法

  • 后置告诉办法:

在切点之后执行的扩大办法

  • 切面:

由前置告诉+切点+后置告诉造成的横向执行的面

  • 织入:

由前置告诉+切点+后置告诉造成切面的过程

  • AOP的概念:

面向切面的编程