Spring系列之AOP基本主要類概述

木葉之榮發表於2018-03-18

在這篇文章中我將對自己瞭解的AOP中的基本主要類做一個概述,可能不包括一些AOP高階用法的類以及是自己還不瞭解的類。會不定期的進行補充和修改。

SpringAOP基礎解析類

類名 作用概述
AopNamespaceHandler AOP名稱空間解析類。我們在用AOP的時候,會在Spring配置檔案的beans標籤中引入:xmlns:aop
AspectJAutoProxyBeanDefinitionParser 解析<aop:aspectj-autoproxy />標籤的類。在AopNamespaceHandler中建立的類。
ConfigBeanDefinitionParser 解析<aop:config /> 標籤的類。同樣也是在AopNamespaceHandler中建立的類。
AopNamespaceUtils AOP名稱空間解析工具類,在上面兩個中被引用。
AopConfigUtils AOP配置工具類。主要是向Spring容器中注入可以生成Advisor和建立代理物件的bean

20180318112954851

AOP聯盟中定義的一些類:

類名 作用概述
Advice AOP聯盟中的一個標識介面。通知和Interceptor頂級類。我們說的各種通知型別都要實現這個介面。
Interceptor AOP聯盟中進行方法攔截的一個標識介面。是Advice的子類。
MethodInterceptor 方法攔截器。是Interceptor的一個重要子類。主要方法:invoke。入參為:MethodInvocation
ConstructorInterceptor 構造方法攔截器。是Interceptor的另一個重要的子類。在AOP聯盟中是可以對構造方法進行攔截的。這樣的場景我們應該很少用到。主要方法為:construct入參為ConstructorInvocation
Joinpoint AOP聯盟中的連線點類。主要的方法是:proceed()執行下一個攔截器。getThis()獲取目標物件。
Invocation AOP攔截的執行類。是Joinpoint的子類。主要方法:getArguments()獲取引數。
MethodInvocation Invocation的一個重要實現類。真正執行AOP方法的攔截。主要方法:getMethod()目標方法。
ConstructorInvocation Invocation的另一個重要實現類。執行構造方法的攔截。主要方法:getConstructor()返回構造方法。

Advice

SpringAOP中定義的類

類名 作用概述
Advisor SpringAOP中的核心類。組合了Advice。
PointcutAdvisor SpringAOP中Advisor的重要子類。組合了切點(Pointcut)和Advice。
InstantiationModelAwarePointcutAdvisorImpl PointcutAdvisor的一個重要實現子類。
DefaultPointcutAdvisor PointcutAdvisor的另一個重要實現子類。可以將Advice包裝為Advisor。在SpringAOP中是以Advisor為主線。向Advice靠攏。
Pointcut SpringAOP中切點的頂級抽象類。
TruePointcut Pointcut的一個重要實現類。在DefaultPointcutAdvisor中使用的是TruePointcut。在進行切點匹配的時候永遠返回true
AspectJExpressionPointcut Pointcut的一個重要實現類。AspectJ語法切點類。同時實現了MethodMatcher,AspectJ語法切點的匹配在這個類中完成。
AnnotationMatchingPointcut Pointcut的一個重要實現類。註解語法的切點類。
JdkRegexpMethodPointcut Pointcut的一個重要實現類。正則語法的切點類。
MethodMatcher 切點匹配連線點的地方。即類中的某個方法和我們定義的切點表示式是否匹配、能不能被AOP攔截
TrueMethodMatcher 用於返回true
AnnotationMethodMatcher 帶有註解的方法的匹配器
JdkRegexpMethodPointcut 正規表示式
Advised SpringAOP中的又一個核心類。它組合了Advisor和TargetSource即目標物件
ProxyConfig SpringAOP中的一個核心類。在Advised中定義了一系列的配置介面,像:是否暴露物件、是否強制使用CGlib等。ProxyConfig是對這些介面的實現,但是ProxyConfig卻不是Advised的實現類
AdvisedSupport Advised的一個實現類。SpringAOP中的一個核心類。繼承了ProxyConfig實現了Advised。
ProxyCreatorSupport AdvisedSupport的子類。引用了AopProxyFactory用來建立代理物件。
ProxyFactory ProxyCreatorSupport的子類。用來建立代理物件。在SpringAOP中用的最多。
ProxyFactoryBean ProxyCreatorSupport的子類。用來建立代理物件。它實現了BeanFactoryAware、FactoryBean介面
AspectJProxyFactory ProxyCreatorSupport的子類。用來建立代理物件。使用AspectJ語法。
ProxyFactory、ProxyFactoryBean、AspectJProxyFactory這三個類的使用場景各不相同。 但都是生成Advisor和TargetSource、代理物件的關係。
ProxyProcessorSupport ProxyConfig的子類
AbstractAutoProxyCreator ProxyProcessorSupport的重要子類。SpringAOP中的核心類。實現了SmartInstantiationAwareBeanPostProcessor、BeanFactoryAware介面。自動建立代理物件的類。我們在使用AOP的時候基本上都是用的這個類來程式Bean的攔截,建立代理物件。
AbstractAdvisorAutoProxyCreator AbstractAutoProxyCreator的子類。SpringAOP中的核心類。用來建立Advisor和代理物件。
AspectJAwareAdvisorAutoProxyCreator AbstractAdvisorAutoProxyCreator的子類。使用AspectJ語法建立Advisor和代理物件。
AnnotationAwareAspectJAutoProxyCreator AspectJAwareAdvisorAutoProxyCreator的子類。使用AspectJ語法建立Advisor和代理物件的類。<aop:aspectj-autoproxy />標籤預設注入到SpringAOP中的BeanDefinition。
InfrastructureAdvisorAutoProxyCreator AbstractAdvisorAutoProxyCreator的子類。SpringAOP中的核心類。基礎建設類。Spring事務預設的建立代理物件的類。
TargetSource 持有目標物件的介面。
SingletonTargetSource TargetSource的子類。適用於單例目標物件。
HotSwappableTargetSource TargetSource的子類。支援熱交換的目標物件
AbstractRefreshableTargetSource TargetSource的子類。支援可重新整理的熱部署的目標物件。
AbstractBeanFactoryBasedTargetSource TargetSource的子類。實現了BeanFactoryAware介面。
SimpleBeanTargetSource AbstractBeanFactoryBasedTargetSource的子類。從BeanFactory中獲取單例Bean。
LazyInitTargetSource AbstractBeanFactoryBasedTargetSource的子類。從BeanFactory中獲取單例Bean。支援延遲初始化。
AbstractPrototypeBasedTargetSource AbstractBeanFactoryBasedTargetSource的子類。對Prototype型別的Bean的支援。
ThreadLocalTargetSource AbstractPrototypeBasedTargetSource的子類。和執行緒上下文相結合的類。
PrototypeTargetSource AbstractPrototypeBasedTargetSource的子類。從BeanFacory中獲取Prototype型別的Bean。
AopProxy 生成AOP代理物件的類。
JdkDynamicAopProxy AopProxy的子類。使用JDK的方式建立代理物件。它持有Advised物件。
CglibAopProxy AopProxy的子類。使用Cglib的方法建立代理物件。它持有Advised物件。
ObjenesisCglibAopProxy CglibAopProxy的子類。使用Cglib的方式建立代理物件。它持有Advised物件。
AopProxyFactory 建立AOP代理物件的工廠類。選擇使用JDK還是Cglib的方式來建立代理物件。
DefaultAopProxyFactory AopProxyFactory的子類,也是SpringAOP中唯一預設的實現類。
AdvisorChainFactory 獲取Advisor鏈的介面。
DefaultAdvisorChainFactory AdvisorChainFactory的實現類。也是SpringAOP中唯一預設的實現類。
AdvisorAdapterRegistry Advisor適配註冊器類。用來將Advice適配為Advisor。將Advisor適配為MethodInterceptor。
DefaultAdvisorAdapterRegistry AdvisorAdapterRegistry的實現類。也是SpringAOP中唯一預設的實現類。持有:MethodBeforeAdviceAdapter、AfterReturningAdviceAdapter、ThrowsAdviceAdapter例項。
AutoProxyUtils SpringAOP自動建立代理物件的工具類。
BeforeAdvice 前置通知類。直接繼承了Advice介面。
MethodBeforeAdvice BeforeAdvice的子類。定義了方法before。執行前置通知。
MethodBeforeAdviceInterceptor MethodBefore前置通知Interceptor。實現了MethodInterceptor介面。持有MethodBefore物件。
AfterAdvice 後置通知類。直接繼承了Advice介面。
ThrowsAdvice 後置異常通知類。直接繼承了AfterAdvice介面。
AfterReturningAdvice 後置返回通知類。直接繼承了AfterAdvice介面。
AfterReturningAdviceInterceptor 後置返回通知Interceptor。實現了MethodInterceptor和AfterAdvice介面。持有AfterReturningAdvice例項
ThrowsAdviceInterceptor 後置異常通知Interceptor。實現了MethodInterceptor和AfterAdvice介面。要求方法名為:afterThrowing
AdvisorAdapter Advisor介面卡。判斷此介面的是不是能支援對應的Advice。五種通知型別,只有三種通知型別介面卡。這裡可以想一下為什麼只有三種。
MethodBeforeAdviceAdapter 前置通知的介面卡。支援前置通知類。有一個getInterceptor方法:將Advisor適配為MethodInterceptor。Advisor持有Advice型別的例項,獲取MethodBeforeAdvice,將MethodBeforeAdvice適配為MethodBeforeAdviceInterceptor。AOP的攔截過程通過MethodInterceptor來完成。
AfterReturningAdviceAdapter 後置返回通知的介面卡。支援後置返回通知類。有一個getInterceptor方法:將Advisor適配為MethodInterceptor。Advisor持有Advice型別的例項,獲取AfterReturningAdvice,將AfterReturningAdvice適配為AfterReturningAdviceInterceptor。AOP的攔截過程通過MethodInterceptor來完成。
ThrowsAdviceAdapter 後置異常通知的介面卡。支援後置異常通知類。有一個getInterceptor方法:將Advisor適配為MethodInterceptor。Advisor持有Advice型別的例項,獲取ThrowsAdvice,將ThrowsAdvice適配為ThrowsAdviceInterceptor。AOP的攔截過程通過MethodInterceptor來完成。
AbstractAspectJAdvice 使用AspectJ註解的通知型別頂級父類
AspectJMethodBeforeAdvice 使用AspectJ Before註解的前置通知型別。實現了MethodBeforeAdvice繼承了AbstractAspectJAdvice。
AspectJAfterAdvice 使用AspectJ After註解的後置通知型別。實現了MethodInterceptor、AfterAdvice介面。繼承了AbstractAspectJAdvice。
AspectJAfterReturningAdvice 使用AspectJ AfterReturning註解的後置通知型別。實現了AfterReturningAdvice、AfterAdvice介面。繼承了AbstractAspectJAdvice。
AspectJAroundAdvice 使用AspectJ Around註解的後置通知型別。實現了MethodInterceptor介面。繼承了AbstractAspectJAdvice。
AspectJAfterThrowingAdvice 使用AspectJ Around註解的後置通知型別。實現了MethodInterceptor、AfterAdvice介面。繼承了AbstractAspectJAdvice。
AspectJAdvisorFactory 使用AspectJ註解 生成Advisor工廠類
AbstractAspectJAdvisorFactory AspectJAdvisorFactory的子類。使用AspectJ註解 生成Advisor的工廠類
ReflectiveAspectJAdvisorFactory AbstractAspectJAdvisorFactory的子類。使用AspectJ註解 生成Advisor的具體實現類。
AspectMetadata 使用AspectJ Aspect註解的切面後設資料類。
BeanFactoryAspectJAdvisorsBuilder 工具類。負責構建Advisor、Advice。SpringAOP核心類
AspectInstanceFactory Aspect例項工廠類
MetadataAwareAspectInstanceFactory AspectInstanceFactory的子類。含有Aspect註解後設資料 Aspect切面例項工廠類。
BeanFactoryAspectInstanceFactory MetadataAwareAspectInstanceFactory的子類。持有BeanFactory例項。從BeanFactory中獲取Aspect例項。
PrototypeAspectInstanceFactory BeanFactoryAspectInstanceFactory的子類。獲取Prototype型別的Aspect例項。
SimpleMetadataAwareAspectInstanceFactory MetadataAwareAspectInstanceFactory的例項。在AspectJProxyFactory中有使用。
SingletonMetadataAwareAspectInstanceFactory MetadataAwareAspectInstanceFactory的子類。繼承了SimpleAspectInstanceFactory。單例Aspect例項類。在AspectJProxyFactory中有使用。
SimpleBeanFactoryAwareAspectInstanceFactory AspectInstanceFactory的子類。實現了BeanFactoryAware介面。和<aop:config>配合使用的類。
ProxyMethodInvocation 含有代理物件的。MethodInvocation的子類。
ReflectiveMethodInvocation ProxyMethodInvocation的子類。AOP攔截的執行入口類。
CglibMethodInvocation ReflectiveMethodInvocation的子類。對Cglib反射呼叫目標方法進行了一點改進。


相關文章