代理生成中如何查找Bean适用的Advisor
提示:
在确认Advisor是否适用Bean时,在Class层和Method层确认方向上是相反的:
1.Class层:当前Class是否在不匹配的集合内,是的话返回false;
2.Method层:当前Class层中只有有一个方法适用,就返回true;
这样做的原因是因为我们PointCut中是由ClassFilter和MethodMatcher两
部分组成的。像在使用事务时,@Transaction在方法上标注就使用事务,不对
Class层做任何限制(此时为ClassFilter.TRUE),如果使用Class匹配的集
合内,就会导致大量非期望执行点包含进来了。
---这里充满了智慧,耐心理解
查找Bean适用的Advisor时序图如下:
AopUtils部分源代码如下:
最终结果不外乎两种:一种没找到,说明不用AOP代理;另一种是找到了,找到了就可以使用运用Spring生成AOP动态代理对象的基础设施来生成代理对象了,具体参:迈进AOP的大门,动态代理对象生成方式-Jdk版,动态代理对象生成方式-Cglib版。看完Bean的匹配,我们再细粒度看下:代理运行中如何查找方法适用的Advisor。
快速导航: