乐趣区

关于java:重学Spring笔记二SpringAOP

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 的概念:

面向切面的编程

退出移动版