当前位置: 首页 > news >正文

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

在这篇文章中我将对自己了解的AOP中的基本主要类做一个概述,可能不包括一些AOP高级用法的类以及是自己还不了解的类。会不定期的进行补充和修改。

SpringAOP基础解析类

类名作用概述
AopNamespaceHandlerAOP命名空间解析类。我们在用AOP的时候,会在Spring配置文件的beans标签中引入:xmlns:aop
AspectJAutoProxyBeanDefinitionParser解析<aop:aspectj-autoproxy />标签的类。在AopNamespaceHandler中创建的类。
ConfigBeanDefinitionParser解析<aop:config /> 标签的类。同样也是在AopNamespaceHandler中创建的类。
AopNamespaceUtilsAOP命名空间解析工具类,在上面两个中被引用。
AopConfigUtilsAOP配置工具类。主要是向Spring容器中注入可以生成Advisor和创建代理对象的bean

20180318112954851

AOP联盟中定义的一些类:

类名作用概述
AdviceAOP联盟中的一个标识接口。通知和Interceptor顶级类。我们说的各种通知类型都要实现这个接口。
InterceptorAOP联盟中进行方法拦截的一个标识接口。是Advice的子类。
MethodInterceptor方法拦截器。是Interceptor的一个重要子类。主要方法:invoke。入参为:MethodInvocation
ConstructorInterceptor构造方法拦截器。是Interceptor的另一个重要的子类。在AOP联盟中是可以对构造方法进行拦截的。这样的场景我们应该很少用到。主要方法为:construct入参为ConstructorInvocation
JoinpointAOP联盟中的连接点类。主要的方法是:proceed()执行下一个拦截器。getThis()获取目标对象。
InvocationAOP拦截的执行类。是Joinpoint的子类。主要方法:getArguments()获取参数。
MethodInvocationInvocation的一个重要实现类。真正执行AOP方法的拦截。主要方法:getMethod()目标方法。
ConstructorInvocationInvocation的另一个重要实现类。执行构造方法的拦截。主要方法:getConstructor()返回构造方法。

Advice

SpringAOP中定义的类

类名作用概述
AdvisorSpringAOP中的核心类。组合了Advice。
PointcutAdvisorSpringAOP中Advisor的重要子类。组合了切点(Pointcut)和Advice。
InstantiationModelAwarePointcutAdvisorImplPointcutAdvisor的一个重要实现子类。
DefaultPointcutAdvisorPointcutAdvisor的另一个重要实现子类。可以将Advice包装为Advisor。在SpringAOP中是以Advisor为主线。向Advice靠拢。
PointcutSpringAOP中切点的顶级抽象类。
TruePointcutPointcut的一个重要实现类。在DefaultPointcutAdvisor中使用的是TruePointcut。在进行切点匹配的时候永远返回true
AspectJExpressionPointcutPointcut的一个重要实现类。AspectJ语法切点类。同时实现了MethodMatcher,AspectJ语法切点的匹配在这个类中完成。
AnnotationMatchingPointcutPointcut的一个重要实现类。注解语法的切点类。
JdkRegexpMethodPointcutPointcut的一个重要实现类。正则语法的切点类。
MethodMatcher切点匹配连接点的地方。即类中的某个方法和我们定义的切点表达式是否匹配、能不能被AOP拦截
TrueMethodMatcher用于返回true
AnnotationMethodMatcher带有注解的方法的匹配器
JdkRegexpMethodPointcut正则表达式
AdvisedSpringAOP中的又一个核心类。它组合了Advisor和TargetSource即目标对象
ProxyConfigSpringAOP中的一个核心类。在Advised中定义了一系列的配置接口,像:是否暴露对象、是否强制使用CGlib等。ProxyConfig是对这些接口的实现,但是ProxyConfig却不是Advised的实现类
AdvisedSupportAdvised的一个实现类。SpringAOP中的一个核心类。继承了ProxyConfig实现了Advised。
ProxyCreatorSupportAdvisedSupport的子类。引用了AopProxyFactory用来创建代理对象。
ProxyFactoryProxyCreatorSupport的子类。用来创建代理对象。在SpringAOP中用的最多。
ProxyFactoryBeanProxyCreatorSupport的子类。用来创建代理对象。它实现了BeanFactoryAware、FactoryBean接口
AspectJProxyFactoryProxyCreatorSupport的子类。用来创建代理对象。使用AspectJ语法。
ProxyFactory、ProxyFactoryBean、AspectJProxyFactory这三个类的使用场景各不相同。但都是生成Advisor和TargetSource、代理对象的关系。
ProxyProcessorSupportProxyConfig的子类
AbstractAutoProxyCreatorProxyProcessorSupport的重要子类。SpringAOP中的核心类。实现了SmartInstantiationAwareBeanPostProcessor、BeanFactoryAware接口。自动创建代理对象的类。我们在使用AOP的时候基本上都是用的这个类来进程Bean的拦截,创建代理对象。
AbstractAdvisorAutoProxyCreatorAbstractAutoProxyCreator的子类。SpringAOP中的核心类。用来创建Advisor和代理对象。
AspectJAwareAdvisorAutoProxyCreatorAbstractAdvisorAutoProxyCreator的子类。使用AspectJ语法创建Advisor和代理对象。
AnnotationAwareAspectJAutoProxyCreatorAspectJAwareAdvisorAutoProxyCreator的子类。使用AspectJ语法创建Advisor和代理对象的类。<aop:aspectj-autoproxy />标签默认注入到SpringAOP中的BeanDefinition。
InfrastructureAdvisorAutoProxyCreatorAbstractAdvisorAutoProxyCreator的子类。SpringAOP中的核心类。基础建设类。Spring事务默认的创建代理对象的类。
TargetSource持有目标对象的接口。
SingletonTargetSourceTargetSource的子类。适用于单例目标对象。
HotSwappableTargetSourceTargetSource的子类。支持热交换的目标对象
AbstractRefreshableTargetSourceTargetSource的子类。支持可刷新的热部署的目标对象。
AbstractBeanFactoryBasedTargetSourceTargetSource的子类。实现了BeanFactoryAware接口。
SimpleBeanTargetSourceAbstractBeanFactoryBasedTargetSource的子类。从BeanFactory中获取单例Bean。
LazyInitTargetSourceAbstractBeanFactoryBasedTargetSource的子类。从BeanFactory中获取单例Bean。支持延迟初始化。
AbstractPrototypeBasedTargetSourceAbstractBeanFactoryBasedTargetSource的子类。对Prototype类型的Bean的支持。
ThreadLocalTargetSourceAbstractPrototypeBasedTargetSource的子类。和线程上下文相结合的类。
PrototypeTargetSourceAbstractPrototypeBasedTargetSource的子类。从BeanFacory中获取Prototype类型的Bean。
AopProxy生成AOP代理对象的类。
JdkDynamicAopProxyAopProxy的子类。使用JDK的方式创建代理对象。它持有Advised对象。
CglibAopProxyAopProxy的子类。使用Cglib的方法创建代理对象。它持有Advised对象。
ObjenesisCglibAopProxyCglibAopProxy的子类。使用Cglib的方式创建代理对象。它持有Advised对象。
AopProxyFactory创建AOP代理对象的工厂类。选择使用JDK还是Cglib的方式来创建代理对象。
DefaultAopProxyFactoryAopProxyFactory的子类,也是SpringAOP中唯一默认的实现类。
AdvisorChainFactory获取Advisor链的接口。
DefaultAdvisorChainFactoryAdvisorChainFactory的实现类。也是SpringAOP中唯一默认的实现类。
AdvisorAdapterRegistryAdvisor适配注册器类。用来将Advice适配为Advisor。将Advisor适配为MethodInterceptor。
DefaultAdvisorAdapterRegistryAdvisorAdapterRegistry的实现类。也是SpringAOP中唯一默认的实现类。持有:MethodBeforeAdviceAdapter、AfterReturningAdviceAdapter、ThrowsAdviceAdapter实例。
AutoProxyUtilsSpringAOP自动创建代理对象的工具类。
BeforeAdvice前置通知类。直接继承了Advice接口。
MethodBeforeAdviceBeforeAdvice的子类。定义了方法before。执行前置通知。
MethodBeforeAdviceInterceptorMethodBefore前置通知Interceptor。实现了MethodInterceptor接口。持有MethodBefore对象。
AfterAdvice后置通知类。直接继承了Advice接口。
ThrowsAdvice后置异常通知类。直接继承了AfterAdvice接口。
AfterReturningAdvice后置返回通知类。直接继承了AfterAdvice接口。
AfterReturningAdviceInterceptor后置返回通知Interceptor。实现了MethodInterceptor和AfterAdvice接口。持有AfterReturningAdvice实例
ThrowsAdviceInterceptor后置异常通知Interceptor。实现了MethodInterceptor和AfterAdvice接口。要求方法名为:afterThrowing
AdvisorAdapterAdvisor适配器。判断此接口的是不是能支持对应的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工厂类
AbstractAspectJAdvisorFactoryAspectJAdvisorFactory的子类。使用AspectJ注解 生成Advisor的工厂类
ReflectiveAspectJAdvisorFactoryAbstractAspectJAdvisorFactory的子类。使用AspectJ注解 生成Advisor的具体实现类。
AspectMetadata使用AspectJ Aspect注解的切面元数据类。
BeanFactoryAspectJAdvisorsBuilder工具类。负责构建Advisor、Advice。SpringAOP核心类
AspectInstanceFactoryAspect实例工厂类
MetadataAwareAspectInstanceFactoryAspectInstanceFactory的子类。含有Aspect注解元数据 Aspect切面实例工厂类。
BeanFactoryAspectInstanceFactoryMetadataAwareAspectInstanceFactory的子类。持有BeanFactory实例。从BeanFactory中获取Aspect实例。
PrototypeAspectInstanceFactoryBeanFactoryAspectInstanceFactory的子类。获取Prototype类型的Aspect实例。
SimpleMetadataAwareAspectInstanceFactoryMetadataAwareAspectInstanceFactory的实例。在AspectJProxyFactory中有使用。
SingletonMetadataAwareAspectInstanceFactoryMetadataAwareAspectInstanceFactory的子类。继承了SimpleAspectInstanceFactory。单例Aspect实例类。在AspectJProxyFactory中有使用。
SimpleBeanFactoryAwareAspectInstanceFactoryAspectInstanceFactory的子类。实现了BeanFactoryAware接口。和<aop:config>配合使用的类。
ProxyMethodInvocation含有代理对象的。MethodInvocation的子类。
ReflectiveMethodInvocationProxyMethodInvocation的子类。AOP拦截的执行入口类。
CglibMethodInvocationReflectiveMethodInvocation的子类。对Cglib反射调用目标方法进行了一点改进。

相关文章:

  • 二分查找(oc/java/Python/scala)
  • RESTful接口设计原则和优点
  • Django 博客开发教程 16 - 统计文章阅读量
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • maven编译的时候排除junit测试类
  • TortioseSVN切换账号教程
  • PHP变量
  • Jenkins进阶系列之——04Publish Over FTP Plugin插件
  • HashMap的长度为什么要是2的n次方
  • mysql主从复制配置过程及演示
  • [坑]解决Spring利用注解@Value获取properties属性为null或@Autowired 注解为null
  • 如何让git小乌龟工具TortoiseGit记住你的账号密码
  • POJ3013 Big Christmas Tree
  • 飘逸的python - 实现一个极简的优先队列
  • Linux常用查找命令
  • 《剑指offer》分解让复杂问题更简单
  • centos安装java运行环境jdk+tomcat
  • golang中接口赋值与方法集
  • quasar-framework cnodejs社区
  • rc-form之最单纯情况
  • webpack入门学习手记(二)
  • XForms - 更强大的Form
  • 仿天猫超市收藏抛物线动画工具库
  • 简单易用的leetcode开发测试工具(npm)
  • 聚类分析——Kmeans
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 云大使推广中的常见热门问题
  • 阿里云ACE认证之理解CDN技术
  • # C++之functional库用法整理
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (二)PySpark3:SparkSQL编程
  • (十三)Maven插件解析运行机制
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)socket Aio demo
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat批处理(一):@echo off
  • .pyc文件是什么?
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android]Android开发入门之HelloWorld
  • [C puzzle book] types
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [codevs 1296] 营业额统计
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [Flutter]打包IPA
  • [javascript]Tab menu实现
  • [LitCTF 2023]Http pro max plus
  • [Lucene] Lucene 全文检索引擎简介
  • [NISACTF 2022]easyssrf
  • [NOI2014]购票
  • [SQL]实现按照指定分割分分割字符串
  • [VSCode] 自定义选中代码的高亮颜色