Fork me on GitHub

tinySpring-Aop-分析笔记(2)

tinySpring Aop 分析笔记(2)

项目学习地址:code4craft/tiny-spring

step-8-invite-pointcut-and-aspectj

  • step-8 新增了对AspectJExpressionPointcut这个类。
    • 它使用 AspectJ 表达式进行匹配。
    • 实现了Pointcut, ClassFilter, MethodMatcher三个接口。
    • 首先拿到一个PointcutParser,是用来解析 expression 的。
    • 解析传入的expression,拿到一个PointcutExpression的实现类。
    • ClassFilter 表示与表达式匹配的类;
    • MethodMatcher 查找与表达式匹配的方法;
    • Pointcut 表示获取的是方法还是类。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
public void testClassFilter() throws Exception {
String expression = "execution(* us.codecraft.tinyioc.*.*(..))";
AspectJExpressionPointcut aspectJExpressionPointcut = new AspectJExpressionPointcut();
aspectJExpressionPointcut.setExpression(expression);
boolean matches = aspectJExpressionPointcut.getClassFilter().matches(HelloWorldService.class);
Assert.assertTrue(matches);
}

@Test
public void testMethodInterceptor() throws Exception {
String expression = "execution(* us.codecraft.tinyioc.*.*(..))";
AspectJExpressionPointcut aspectJExpressionPointcut = new AspectJExpressionPointcut();
aspectJExpressionPointcut.setExpression(expression);
boolean matches = aspectJExpressionPointcut.getMethodMatcher().matches(HelloWorldServiceImpl.class.getDeclaredMethod("helloWorld"),HelloWorldServiceImpl.class);
Assert.assertTrue(matches);
}

评价:step-8 引入了 AspectJ 表达式,但是还没有将切点表达式这个类放入到ProxyAdvisor类中。

step-9-auto-create-aop-proxy

暂停更新

-------------The End-------------