java使用spring aop切面编程

article/2025/8/18 20:58:07

aop概念

1、切面(Aspect)
首先要理解‘切’字,需要把对象想象成一个立方体,传统的面向对象变成思维,类定义完成之后(封装)。每次实例化一个对象,对类定义中的成员变量赋值,就相当于对这个立方体进行了一个定义,定义完成之后,那个对象就在那里,不卑不亢,不悲不喜,等着被使用,等着被回收。

面向切面编程则是指,对于一个我们已经封装好的类,我们可以在编译期间或在运行期间,对其进行切割,把立方体切开,在原有的方法里面添加(织入)一些新的代码,对原有的方法代码进行一次增强处理。而那些增强部分的代码,就被称之为切面,一般用于通用日志处理代码、事务处理、权限认证等等。

2、切入点(PointCut)
要对哪些类中的哪些方法进行增强,进行切割,指的是被增强的方法。即要切哪些东西。

3、连接点(JoinPoint)
我们知道了要切哪些方法后,剩下的就是什么时候切,在原方法的哪一个执行阶段加入增加代码,这个就是连接点。如方法调用前,方法调用后,发生异常时等等。

4、通知(Advice)
通知被织入方法,改如何被增强。定义切面的具体实现。那么这里面就涉及到一个问题,空间(切哪里)和时间(什么时候切,在何时加入增加代码),空间我们已经知道了就是切入点中定义的方法,而什么时候切,则是连接点的概念,如下面实例中,通用日志处理(切面),@Pointcut规则中指明的方法即为切入点,@Before、@After是连接点,而下面的代码就是对应通知。

5、目标对象(Target Object)
被一个或多个切面所通知的对象,即为目标对象。

6、AOP代理对象(AOP Proxy Object)
AOP代理是AOP框架所生成的对象,该对象是目标对象的代理对象。代理对象能够在目标对象的基础上,在相应的连接点上调用通知。

7、织入(Weaving)
将切面切入到目标方法之中,使目标方法得到增强的过程被称之为织入。

 

aop使用方法

一、引入依赖

        <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></dependency><dependency>

二、定义一个切面类

@Aspect
@Component
public class MyAspect {/*** 声明切入点* 该方法 point 的内容并不重要,方法名也不重要,实际上它只是作为一个标识,供通知使用*/@Pointcut("execution(* com.example.demo.web.Demo.hello(..))")void point(){}/*** 目标方法调用之前调用*/@Before("point()")//也可直接使用execution(* com.example.demo.web.Demo.hello(..)),声明切入点,只是public void before() {System.out.println("before ...");}/*** 目标方法返回或异常之后调用*/@After("point()")public void after() {System.out.println("After ...");}/*** 目标方法返回之后调用*/@AfterReturning("point()")public void afterReturning() {System.out.println("AfterReturning ...");}/*** 目标方法抛出异常之后调用*/@AfterThrowing("point()")public void afterThrowing() {System.out.println("AfterThrowing ...");}/*** 目标方法调用之后调用*/@Around("point()")public void around(ProceedingJoinPoint pj) {try {System.out.println("Around aaa ...");pj.proceed();//如果不调用该对象的 proceed() 方法,表示不调用原目标方法及上面的切面方法System.out.println("Around bbb ...");} catch (Throwable throwable) {throwable.printStackTrace();}}
}

三、增加配置@EnableAspectJAutoProxy注解(可以不做),因为springboot-autoconfiguration中已经有此注解

@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = true)//proxyTargetClass为true说明走CGLIB代理,否则走JDK代理
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

 springboot-autoconfiguration代码如下:

  

如果要修改proxy-target-class还可以通过配置文件配置

spring.aop.auto=true
spring.aop.proxy-target-class=true

 

 aop原理

1、EnableAspectJAutoProxy注解引入了AspectJAutoProxyRegistrar处理类

2、AspectJAutoProxyRegistrar类注册bean定义

3、在 AopConfigUtils.forceAutoProxyCreatorToUseClassProxying方法里标记上此类需要代理

 4、在spring注册bean时增加代理

下图是在AbstractAutoProxyCreator类的wrapIfNecessary方法中
 

 下图是spring创建bean时的栈帧

在CglibAopProxy类中创建代理 

真正被增加的类会执行DynamicAdvisedInterceptor类的intercept方法

 之后的每次被拦截的方法都会执行intercept方法

 

 

ProxyFactory类

是spring对两种动态代理Proxy和cglib进行的封装

 

 

spring中代理实现代码增强几种方式

  1. @Aspect注解
  2. ProxyFactoryBean(是一个FactoryBean)
  3. 编程方式注入advisor。

 

 


http://chatgpt.dhexx.cn/article/ehcd1vKV.shtml

相关文章

【Spring】面向切面编程详解(AOP)

文章目录 一、AOP概述什么是AOPAOP应用场景 二、AOP的基本术语术语介绍术语举例详解 三、AOP实例说明四、通知类型详解概述前置通知后置通知环绕通知最终通知 六、AOP实现声明式事务结语 &#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315;! &#x1f30e;文章说明…

时间序列预测方法

之前一直在看时间序列预测方法的文献&#xff0c;最近终于有点头绪了&#xff0c;然后就花了些时间来做一下整理。时间序列预测方法可分为传统的&#xff0c;基于机器学习的和基于深度学习的&#xff0c;以下每一方面都列举了几个比较经典的模型算法。 目录 1 背景 2 传统的时…

时间序列预处理

数据预处理的主要流程为&#xff1a;数据清洗、特征选择、归一化处理、划分窗口、Shuffle和划分数据集等五个阶段。选用何种方法没有统一的标准&#xff0c;只能根据不同类型的分析数据和业务需求&#xff0c;在对数据特性做了充分的理解之后&#xff0c;再选择与其最适配的数据…

时间序列分析相关概念

1. 在时间序列分析中&#xff0c; 数学模型是什么&#xff1f;数学公式又是什么&#xff1f;数学推导过程又是什么&#xff1f;… … 一句话&#xff1a;用数学公式后者符号来表示现实存在的意义。数学是“万金油”的科学&#xff0c;它是作为工作和分析方法运用到某个学科当中…

时间序列预测方法总结

前言 对时间序列数据预测模型做个简单的分类&#xff0c;方便日后对其进一步研究&#xff0c;理清楚技术更新发展方向。 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。 预测场景 单步预测 单步单变量预测 &#xff1a;在时间序…

时间序列的聚类方法

时间序列的聚类方法 时间序列是按照时间排序的一组随机变量&#xff0c;它通常是在相等间隔的时间段内&#xff0c;依照给定的采样率&#xff0c;对某种潜在过程进行观测的结果。 时间序列数据是实值型的序列数据&#xff0c;具有数据量大、数据维度高以及数据是不断更新的等…

【时间序列预测】Autoformer 长时间序列预测

论文链接&#xff1a;http://xxx.itp.ac.cn/pdf/2106.13008.pdf Abstract 延长预测时间是极端天气预警和长期能源消耗规划等实际应用的关键需求。本文研究时间序列的长期预测问题。先前的基于 Transformer 的模型采用各种 self-attention 机制来发现长期依赖关系。然而&…

时间序列分析预测

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; python数据挖掘系列教程 时间序列中常用预测技术&#xff0c;一个时间序列是一组对于某一变量连续时间点或连续时段上的观测值。参考&#xff1a;https://blog.csdn.net/u010414589/article/details/49622625…

时间序列预测

问题简介 简单来说&#xff0c;时间序列是按照时间顺序&#xff0c;按照一定的时间间隔取得的一系列观测值&#xff0c;比如我们上边提到的国内生产总值&#xff0c;消费者物价指数&#xff0c;利率&#xff0c;汇率&#xff0c;股票价格等等。时间间隔可以是日&#xff0c;周…

时间序列分析

http://blog.csdn.net/pipisorry/article/details/62053938 时间序列简介 时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势&#xff0c;为了预测未来或者表现分析的其他形式。但是什么时间序列&#xff1f;与常见的回归问题的不同&…

时间序列模型调查

RNN 模型 Recurrent Neural Network (回流神经网络,有的译做递归神经网络) 时间序列模型最常用最强大的的工具就是递归神经网络(recurrent neural network, RNN)。相比与普通神经网络的各计算结果之间相互独立的特点,RNN的每一次隐含层的计算结果都与当前输入以及上一次的…

时间序列模型

1. 时间序列分析方法概述 一个时间序列往往是一下几类变化形式的叠加或耦合。 &#xff08;1&#xff09;长期趋势变动&#xff1a;反映主要变化趋势&#xff1b; &#xff08;2&#xff09;季节变动 &#xff08;3&#xff09;循环变动 &#xff08;4&#xff09;不规则变动 使…

python创建时间序列_python 时间序列

将dataframe的列转化为时间序列 #https://www.cnblogs.com/bolgbjg/p/14013300.html #datetime.now()获取现在的时间&#xff0c;now.year,获取现在的年份&#xff0c;其他以此类推 #timedelta()表示两个datetime之间的时间差,默认单位是天 strftime()参数&#xff0c; strftim…

时间序列(数据分析)

目录 第11章 时间序列 11.1 日期和时间数据的类型及工具 11.1.1 字符串与datetime互相转换 11.2 时间序列基础 11.2.1 索引、选择、子集 11.2.2 含有重复索引的时间序列 11.3 日期范围、频率和移位 11.3.1 生成日期范围 11.3.2 频率和日期偏置 11.3.3 移位&#xff0…

时间序列介绍

什么是时间序列&#xff1f; 时间序列是按照一定时间顺序&#xff0c;按照一定的时间间隔取得的一系列观测值。 怎样做时间序列分析&#xff1f; 时间序列分析尝试找出序列值在过去所呈现的特征模式&#xff0c;假定这种模式在未来能够持续&#xff0c;进而对未来进行预测 时…

时间序列

时间序列 一、时间序列是什么&#xff1f;二、时间序列分类1.白噪声序列2.平稳非白噪声序列3.非平稳序列 三. 时间序列主要模型1. ARIMA如何挑选模型参数&#xff1a;Example and application: 总结 一、时间序列是什么&#xff1f; 时间序列是指某种现象某一指标在不同时间上…

经典时间序列的学习(一)简单的认识时间序列

1. 什么是时间序列 同一统计指标数值按照时间先后顺序排列而成的数据。本质上是反映一个变量随时间序列变化的趋势。 简单的例子就像是学生每一年的身高数据&#xff0c;这个也是一个时间序列。变量是我们的身高;每一年都不一样。我们支付宝或者微信的零钱&#xff0c;每一天…

【时间序列】时间序列基本概念总结

最近一直在接触时间序列&#xff0c;所以打算写一些有关时间序列的文章&#xff0c;预测部分会从规则开始、到传统模型、到机器学习、再到深度学习&#xff0c;此外也会介绍一些时间序列的基本概念&#xff0c;包括自相关、平稳性、滞后性、季节性等。 1.基本概念 1.1 时间序列…

备战数学建模35-时间序列预测模型

目录 一、时间序列概念与分解模型 1-时间序列数据与基本概念 2-时间序列分解 二、SPSS中七种指数平滑模型 1-七种指数平滑模型简介 2-七种指数平滑模型具体分析 三、ARIMA模型相关的知识点 四、时间序列模型经典案例 1-时间序列建模思路介绍 2-案例1销售数据预测 3-…

【时间序列】最完整的时间序列分析和预测(含实例及代码)

时间序列 在生产和科学研究中&#xff0c;对某一个或者一组变量 进行观察测量&#xff0c;将在一系列时刻所得到的离散数字组成的序列集合&#xff0c;称之为时间序列。 pandas生成时间序列过滤数据重采样插值滑窗数据平稳性与差分法 pandas生成时间序列 时间戳&#xff08;ti…