Spring框架学习[AOP通知以及编程式AOP ](六)

2014-11-24 03:05:50 · 作者: · 浏览: 8
tPointcutAdvisor(advice); } } throw new UnknownAdviceTypeException(advice); } //获取通知器的通知 public MethodInterceptor[] getInterceptors(Advisor advisor) throws UnknownAdviceTypeException { List interceptors = new ArrayList (3); //通知通知器的通知 Advice advice = advisor.getAdvice(); //如果通知是方法拦截器类型,则不需要适配,直接添加到通知集合中 if (advice instanceof MethodInterceptor) { interceptors.add((MethodInterceptor) advice); } //对通知进行适配,从适配器中获取封装好AOP编制功能的拦截器 for (AdvisorAdapter adapter : this.adapters) { if (adapter.supportsAdvice(advice)) { interceptors.add(adapter.getInterceptor(advisor)); } } if (interceptors.isEmpty()) { throw new UnknownAdviceTypeException(advisor.getAdvice()); } return interceptors.toArray(new MethodInterceptor[interceptors.size()]); } //注册通知适配器 public void registerAdvisorAdapter(AdvisorAdapter adapter) { this.adapters.add(adapter); } }

从上述代码获取通知源码分析中我们看到,DefaultAdvisorAdapterRegistry的getInterceptors方法中,需要将AOP配置的通知封装为通知适配器,下面我们继续分析通知适配器的主要源码和功能。

4.通知适配器:

通知适配器AdvisorAdapter对通知进行封装,为通知提供Spring AOP的增强功能,下面我们以MethodBeforeAdviceAdapter为例,分析通知适配器的具体功能:

(1).MethodBeforeAdviceAdapter源码:

[java] view plaincopyprint class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable { //检查通知是否为通知适配器适配的通知类型 public boolean supportsAdvice(Advice advice) { return (advice instanceof MethodBeforeAdvice); } //获取通知拦截器 public