首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AOP概念与原理 | Spring学习笔记2.1

AOP概念与原理 | Spring学习笔记2.1

作者头像
做棵大树
发布于 2022-09-09 13:43:23
发布于 2022-09-09 13:43:23
35700
代码可运行
举报
文章被收录于专栏:代码日志代码日志
运行总次数:0
代码可运行

AOP 概念

AOP (Aspect Oriented Programming): 面向切面(方面)编程,拓展功能不修改源代码实现。

AOP 采用横向抽取机制,取代了传统纵向继承体系的重复性代码。

AOP 原理

最开始的处理方式和纵向抽取机制

纵向抽取机制

aop 横向抽取机制:有接口的情况

带接口的横向抽取机制

aop 横向抽取机制:无接口的情况

无接口横向抽取机制

Spring的AOP的底层实现

Spring的AOP的底层用到了两种代理机制:

  1. JDK的动态代理:针对实现了接口的类产生代理。
  2. Cglib的动态代理:针对没有实现接口的类产生代理,应用的是底层的字节码增强的技术,生成当前类的子类对象。

AOP操作术语

  1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在Spring中,这些点指的是方法,因为Spring只支持方法类型的连接点。
  2. Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义。
  3. Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知。通知分为前置通知、后置通知、异常通知、最终通知和环绕通知(切面要完成的功能)。
  4. Aspect(切面):是切入点和通知的结合。
  5. Target(目标对象):代理的目标对象(要增强的类)
  6. Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。
  7. Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类。
  8. Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下,Introduction可以在运行期为类动态地添加一些方法或Field。

为了便于理解,我们假设有一个类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class User {
    public void add() {

    }

    public void update() {

    }

    public void delete() {

    }
}
  • Joinpoint 连接点:在User类里面有3个方法,这3个方法都可以被增强,类里面的哪些方法可以被增强,这些方法就可被成为连接点
  • Pointcut 切入点:在一个类中可以有很多的方法被增强,在实际操作中,如若只增强了类里面的add方法,则实际增强的方法被称为切入点
  • Advice 增强/通知:比如增强User类里面的add方法,在add方法中添加了日志功能,这个日志功能就称为增强。 通知类型
    • 前置通知:在增强的方法执行之前进行操作。
    • 后置通知:在增强的方法执行之后进行操作。
    • 异常通知:程序出现异常之后执行的通知。
    • 最终通知:增强了两个方法,执行第一个方法,执行第二个方法,在第二个方法执行之后进行操作。 也可理解为后置通知后面执行的通知或者无论目标方法是否出现异常,最终通知都会执行
    • 环绕通知:在增强的方法执行之前和执行之后进行操作。
  • Aspect 切面:把增强应用到切入点的过程。即把具体增强的逻辑用到具体的方法上面的过程。
  • Introduction 引介:引介是一种特殊的通知,在不修改类代码的前提下,引介在运行期间为类动态的添加一些方法或 字段
  • Target 目标对象:增强的方法所在的类,即要增强的类
  • Weaving 织入:是指把增强应用到目标对象的过程。即把advice应用到target的过程。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 做棵大树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
AI科技评论按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI科技评论编译。 Jason Brownlee 许多随机机器学习算法存在
AI科技评论
2018/03/13
1.2K0
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
严谨解决5种机器学习算法在预测股价的应用(代码+数据)
机器学习有很多应用,其中之一就是预测时间序列。一个最有趣(或者可能是最赚钱)的时间序列是股票价格。
量化投资与机器学习微信公众号
2019/02/26
5.9K1
机器学习实战之风功率预测
目前机器学习与气象数据的结合已经在实际生产中有了应用,比如风电场风功率预测、光伏功率预测和负荷预测。本文以风功率预测作为一个小栗子: 风功率预测是指以风电场的历史功率、历史风速、地形地貌、数值天气预报、风电机组运行状态等数据建立风电场输出功率的预测模型,以风速、功率或数值天气预报数据作为模型的输入,结合风电场机组的运行状态及运行工况,得到风电场未来的输出功率,预测时间尺度包括短期预测和超短期预测,目的是上报国家电网,利于国家电网调度。目前主流方案是结合数值天气预报和机器学习算法(LSTM、SVM等)对风功率进行时序预测,包含超短期预报(未来4个小时共16个时刻)和短期预报(未来三天共288个时刻)。 本文主要利用WRF的气象要素预报数据和LSTM算法进行风功率预测。
MeteoAI
2019/07/22
6.3K8
Python; 机器学习之项目实践
机器学习是一项经验技能,经验越多越好。在项目建立的过程中,实践是掌握机器学习的最佳手段。在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的。 预测模型项目模板 不能只通过阅读来掌握机器学习的技能,需要进行大量的练习。本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤。通过本文将学到: 端到端地预测(分类与回归)模型的项目结构。 如何将前面学到的内容引入到项目中。 如何通过这个项目模板来得到一个高准确度的模板。 机器学习是针对数据进行自动挖掘,找出数据
CSDN技术头条
2018/02/06
1.1K0
Python; 机器学习之项目实践
机器学习中回归算法的基本数学原理
假设这是一个关于广告费与网站点击量的数据集,我们需要预测投入更多的广告费网站点击量是多少。
数据STUDIO
2021/09/09
7740
基于长短期记忆神经网络LSTM的多步长时间序列预测
长短时记忆网络(LSTM)是一种能够学习和预测长序列的递归神经网络。LSTMs除了学习长序列外,还可以学习一次多步预测,这对于时间序列的预测非常有用。LSTMs的一个困难在于,它们可能难以配置,而且需要大量的准备工作才能获得适合学习的格式的数据。
代码医生工作室
2020/06/16
7K0
基于长短期记忆神经网络LSTM的多步长时间序列预测
基于深度学习模型的空气污染时序预测
Blog: http://yishuihancheng.blog.csdn.net
郭好奇同学
2022/06/07
2.2K0
基于深度学习模型的空气污染时序预测
我花了一年时间研究不确定性估算,写下了这份最全指南
为什么立下这个flag?因为我在各种大会上听腻了人们争论每个月微件(widget)的数量是上升还是下降,或者微件方法X是否比微件方法Y更有效率。
大数据文摘
2018/12/18
7620
如何建立预测大气污染日的概率预测模型
空气污染程度以地面臭氧浓度表示。根据风速和温度等气象测量结果,是否会在明天达到足以发出公众空气污染警告的高度
AiTechYun
2018/10/25
3K0
如何建立预测大气污染日的概率预测模型
机器学习中不平衡数据集分类模型示例:乳腺钼靶微钙化摄影数据集
一个典型的不平衡分类数据集是乳腺摄影数据集,这个数据集用于从放射扫描中检测乳腺癌(特别是在乳腺摄影中出现明亮的微钙化簇)。研究人员通过扫描图像,对目标进行分割,然后用计算机视觉算法描述分割对象,从而获得了这一数据集。
deephub
2020/05/09
1.7K0
机器学习中不平衡数据集分类模型示例:乳腺钼靶微钙化摄影数据集
数据科学 IPython 笔记本 六、SciPy 统计推断
为了探索量化效应量的统计量,我们将研究男女之间的身高差异。 我使用来自行为风险因素监测系统(BRFSS)的数据,来估计美国成年女性和男性的身高的平均值和标准差(cm)。
ApacheCN_飞龙
2022/05/07
8560
数据科学 IPython 笔记本 六、SciPy 统计推断
Keras中带LSTM的多变量时间序列预测
像长短期记忆(Long Short-Term Memory ) LSTM 递归神经网络这样的神经网络几乎可以完美地模拟多个输入变量的问题。
QiqiHe
2018/02/09
46.8K8
Keras中带LSTM的多变量时间序列预测
独家 | 手把手教你用Python的Prophet库进行时间序列预测
本文为大家介绍了如何在Python中使用由Facebook开发的Prophet库进行自动化的时间序列预测,以及如何评估一个由Prophet库所搭建的时间序列预测模型的性能。
数据派THU
2020/10/26
12K0
独家 | 手把手教你用Python的Prophet库进行时间序列预测
周期序预测列问题中的朴素模型——周期跟随模型(Seasonal Persistence)
在处理时间序列问题时,人们通常使用跟随算法(将前一个时间单位的观测值作为当前时间的预测值)预测的结果作为预测性能的基准。
ArrayZoneYour
2018/02/06
2.5K0
Python时间序列预测案例研究:巴尔的摩年度用水量
时间序列预测是一个过程,获得良好预测的唯一方法就是练习这个过程。
花落花飞去
2018/02/06
7.3K0
如何使用统计显着性检验来解释机器学习结果
在比较两种不同的机器学习算法或比较相同的算法与不同的配置时,收集一组结果是一个好习惯。
老人雨何
2018/02/07
3.2K0
如何使用统计显着性检验来解释机器学习结果
实例讲解:时间序列预测究竟需要多少历史数据?
编者按:本文源自美国机器学习专家 Jason Brownlee 的博客,AI 研习社编译。 时间序列预测,究竟需要多少历史数据? 显然,这个问题并没有一个固定的答案,而是会根据特定的问题而改变。 在本教程中,我们将基于 Python 语言,对模型输入大小不同的历史数据,对时间序列预测问题展开讨论,探究历史数据对 ARIMA 预测模型的性能影响。(注:ARIMA 全程是 Autoregressive Integrated Moving Average Model,即自回归积分滑动平均模型) 具体来说,在本
AI研习社
2018/03/29
7.2K0
实例讲解:时间序列预测究竟需要多少历史数据?
用Python进行时间序列分解和预测
本文介绍了用Python进行时间序列分解的不同方法,以及如何在Python中进行时间序列预测的一些基本方法和示例。
Datawhale
2021/01/07
4K0
用Python进行时间序列分解和预测
如何使用带有Dropout的LSTM网络进行时间序列预测
长短期记忆模型(LSTM)是一类典型的递归神经网络,它能够学习观察所得的序列。
风飘叶扬
2018/02/05
21.3K1
第14节:lstm原理及numpy
文章目录 lstm原理 rnn lstm实例 lstm原理 文本相关。主要应用于自然语言处理(NLP)、对话系统、情感分析、机器翻译等等领域,Google翻译用的就是一个7-8层的LSTM模型。 时序相关:就是时间序列的预测,诸如预测天气/温度/. 为何全连接层和卷积神经网络无法处理序列问题,因为缺乏记忆模块,无法记忆之前输入的内容. rnn - 简单的rnn。输入是2维的(timesteps, input_features). 这里的loop就是在timesteps上的loop:每一个时刻t,RNN
AI拉呱
2022/04/13
4390
第14节:lstm原理及numpy
推荐阅读
相关推荐
开发 | 随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验