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这组概念.
概念对应
辅助理解
简单部分
-
切面, Aspect:
切面其实就是以上代理中的全部逻辑, 核心业务之前, 之后, 执行中, 这期间我们需要的所有操作, 就是我们要编写的切面
-
目标, target 及代理, proxy:
目标就是ProductService, 即被代理对象, 代理就是代理对象.
重点关键部分
-
连接点及切入点, Joinpoint 及Pointcut,
代码中所有方法的调用时刻都是一个可能的连接点, 而我们选中编写前后操作的方法调用的时刻则是切入点, 如以上, doSomeService就是一个连接点, 也是被我们选中的切入点
-
通知, Advice
通知, 也翻译为通知增强, 其实就是指切面的具体实现, 可以理解为在方法的前后加一些通知, 增强功能.
-
编织, Weaving
理解编织, 首先得理解一些核心业务和辅助业务, 不懂可以看看Spring AOP一文中的相关解释, 简单来说辅助业务就是一些通用的检查权限, 记录日志等等功能.
编织其实就是指, 我们指明那些核心业务前后或执行中需要和执行哪些辅助业务, 将两者联系在一起, 这就是编织了