本方案探讨了利用AspectJ技术对MyBatis Mapper进行代码层面监控和操作的方法,并分析其实际应用中的可行性和优势。
实现的大致步骤如下:
1. 我们的mapper层接口统一实现一个基础的Mapper接口。
2. 在定义Aspect切面时,使用this或者target关键字来匹配切入点:
```java
MethodInvocation methodInvocation = ExposeInvocationInterceptor.currentInvocation();
```
这里的`methodInvocation`有值是因为在Mapper代理增强的第一个就是ExposeInvocationInterceptor这个增强器会设置当前方法的MethodInvocation。
3. Aspect定义如下:
```java
@Aspect
@Order(value = Integer.MIN_VALUE + 3)
public class CustomAspect {
// 定义切点和通知逻辑
}
```
以上步骤中,`ExposeInvocationInterceptor.currentInvocation()`用于获取当前执行的方法信息。