Spring中AOP的相关概念

Spring中AOP的相关概念

摘要

通过一些spring的小demo来解释, 切面 ,连接点, 切入点, 通知, 目标对象, 代理, 织入

中文翻译比较多, 英文如下: Aspect, Joinpoint , Pointcut, Advice, Target ,Object ,Proxy Weaving

这一组重要的概念.

案例

public class ProductService {
    public void doSomeService(){
        System.out.println("doSomeService");
    }
}

比如如上一个功能, 我们想在它的前后加一点操作, 如Spring AOP一文中提到, 可以使用代理.

public class Proxy {
    private ProductService s;
    public Proxy(ProductService s) { this.s = s; }
    public void login() {
        beforeService();
        s.doSomeService();
        afterService();
    }
    private void beforeService(){}
    private void afterService(){}
}

以上很简单, 就是在productService上套一层. 然后在s.doSomeService()之前后, 执行一些自定义操作.

对于这个案例而言, 可以很好的理解 Aspect, Joinpoint , Pointcut, Advice, Target ,Object ,Proxy Weaving这组概念.

概念对应

辅助理解

Spring中AOP的相关概念

简单部分

  1. 切面, Aspect:

    切面其实就是以上代理中的全部逻辑, 核心业务之前, 之后, 执行中, 这期间我们需要的所有操作, 就是我们要编写的切面

  2. 目标, target 及代理, proxy:

    目标就是ProductService, 即被代理对象, 代理就是代理对象.

重点关键部分

  1. 连接点及切入点, Joinpoint 及Pointcut,

    代码中所有方法的调用时刻都是一个可能的连接点, 而我们选中编写前后操作的方法调用的时刻则是切入点, 如以上, doSomeService就是一个连接点, 也是被我们选中的切入点

  2. 通知, Advice

    通知, 也翻译为通知增强, 其实就是指切面的具体实现, 可以理解为在方法的前后加一些通知, 增强功能.

  3. 编织, Weaving

    理解编织, 首先得理解一些核心业务和辅助业务, 不懂可以看看Spring AOP一文中的相关解释, 简单来说辅助业务就是一些通用的检查权限, 记录日志等等功能.

    编织其实就是指, 我们指明那些核心业务前后或执行中需要和执行哪些辅助业务, 将两者联系在一起, 这就是编织了