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

在這篇文章中我將對自己瞭解的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()返回構造方法。

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反射調用目標方法進行了一點改進。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章