springソースの勉強シリーズ1.2-spring事務代理店の分析2


もっと読む
ヒント:
BeanPostProcessor
AopUtils
プロキシモード
springでは、などの配置が複雑に見えるが、本質はPointCutであり、BeanPostProcessorであり、AbstractAutoxyCreatorである.
検索したAdvisorはテンプレート方法の設計モードと委託モードを使って、プロキシ類を作成してプロキシモードを使いました.
解析:
-TxNamespace Handler
この設定は実際にいくつかのbeanDefinitionを登録しています.
Infrastructure AdvisoorAutoxyCreator-BeanPostProcess
AnnotationTransation AttributeSource-Pointcutに拡張できます.
Transaction Interceptor-MethodInterceptor
Transaction AttributeSourceAdvisor-Advisor(Transaction AttributeSourcePoint cutを持つ)
beanの実装後、BenPostProcess.postProcess After Initiazationを起動します.
1.まずすべてのadvisorを調べます.
2.advisorの中のpointcutに基づいて、beanがこのadvisorに合うかどうかをチェックし、methodInterceptorに戻ります.
3.methodInterceptorを通過する
アダプターモードはadvisorsに実装されています.(ここのmethodInterceptorは広義的な概念です.adviceなどかもしれません.)
4.advisorsをadvisedSupportにカプセル化し、
ProxyFactory(AdviedSupport)生成代理を依頼します.
ProxyFactory
AopProxyFactory(InvocationHandler)生成代理を依頼します.
-AopNamespace Handler
この構成はAnnotationAwareAspect JAxyCreatorを定義したbeanです.
-AopNamespace Handler
この設定は実際にいくつかのbeanDefinitionを登録しています.
AsppectJAwareAdvisoorAutoxyCreator-BeanPostProcessor
AsppectJExpressionPointcut-Pointcut
Default BeanFactory PointcutAdvisor-Advisor
議論:
ここに登録されているいくつかのBeanPostProcessorはAbastractAutoxyCreatorを引き継いでいます.AbastractAutoProxyCreatorを採用しました.
テンプレート方法設計モードは、テンプレート方法においてプロキシを生成する一連のステップを定義し、サブクラスによって検索マッチングを実現するAdvisorのプロセスを実行する.
AopUtilsを使って適当なAdvisorを探します.
public static List findAdvisorsThatCanApply(List candidateAdvisors, Class> clazz){
...
}
PointCutインターフェース設計:
public interface Pointcut {

	/**
	 * Return the ClassFilter for this pointcut.
	 * @return the ClassFilter (never {@code null})
	 */
	ClassFilter getClassFilter();

	/**
	 * Return the MethodMatcher for this pointcut.
	 * @return the MethodMatcher (never {@code null})
	 */
	MethodMatcher getMethodMatcher();


	/**
	 * Canonical Pointcut instance that always matches.
	 */
	Pointcut TRUE = TruePointcut.INSTANCE;

}