Spring-AOP的设计与实现
标签:Spring

AOP的设计与实现

Aspect是一种新的模块化机制,用来描述分散在对象,类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面的程序设计的核心概念。

分离关注点使解决特定领域问题的代码业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过切面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好的管理起来了。

1. 三要素

**Advice通知:**Advice定义在连接点做什么,为切面增强提供织入接口。接口定义在 org.aopalliance.aop.Advice中,如下面的BeforAdvice,定义了一个为待增强的目标方法设置的前置增强接口 MethodBeforeAdvice 里面放置一个回调接口:

	void before(Method method, Object[] args, @Nullable Object target) throws Throwable;

Pointcut切点:切点决定Advice通知应该作用于那个连接点,也就是说通过Pointcut来定义需要增强的方法的集合,这些集合的选取可以按照一定的规则来完成(比如可以按照正则表达式来选取)。

Advisor通知器:完成对目标方法的切面增强设计(Advice)和关注点的设计(Pointcut)以后,需要一个对象把他们结合起来,完成这个功能的就是Advisor(通知器)。通过Advisor,可以定义应用使用哪个通知并在哪个关注点使用它。

2. 建立AopProxy代理对象

配值ProxyFactoryBean 可以参见:Spring-Spring-AOP使用

然后采用两种方式生成AopProxy对象,如果目标对象实接口类,那么适合使用JDK来生成代理对象,否者Spring会使用CGLIB来生成目标对象的代理对象。

具体的可以参见 Spring-AOP简介与代理方式

生成完代理对象后,就是配置拦截器的调用

3. Spring AOP拦截器的调用

未完。。。

  • 3 min read

CONTRIBUTORS


  • 3 min read