spring切点切面aop——xml非注解

面向切面编程AOP 面向切面编程:AOP 简介 AOP(Aspect Oriented Programming) 面向切面编程,是 OOP(Object Oriented Programming,面向对象编程) 的补充和完善;不过OOP引入封装、多态、继承等概念来建立一个对象层级结构,定义的是纵向关系;而AOP恰恰相反,它是利用一种称为“横切”的技术,剖解开封装的内部,并将那些影响了多个类的公共行为封装到一个可重用的... 阅读详情

aop代理就是到了某个方法(被称为“切点”),在执行这个方法之前干什么、之后干什么、异常了有什么等(这些在“切面”中定义)

<!-- 增加aop头,共五个 -->

<beans xmlns=http://www.springframework.org/schema/beans

           xmlns:context="http://www.springframework.org/schema/context"     

           xmlns:aop=http://www.springframework.org/schema/aop

           xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

           xmlns:tx="http://www.springframework.org/schema/tx" 

           xsi:schemaLocation="http://www.springframework.org/schema/beans

                                      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd                          http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd       http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">

 <!-- 在spring-context.jar的meta-inf//spring-context.jar中确定xsd是哪个版本 -->

<!-- <context:annotation-config></context:annotation-config> -->

 

 <!-- 告诉spring扫描哪个包,我让他扫描proxy.spring.agent所有的类-->

 

            <context:component-scan base-package="proxy.spring.agent.*"></context:component-scan>

<!-- 定义两个bean类 -->

            <bean id="myAgent" class="proxy.spring.agent.AgentProxy">

            </bean>

            <bean id="singer" class="proxy.spring.agent.MySinger">

            </bean>

<!-- 这才是正题,spring aop切点切面就要有切点和切面,下面就是切点pointcut 和切面aspect-->

            <aop:config>

 <!-- 定义一个切点 -->

<!-- execution 表达式第一个表示任意返回类型(public..),第二个表示proxy.spring.agent.MySinger下的任意方法,*(..)表示任意方法任意参数也就是这个类下的所有方法都会被代理

execution(* proxy.spring.agent.*.*(..))"表示proxy.spring.agent包下任意类的任意方法 -->                   

                 <aop:pointcut expression="execution(* proxy.spring.agent.MySinger.*(..))" id="point1"/>

 <!-- 定义一个切面 -->

                 <aop:aspect id="aspect1" ref="myAgent">

<!-- 这是定义切点之前、之后、抛异常该干什么 -->

                     <aop:before method="before" pointcut-ref="point1"/>

                     <aop:after method="after" pointcut-ref="point1" />

                     <aop:after-returning method="afterReturn" pointcut-ref="point1"/>

                     <aop:after-throwing method="afterThrow" pointcut-ref="point1"/>

                     <aop:around method="around" pointcut-ref="point1"/>

               </aop:aspect>

         </aop:config>

</beans>


 

-----------------------------------------源码例子(歌手做例子)----------------------------------

-----------------------------------------xml----------------------(歌手和经纪人之间的约定)--------------------------------

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.   
  4. <beans xmlns="http://www.springframework.org/schema/beans"  
  5.         xmlns:context="http://www.springframework.org/schema/context"  
  6.         xmlns:aop="http://www.springframework.org/schema/aop"  
  7.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  8.          xmlns:tx="http://www.springframework.org/schema/tx"  
  9.          xsi:schemaLocation="http://www.springframework.org/schema/beans   
  10.             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  11.            
  12.            http://www.springframework.org/schema/context   
  13.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  14.              
  15.             http://www.springframework.org/schema/aop   
  16.            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
  17.             ">  
  18.             <!-- 在spring-context.jar的meta-inf//spring-context.jar中确定xsd是哪个版本 -->  
  19.       
  20.     <!-- <context:annotation-config></context:annotation-config> -->  
  21.     <context:component-scan base-package="proxy.spring.agent.*"></context:component-scan>  
  22.   
  23.     <bean id="myAgent" class="proxy.spring.agent.AgentProxy"></bean>  
  24.     <bean id="singer" class="proxy.spring.agent.MySinger"></bean>  
  25.   
  26.     <aop:config>  
  27.         <aop:pointcut expression="execution(* proxy.spring.agent.MySinger.*(..))" id="point1"/>  
  28.         <aop:aspect id="aspect1" ref="myAgent">  
  29.               
  30.             <aop:before method="before" pointcut-ref="point1"/>  
  31.             <aop:after method="after"   pointcut-ref="point1" />  
  32.             <aop:after-returning method="afterReturn"  pointcut-ref="point1"/>  
  33.             <aop:after-throwing method="afterThrow"   pointcut-ref="point1"/>  
  34.             <aop:around method="around"  pointcut-ref="point1"/>  
  35.         </aop:aspect>  
  36.     </aop:config>  
  37.   
  38. </beans>  


---------------------------------------------------代理类proxy.spring.agent.AgentProxy-----------------(歌手的经纪人,管着歌手的吃饭拉。。)------------------------------

[java]  view plain copy
  1. package proxy.spring.agent;  
  2.   
  3. import javax.sound.midi.SysexMessage;  
  4.   
  5. import org.aspectj.lang.ProceedingJoinPoint;  
  6.   
  7. public class AgentProxy {  
  8.       
  9.     public void before(){  
  10.         System.out.println("before()........");  
  11.     }  
  12.       
  13.     public void after(){  
  14.         System.out.println("after()......");  
  15.     }  
  16.       
  17.     public void afterThrow(){  
  18.           
  19.         System.out.println("after()......");  
  20.     }  
  21.       
  22.       
  23.     public void around(ProceedingJoinPoint p){  
  24.         //得到参数  
  25.         Object[] o= p.getArgs();  
  26.         for (int i = 0; i < o.length; i++) {  
  27.             Object object = o[i];  
  28.             System.out.println(object);  
  29.         }  
  30.           
  31.         try {  
  32.             //必须加,不加就不执行原函数  
  33.             p.proceed();  
  34.         } catch (Throwable e) {  
  35.             // TODO Auto-generated catch block  
  36.             e.printStackTrace();  
  37.         }  
  38.         System.out.println("around()....");  
  39.     }  
  40.       
  41.     public void afterReturn(){  
  42.           
  43.         System.out.println("afterReturn()......");  
  44.     }  
  45. }  


----------------------------------------------被代理类proxy.spring.agent.MySinger-----------------(著名的歌手)--------------------

[java]  view plain copy
  1. package proxy.spring.agent;  
  2.   
  3. public class MySinger {  
  4.   
  5.     public void sing(){  
  6.         System.out.println("我唱歌");  
  7.     }  
  8.       
  9.     public String ss(String name){  
  10.         System.out.println("MySinger"+"...."+name);  
  11.         return name;  
  12.     }  
  13. }  


--------------------------------测试--------main------------------

[java]  view plain copy
  1. package proxy.spring.agent;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. public class Test {  
  7.       
  8.     public static void main(String[] args) {  
  9.         ApplicationContext app =  
  10.             new ClassPathXmlApplicationContext("proxy/spring/agent/application.xml");  
  11.            
  12.         MySinger singer =(MySinger)app.getBean("singer");  
  13.           
  14.         singer.sing();  
  15.           
  16.         System.out.println("main"+"...."+ singer.ss("周杰伦"));  
  17.     }  
  18.           
  19. }  


--------------------结果-------------------

before()........
我唱歌
after()......
afterReturn()......
around()....
before()........
周杰伦
MySinger....周杰伦
after()......
afterReturn()......
around()....
main....null

SSM之Spring中AOP的代码操作/IDEA如何使用AOP代码/AOP中切点、切面、连接点又是啥,怎么用 写在前面: 接着记录自己的Spring学习之旅,若看不懂则建议先看前几篇博文,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用! 1.9.3 AOP相关概念 在学习AOP的过程中会有相关术语,我们必须知道其所指含义,如下: Target(代理对象):代理的目标对象 Proxyt(代理): 某个类被AOP增强后就会产生一个代理类 JoinPoint(连接点):被拦截到的点,这里点仅仅是指方法。 PointCut(切入点):对某些JoinPoint要进行拦截的定义 Advice(通知/增 阅读详情

相关推荐

Spring boot AOP通过 XML 配置文件声明

通过 XML 配置文件声明 在前两篇博文和示例中,我们已经展示了如何通过注解配置去声明切面,下面我们看看如何在 XML 文件中声明切面。下面先列出 XML 中声明 AOP 的常用元素: AOP配置元素 用途 aop:advisor 定义AOP通知器 aop:after 定义AOP后置通知(不管被通知的方法是否执行成功) aop:after-returning 定义AOP返回通知 aop:after-throwing 定义AOP异常通知 aop:ar...

Curtain的博客 3932

springAop使用表达式排除一个包下的其中一个子包中的所有方法

需求:使用aop记录日志,排除一个包下的其中一个子包中的所有方法 方法一:合并写如下 @Pointcut("execution(* com.gisquest.platform.modules.*.web.*.*(..)) && !execution(* com.gisquest.platform.modules.monitor..*.*(..))") 说明:monitor包是modules下的一个子包,里面是关于监控的一些信息,现在想将其排除掉 方法二:分开写如下...

喜羊羊love红太狼 2460

Qt UI界面美化教程1:【“飞扬青云” Qt精美控件】使用教程1

相信很多小伙伴在使用Qt Widget的过程中都会遇到一个问题,开发出来的界面,丑!丑!丑!当然Qt做界面美化可以用到QSS,需要对前端知识有一定了解,后续本套教程将会做讲解。本篇文章,我们直接站在巨人(大佬飞扬青云)的肩膀上,使用他开发好的163款自定义控件,请大家一定支持他,去给他小心心,他的个人主页:本篇文章只讲述如何在 QtDesigner 安装这些控件。

2401_87556704的博客 1420

Spring-AOP-XML方式

AOP思想和重要术语: 数据源:javaBean OOP(面向对象编程) AOP(横切面编程): 同时存在A/B/C三个类,三个类同时存在权限检查、日志检查、开始事物、提交回滚操作,还有具体的业务,只有具体不同,其他都相同 我们可以把每一个功能叫做切面,面向切面的编程, 就是面上切面的角度思考。每一个切面是以一个功能模块存在的(类) 之前: A...

记录我学习的点点滴滴 229

数据产品需求文档(PRD)怎么写?阿里P8分享的模板+5个避坑点

作用:记录文档的版本、作者、评审信息,避免“文档混乱”。填写规范字段说明示例文档名称清晰反映产品名称,如“用户行为分析平台PRD”用户行为分析平台PRD_V1.0文档版本用“版本号+日期”,如V1.0_20240301编写人数据产品经理姓名+联系方式张三(138-XXXX-XXXX)评审人员业务负责人、开发经理、数据分析师、运维负责人李四(业务)、王五(开发)、赵六(数据)、周七(运维)评审时间评审日期2024-03-05评审意见。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1574

LTE/NR中的相应cause场景【原创】

目录1.背景2.LTE EMM cause2.0 写在最前2.1 特殊处理的cause第一梯队第二梯队2.2 非特殊处理的cause3.NR cause 实网分析终端被拒等问题,经常遇到各类cause,其会对应不同的终端限制行为。查找已有资料后理解没有很深,自行总结本文用于梳理现象,如有错误敬请指正,转载请注明出处。 本文用于记录协议Ts 24.301及Ts 24.501中的cause及其对应行为。 已总结的cause值: 24.301中的cause分

2301_79567300的博客 3491

SpringAop两种配置:xml配置和注解方式

所谓的springaop就是面向切面编程,就是在你的原有项目功能上,通过aop去添加新的功能,这些功能是建立在原有的功能基础上的,而且不会修改原来的动能代码以及功能逻辑。例如你用银行卡购物,购物付款,这是一个功能。付款后,银行向你的手机发送一条取钱信息,这就是新加的功能。也就是实现了增强。

Su3253067688的博客 1014

Hyper-V虚拟机 安装 银河麒麟V10桌面版

如何在windows 11 Hyper-V 虚拟机中 安装 银河麒麟V10桌面版。

m0_46756112的博客 3418

关于 spring aop execution 属性的使用

天行健,君子以自强不息;地势坤,君子以厚德载物。 1008

应用商店评论分析实战:Python逆向工程破解Google Play加密接口与NLP建模

在移动互联网时代,应用商店中的用户评论成为了开发者优化应用、提升用户体验的重要依据。然而,Google Play等应用商店对评论数据进行了加密处理,直接爬取难度较大。本文将介绍如何使用Python逆向工程破解Google Play的加密接口,实现对应用商店评论的实时采集,并结合NLP(自然语言处理)技术进行情感分析和主题建模,为开发者提供有价值的数据支持。

u014481728的博客 1348

AI Agent在医疗诊断中的智能应用研究

本文探讨了AIAgent在医疗诊断中的智能应用,分析了其技术原理、实际案例及发展挑战。AIAgent通过机器学习算法处理医疗数据,提升诊断准确性和效率,市场规模预计2025年达200亿美元。核心技术包括数据预处理、深度学习模型和隐私保护方法。应用案例涵盖肺癌筛查、阿尔茨海默病预测等,但面临数据偏差、伦理责任等挑战。未来趋势包括多模态学习、个性化医疗和量子计算融合。随着技术优化和伦理完善,AIAgent将成为医疗体系的重要组成部分。

郑伟强dev的专栏 96

【Spring】切面编程及 AOP 示例(注解、xml配置)

1.寻找入口(BeanPostProcessor) postProcessBeforInitialization() public interface BeanPostProcessor { // 为在Bean的初始化前提供回调入口 @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } .

菜鸡也有大佬梦 574

【YOLOv11改进- 主干网络】YOLOv11+WTConv(ECCV2024): 基于YOLOv11的主干网络改进,大感受野的小波卷积

论文提出了WTConv,这是一个使用级联小波分解的层,并执行一组小卷积核的卷积,每个卷积专注于输入的不同频率带,并具有越来越大的感受野。这个过程能够在输入中对低频信息给予更多重视,同时仅增加少量可训练参数。实际上,对于一个  的感受野,可训练参数数量只随着  的增长而呈对数增长。而WTConv与常规方法的参数平方增长形成对比,能够获得有效的卷积神经网络(CNN),其有效感受野(ERF)大小前所未有。

qq_41304809的博客 1401

【Spring】使用aop切面编程时要给那些类加注解

,但通常不需要为目标类添加特定的注解。目标类需要在 Spring 容器中注册,以便切面可以拦截它们的方法调用。切入点表达式定义了切面的切入点,它通常位于切面类的通知方法上。配置类或 XML 配置文件用于配置 Spring 容器,以启用切面和注解驱动的切面编程。通常,切面类也需要被 Spring 扫描到,以便 Spring 容器能够创建切面实例。通常,你不需要为目标类添加特定的注解,但它们需要在 Spring 容器中注册,以便切面能够拦截它们的方法调用。:切面类是包含切面逻辑的类,它需要使用。

dandelionl_的博客 5434

在 ABAP Push Channel 里玩转 Detached Client:用 Attach Handle 把 WebSocket 连接交接给业务逻辑

摘要:本文介绍了ABAP Push Channels (APC)中的Detached Client技术,该技术通过将WebSocket连接建立与后续处理分离,实现更高效的实时通信。核心流程包括创建连接、使用connect_and_detach交接连接、以及通过attach handle重新附着发送消息。文章还探讨了PCP协议和AMC技术在企业级推送场景中的应用,并通过示例代码展示了Detached Client的具体实现方式。这种设计解决了传统轮询的资源浪费问题,特别适用于生产线监控、客服系统等需要服务端主

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2315

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring AOP -- 面相切面编程

基于注解 @Aspect;切点表达式;通知类型;多种通知类型的执行顺序;@Pointcut;多个切面类的执行顺序;@Order;基于自定义注解;给已有的注解进行功能的增强;AOP的优势:代码无侵入:不修改原始的业务方法,就可以对原始的业务方法进行了功能的增强或者是功能的改变;减少了重复代码;提高开发效率;维护方便。 ​

2302_76339343的博客 1514

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring AOP(二)——在XML中配置切面

在Spring AOP(一)中介绍了AOP的基本概念和几个术语,现在学习一下在XML中如何配置AOP。 在XML中AOP的配置元素有以下几种: AOP配置元素 描述 顶层的AOP配置元素,大多数的元素必须包含在元素内 定义切面 启用@AspectJ注解驱动的切面 定义切点 定义AOP通知器 定义

Trigl的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring中AOP实现(AOP的细致解析)

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在通过将横切关注点(cross-cutting concerns)从应用程序的主要业务逻辑中分离出来,以提高代码的模块化性和可重用性。基于XML的AOP实现需要在Spring文件中配置大量的代码信息,不利于代码的阅读和维护,为了解决此问题,本实例将使用基于注解的方式实现AOP。创建ProductService(包com.j2ee.service)类,定义方法需要完成什么工作(如注册,登录,数据的增删改查的等)

qq_74329022的博客 2418

【Spring6】| 面向切面编程AOP(核心重点)

【Spring6】| 面向切面编程AOP(重要)

m0_61933976的博客 1393

Spring注解配置AOP切面实现注解切点记录方法执行日志和时间

1、方法执行日志方案设计 1.1 注解的方式 通过定义日志注解+解析注解的方式来实现记录方法执行日志,这种方式在需要监控的接口实现方法上打上定义的注解,再通过解析注解的方式将日志记录到文件。 注解方式的优点是粒度细,在需要监控的服务接口实现方法打上注解就可以实现记录日志。缺点是服务接口太多的话,每一个接口都需要打上注解,比较繁琐。 定义注解 import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPoli

进修的CODER 1907

aop注解配置切点 spring_Spring AOP 之 通知、连接点、切点、切面。

1:知识背景软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点。而为直切关注点提供服务的,就是横切关注点。2:面向切面的基本原理什么是面向切面编程横切关注点:影响应用多处的功能(安全、事务、日志)切面:横切关注点被模块化为特殊的类,这些类称为切面优点:每个关注点现在都集中于一处,而不是分散到多处代码中服务模块更简洁,服务模块只需关注核心代码。AOP 术语通知:定义:切面也需...

weixin_28703451的博客 672

aop注解配置切点 spring_Spring使用注解式声明切面与使用

1 什么是面向切面这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。AOP是Spring提供的关键特性之一。AOP即面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。这些系统性的编程工作...

weixin_39879674的博客 816

Spring AOP切面

在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成(AOP)所要解决的

机智猫 1万+

Spring使用注解式声明切面与使用

1 什么是面向切面 这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。 AOP是Spring提供的关键特性之一。AOP即面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。这些系统性的编程工作都可以独立编码实现,然后通过AOP技术切入进系统即可。从而达到了 将不同的关注点分离出来的效果。 2

HiterCoder 2986

Spring 面向切面编程AOP 详细讲解

交叉业务。这些交叉业务几乎是通用的,不管你是做银行账户转账,还是删除用户数据。日志,事务处理,安全,这些都是需要做的。如果在每一个业务处理过程当中,都参杂这些交叉业务第一:交叉业务代码在多个业务流程中反复出现,显然这个交叉业务代码并没有得到充分的复用,并且修改这些交叉业务代码的话,需要修改多处。第二:程序员无法专注核心业务代码的编写,在编写核心业务代码的同时还需要处理这些交叉业务。使用 AOP 可以很轻松的解决以上问题。如下图:可以更好的理解 AOP思想。简单的说AOP:就是将与核心业务。

weixin_61635597的博客 1009
上一篇: pring事务管理(注解式声明事务管理)
下一篇: spring单例和多例详解。如何在单例中调用多例对象
network_boy
博客等级 码龄12年 9粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值