Spring学习笔记(三)——Spring AOP

1.AOP及Spring AOP背景知识
Spring AOP由100% java开发完成,秉承java的一切优势。
目前,Spring AOP只实现了方法级的joinpoint,有些AOP实现支持域级的joinpoint,比如JBoss AOP、AspectJ。joinpoint(连接点模型)是指AOP Aspect能够在应用系统中执行的地方,比如某个方法调用之前、修改某个域之前。连接点模型的强弱在很大程度上决定了AOP实现功能的强弱。
尽管Spring也能够用于J2SE、J2ME应用,但主要是在J2EE应用中使用它(Spring team推荐如此)。在J2EE应用中,AOP能够拦截到方法集的操作已经足够了。再者,OOP倡导的是通过setter/getter方法访问域,而不是直接访问域。因此目前Spring仅提供方法级的joinpoint是恰当的。
借助于Spring AOP,Spring Ioc能方便的使用到非常健壮、灵活的企业级服务。Spring AOP能够提供如下几方面的优势:
1)允许开发者使用声明式企业级服务,比如事务服务、安全性服务。
2)开发者可以开发满足业务需求的自定义方面。如果标准的J2EE安全性不满足业务需求,则必须开发拦截器。
3)开发Spring AOP Advice很方便。因为这些AOP Advice仅仅是POJO类,借助于Spring提供的ProxyFactoryBean,能够快速搭建Spring AOP Advice。
为开发AOP使能应用,需要开发AOP Advice,这是AOP开发的主要内容。因为advice中包含了AOP aspect的主要逻辑。
将AOP中的advice约定为“装备”。通常存在如下5种装备(Advice)类型:
1)Before装备:在执行目标操作之前执行的装备;
2)Throws装备:如果目标操作在执行过程中抛出异常,则执行此装备;
3)After装备:在执行目标操作之后执行的操作;
4)Around装备:在方法调用前后执行的装备;功能强大,灵活性也最好,能够在执行目标操作前后执行,因此这对于一些需要做资源初始化和释放资源的操作的应用而言,特别有用。
5)Introduction装备:由于Introduction装备能为类新增方法,因此在5中装备中,它最复杂,最难掌握。
借助于上述5种装备,基本能解决J2EE中的常见问题。

2.Spring AOP装备
对于Spring AOP而言,开发者会涉及到如下接口:
org.springframework.aop.MethodBeforeAdvice 用于实现Before装备;
org.springframework.aop.AfterReturningAdvice 用于实现After装备;
org.springframework.aop.ThrowsAdvice 用于实现Throws装备;

借助于RegexpMethodPointcutAdvisor类实现了对LoggingBeforeAdvice(此类为精通Spring源代码中example5中的类,实现了MethodBeforeAdvice接口,实现了其他装备接口的类集成方法类似)装备的集成,完成了pointcut和拦截器的定义。
Spring AOP由纯Java开发,开发者不需要对配置了装备的任何类进行编译工作。由于Spring AOP没有采用控制类装载器的方式来实现AOP,因此Spring AOP能使用与任何web容器应用服务器中,比如tomcat和Jboss。对于代理java接口的场景,Spring默认是采用动态代理实现的;对于代理java类的场景,Spring使用了动态字节码生成技术。
使用Spring AOP实现的各种装备类型时,ProxyFactoryBean起了很重要的作用(位于appcontext.xml)。
同其他Spring FactoryBean实现一样,ProxyFactoryBean也引入了间接层。需注意,通过名字或者id(比如,“helloworldbean”)获得的引用对象并不是ProxyFactoryBean实例本身,而是ProxyFactoryBean中getObject()方法实现返回的对象。其中,getObject方法将创建AOP代理,并将目标对象包裹(wrapper)在其中。代码示例:
Resource resource = new ClassPathResource("appcontext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
IHelloWorld hw = (IHelloWorld) factory.getBean("helloworldbean");

配置文件中的内容为:
<bean id="helloworldbean"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.openv.spring.IHelloWorld</value>
</property>
<property name="target">
<ref local="helloworldbeanTarget"/>
</property>
<property name="interceptorNames">
<list>
<value>loggingAfterAdvisor</value>
</list>
</property>
</bean>


开发者也可以借助于Spring AOP手工创建AOP代理。因此,这将不会依赖于Spring Ioc容器,而只是Spring AOP本身。不过不推荐这么使用,它不符合Spring框架的初衷。
Spring开发框架Team推荐:借助于Spring Ioc框架自动创建AOP代理,并将有关AOP代理的java代码通过Spring配置文件配置。
另外,FactoryBean在Spring框架中起了很重要的作用。ProxyFactoryBean实现了FactoryBean接口,借助于ProxyFactoryBean的强大功能,开发者能够实现满足各种业务需求的实现。但这要求开发者去额外开发很多辅助业务操作的功能,比如事务、数据库连接等操作。因此,Spring框架针对具体方面提供了大量的实用类(注意,它们并不是继承于ProxyFactoryBean,而是实现了FactoryBean接口):
TransactionProxyFactoryBean,SimpleRemoteStatelessSessionProxyFactoryBean,RmiProxyFactoryBean,LocalStatelessSessionProxyFactoryBean

3.对象池
开发者在与数据库交互的过程中,通常会使用到连接池。它能够在应用实际使用数据库连接前,同目标RDBMS建立物理连接。Spring框架借助于Jakarta Commons Pool或者其他技术,提供有效的对象池实现。
ardupilot开发 --- Remote ID 篇 适配ardupilot的Remote ID模块研发,远程标识模块研发。Remote ID模块可以通过蓝牙或wifi向外广播无人机的状态信息、位置信息、任务信息等,并可以通过蜂窝数据向国家无人驾驶航空器一体化综合监管服务平台上报这些信息。Remote ID功能是21年起国家出台的民用无人机适航飞行的基本要求! 阅读详情

相关推荐

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器)

本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。

weixin_28715953的博客 325

Spring AOP实例

Spring的AOP部分AOP:面向切面的编程Aspect: (问题等的)方面,切面Orient: 适应Programing: 编程Java通过接口来实现AOP开发的功能org.springframework.aop包下MethodBeforeAdvice: 在主体方法执行之前来完成某项工作实现方法 before()

小虫乱爬--爬爬也论技术 博客 1171

SCI、中科院1区算法应用:(BWO-CNN-BiGRU-Attention)白鲸优化深度学习-融合注意力机制预测程序代码!包含特征可视化,数据Excel导入,直接运行!

BWO 白鲸优化算法,于2022年发表在SCI、中科院1区期刊《Knowledge-Based Systems》上。我们利用该高创新算法对我们的CNN-BiGRU-Attention时序和空间特征结合-融合注意力机制的回归预测程序代码中的超参数进行优化。

weixin_48747334的博客 3264

【Spring学习笔记】—— (三)AOP

什么是 AOP `Aspect Oriented Programming: 面向切面编程`。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。降低耦合,提高程序的可重用性,同时提高开发效率。 简单的说:就是把程序中重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。

小牛肉的博客 692

5分钟搞定!用Cursor和.NET 9.0快速搭建串口通讯上位机(附VS Code插件配置)

本文分享了如何利用Cursor AI编程助手与.NET 9.0,在5分钟内快速构建一个功能完整的串口通讯上位机程序。通过自然语言描述需求,AI自动生成WinForms界面和核心代码,极大提升了硬件调试工具的定制开发效率。文章详细介绍了环境配置、AI协作编码、功能实现与调试的全过程。

weixin_28366353的博客 277

OpenCV实战之人脸美颜美型(八)——大眼(下)

我们需要将上述描述量化表达,以r代表上述变形区域的圆的半径,X表示原始图像像素到变形圆圆心的距离,Y表示像素变形后的其距离变形圆圆心的距离,则其形状大致如下图所示。如下图所示,我们可以规定处理区域为眼睛为圆心的一个圆形,从圆心区域开始图像会放大,但该放大的比例随着距离圆心的距离而变小,直至边缘区域的放大比例为0。不过在实际图像变形操作中我们要从目标图像映射到原图,因此我们需要将X/Y调换,让X表示变形后图像的像素距离变形圆中心的距离,Y表示原图像素距离变形圆中心的距离,则其形状如下图所示。

On my way 901

Spring学习笔记三 注解AOP

一.第一步 1.导入jar包 2.编写目标方法 @Service public class StudentService { public boolean save(String name) { System.out.println("StudentService...save"); return true; } } 3.配置文件 <?xml version=...

weixin_44036441的博客 139

使用C#实现Padim算法的训练和推理:智能缺陷检测的前沿技术

Padim (Patch-based Deep Image Model) 是一种用于无监督异常检测的深度学习算法。它通过提取图像中的局部特征(patch),并在这些特征上构建一个正常样本的分布模型来识别异常。无监督学习:不需要标注数据,适用于缺乏标签的情况。局部特征提取:通过卷积神经网络提取图像的局部特征(patch)。低秩近似:利用低秩近似构建正常样本的协方差矩阵,有效降低计算复杂度。鲁棒性强:能够处理多种类型的缺陷和噪声。

墨夶的博客 1013

Spring学习笔记(三)——AOP

AOP的一些基本概念 面向对象编程(OOP)的弊端? ——当需要为多个不具有继承关系的而对喜爱那个引入同一个公共行为时,例如日志、安全监测等,我们必须在每个对象里引入公共行为,这样程序中就产生了大量的重复代码。 解决方法? ——面向方面编程(AOP),AOP所关注的方向是横向的,不同于OOP的纵向。 AOP和 IoC容器的关系? ——AOP框架是Spring的一个关键组件,但...

晃在云淡风轻 245

ComfyUI报错ModuleNotFoundError: No module named ‘comfy.options‘

好家伙,我一想我刚刚好像用了pip安装了comfy模块,不会是和ComfyUI自带的comfy模块产生冲突了吧。(3)还有的说是项目不是最新版,叫更新到最新版本的,好家伙,我报错之前根本没更新也没错,突然就报错的。(4)还有的说没有comfy.options这部分代码,叫自己去拉一个,我一看也有啊。我也不知道啥时候脑抽风去装这么个东西的,幸好我聪明机智,一眼就知道了。看把我气的,然后网上搜集各种资料,一个一个去试。

满目星辰 5159

基于Simulink进行光伏逆变器效率分析的仿真建模

特点能量转换:将光伏电池板产生的直流电转换为交流电。效率评估:分析逆变器在不同负载条件和环境条件下的效率。动态特性:考虑温度、光照强度等外部因素对逆变器效率的影响。挑战精确建模:准确地模拟光伏电池板、逆变器及其交互的动力学过程。多因素考量:需要同时考虑输入电压、电流、温度、光照强度等多种因素对逆变器效率的影响。集成度:需要与其他系统(如最大功率点跟踪MPPT算法、电网连接等)无缝集成,以实现全面的系统分析。首先明确要模拟的任务内容。输入条件(如光照强度、温度等)。

amy_mhd的博客 142

Spring个人学习笔记(三)——Spring AOP

Spring AOP简介AOP组成部分AOP使用示例简单示例结合注解示例注解说明AOP常用注解自定义注解 首先再说AOP之前,可以先去了解一些代理模式,Spring的AOP功能就是基于JDK动态代理和Cglib代理实现的,关于代理模式可以去看我的这篇文章——代理模式 简介 AOP,简单的来说就是面向切面编程,它的全称是Aspect Oriented Programming,它能够将我们的业务逻辑和横切的问题进行分离(横切问题和我们业务逻辑关系不大),达到解耦的目的,使代码的重用性和开发效率提高。 通过上面

孙志南的博客 237

2019年高教社杯全国大学生数学建模竞赛 C 题:《机场的出租车问题》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 3453

Spring 学习笔记 (三)AOP

AOP:面向切面编程 将散布在各部分的公共代码统一解决,如日志、安全部分和持久层,只留下业务代码。在运行时,动态的将代码嵌入指定方法、指定位置。 优点 降低耦合度 系统容易扩展 便于代码复用 使用AOP 创建Maven工程,pom.xml添加 <dependencies> <dependency> <groupId>org.spring...

qq_43589143的博客 120

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring3学习笔记(三)AOP

AOP介绍 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度...

qq_41816516的博客 267

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring学习笔记(三)-AOP

Spring学习笔记(三)-AOP 1. 简介 AOP(Aspect Oriented Programming) 意为:面向切面编程 是一种可以通过预编译方式和运行其动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP 底层,就是采用动态代理模式实现的。采用了两种代理:JDK 的动态代理,与 CGLIB的动态代理。 2. OPP、OOP、AOP 面向过程

萝卜_7 205

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring In Action 学习笔记(三) AOP

个人学习Spring In Action学习笔记系列 (三) AOP 源码地址 https://github.com/spring-projects/spring-framework U4 通知Bean 4.1 AOP简介 切面有助于实现交叉事务的模块化,每个模块是为特定领域提供服务,比如日志和安全就是一个交叉事务。 在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行...

panjianlongWUHAN的专栏 608

(三)Spring AOP_Spring_学习笔记

一、AOP 切面编程介绍 在软件业,面向切面编程,是指通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP的特点: AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。 Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理

weixin_44138481的博客 282

spring简易学习笔记三(AOP)

一、AOP相关概念 1、AOP :面向切面编程,可对业务逻辑的各部分隔离,使业务逻辑各部分间耦合度降低,在程序运行期间,不修改源码的情况下对方法进行功能增强,提高程序可重用性和开发效率。 2、常用术语: Target(目标对象):代理的目标对象 Proxy (代理对象):含切面的类对象(即含已被增强方法的类) Joinpoint(连接点):指方法(包括被选中要增强的和未被选中的方法) Pointcut(切入点):将要被增强的方法 Advice(通知/ 增强):指具体增强的功能方法 A

weixin_42877515的博客 185

【spring学习笔记三】aop思想介绍及实现原理

aop思想:一句话介绍介绍就是横向重复,纵向抽取。 最早接触就是学习servlet时使用filter的解决乱码设置,实际上就是一种aop编程。 使用动态代理技术,

public_TIM的博客 581

spring学习笔记三:spring整合jdbc、spring中aop事务操作

文章目录1. spring学习笔记三:spring整合jdbc、spring中aop事务操作1.1. spring整合jdbc1.2. spring整合jdbc的步骤1.3. spring提供的事务管理1.3.1. 事务特性1.3.2. 事务并发产生的问题1.3.3. 解决事务并发问题的方法1.3.4. spring中事务操作对象1.3.5. spring管理事务的属性1.4. spring管理事...

公子&小白的博客 579

Spring5学习笔记(三、AOP开发)

文章目录静态代理设计模式为什么需要代理设计模式?问题代理设计模式概念名词解释代理开发的核心要素编码静态代理存在的问题Sring的动态代理开发Spring动态代理的概念搭建开发环境Spring动态代理的开发步骤动态代理细节分析Spring动态代理详解额外功能的详解MethodBeforeAdvice分析MethodInterceptor(方法拦截器)切入点详解切入点表达式1. 方法切入点表达式2. 类切入点表达式3. 包切入点表达式切入点函数切入点函数的逻辑运算AOP开发AOP的概念AOP的开发步骤切面的名词

小楊同学的笔记本 932

Spring学习笔记(三) --- Spring AOP

1、AOP概述 2、为什么学习AOP? 可以在不修改源码的情况下对程序进行增强,AOP可以进行权限校验,日志记录,性能监控,事务控制. AOP最早由AOP联盟的组织提出的,制定了一套规范.Spring将AOP思想引入到框架中,必须遵守AOP联盟的规范. Spring的AOP的底层用到两种代理机制: * JDK的动态代理 :针对实现了接口的类产生代理. * Cgl...

小道的博客 499

【Java学习之Spring】Spring AOP学习笔记(三)

Adice类型的说明 @Before 前置通知 在某连接点(JoinPoint)——核心代码(类或者方法)之前执行的通知,但这个通知不能阻止连接点前的执行 import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class BeforeExam...

Qregi的博客 427

spring 源码学习笔记(三)—— spring aop

spring aop的实现,主要通过注册InstantiationAwareBeanPostProcessor处理器,在创建bean时判断是否需要增强。具体的注册在AbstractApplicationContext.registerBeanPostProcessors方法中将所有的BeanPostProcessor注册到容器的beanPostProcessors中。其中对aop增强主要的InstantiationAwareBeanPostProcessor处理器是AnnotationAwareAspect

休息的风的专栏 801

Spring学习笔记三(AOP使用)

注:这是学习过程的一些个人笔记,可能理解不够,会有错误的地方。 AOP的简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,AOP的提出是为了解决面对对象编程的一些弊端,比如,在一个实际项目中,如果需要测试某一类业务的性能,最传统的方法就是把这些的业务的源代码找到,然后在这些代码中编写测试性能的代码,一个业务就要编写一个测试性能代码,有多少业务就要...

水中无名鱼的博客 218
上一篇: java的properties文件中的换行书写
下一篇: Spring学习笔记(四)——Spring框架概述
iteye_16154
博客等级 码龄8年 2粉丝 188原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值