Spring系列之AOP基本主要類概述
阿新 • • 發佈:2019-02-01
在這篇文章中我將對自己瞭解的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 |
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()返回構造方法。 |
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反射呼叫目標方法進行了一點改進。 |