Spring示例:第一个AOP

Spring的AOP注解配置及示例 文章目录1 Spring的AOP注解配置1.1 AOP注解前提1.2 AOP常用注解1.2.1 @Aspect切面注解1.2.2 @Before前置通知注解1.2.3 @AfterReturing后置通知注解1.2.4 @Around环绕通知注解1.2.5 @AfterThrowing异常通知注解1.2.6 @Before前置通知注解1.2.7 @Pointcut切点注解1.3 AOP注解示例1.3.1 开启注解配置1.3.2 目标类代码1.3.3 切面类1.3.4 测试类1.3.5 运行结果 1 Spri 阅读详情

首先有如下两个关于开发过程的概念:

  • 纵向编程,代码较为重复
  • 横向编程,重复代码形成切面织入节点

下面编写实例:

  1. 添加额外倚赖
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.1</version>
        </dependency>

  1. 新建类
public class BeforeAdvice {

    public void methodBefore(){
        System.out.println("我在方法之前执行");
    }

}

public class ProviderService {
    public void add(){
        System.out.println("添加了一个供应商");
    }
}

  1. 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">


    <!--【第一步:激活代理】 aop是基于代理完成的,所以我们要激活我们的自动代理-->
    <aop:aspectj-autoproxy/>

    <!--【第二步:注册一个切面要使用的类】-->
    <bean class="com.zt.advice.BeforeAdvice" id="beforeAdvice">
    </bean>

    <bean class="com.zt.service.ProviderService" id="providerService">
    </bean>

    <!--【第三步:配置切入点等等信息】-->
    <aop:config >
        <aop:aspect id="beforeAspect" ref="beforeAdvice">
            <!--
                aop:before 表明它是前置通知
                method 指明了它是哪个方法来切
                pointcut:切入点
                        *包下的*类*方法
            -->
            <aop:before method="methodBefore" pointcut="execution(* com.zt.service.ProviderService(..))"></aop:before>
        </aop:aspect>
    </aop:config>


</beans>

带张图解如下:
在这里插入图片描述
关于execution部分的解释如下:
在这里插入图片描述
在这里插入图片描述
4. 测试

@Test
    public void m1(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

        ctx.getBean("beforeAdvice", BeforeAdvice.class);
        //如果不是spring容器管理的bean,那么织入行为无法生效
       // ProviderService providerService = new ProviderService();
        /*ProviderService providerService = ctx.getBean("providerService", ProviderService.class);
        providerService.add();*/
    }
spring-aop 之 aop:config 开头 aop部分的解析器由AopNamespaceHandler注册,其init方法: @Override public void init() { registerBeanDefinitionParser("config", new ConfigBeanDefinitionParser()); registerBeanDefinitionParser("aspectj-autoproxy", new AspectJAutoProxyBeanDefinitionParser()); 阅读详情

相关推荐

掌握Spring Boot中AOP的设计与应用:完整示例解析

在Spring AOP框架中,一个切面(Aspect)可以看作是一个跨多个关注点的模块。它由两部分组成:Pointcut(切入点):定义了AOP框架将要执行的切面逻辑,它用于定位特定的方法调用。切入点可以是方法执行、构造函数调用、字段的get和set操作等等。Advice(通知):定义了在连接点(即切入点匹配到的方法)上执行的动作。它负责定义何时执行、执行前后做什么等操作。

weixin_42527589的博客 944

Spring AOP

AOP(Aspect-Oriented Programming,面向切面编程):是一种软件开发的编程范式,旨在将横切关注点(cross-cutting concerns)与核心业务逻辑分离,以提高代码的模块化性、可维护性和复用性

2301_76161469的博客 5324

Spring AOP通知类型实战:前置、后置、环绕示例

在Spring框架中,AOP是通过动态代理技术实现的。Spring AOP主要关注对象间的连接点(join points)和切面(aspects)。连接点是在应用执行过程中能够插入切面的点,通常是方法调用。切面是横切关注点的模块化,比如事务管理、安全性等。AOP(面向切面编程)是一种编程范式,旨在将横切关注点与业务主体逻辑分离,以提高模块化。在AOP中,切点(Pointcut)定义了要增强的方法,而通知(Advice)则是增强逻辑的具体实现。

weixin_34438187的博客 1211

Spring Aop实例

在上篇博文中,我向大家介绍了Aop重要概念和教程,这回给出代码示例。 一、XML方式 1. TestAspect:切面类 package com.spring.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class TestAspect { pu

鹏霄万里展雄飞 8万+

[Pytorch案例实践001]手写MNIST数字识别

Pytorch实现手写数字识别,带完整数据集。

2403_83044722的博客 1115

RU.EXE实用指南:从基础操作到高级调试技巧

本文是RU.EXE(RW Everything)的实用指南,详细介绍了这款硬件调试工具从基础操作到高级技巧的全过程。文章阐述了RU.EXE作为直接读写硬件寄存器、内存和PCI配置空间的强大工具,如何帮助硬件工程师和开发人员高效进行底层系统调试与故障排查,并强调了安全操作的重要性。

weixin_29228203的博客 278

【示例】Spring-AOP理解

System.out.println("---------基于XML自定义类方式实现,前置通知:方法执行前---------");System.out.println("---------基于XML自定义类方式实现,后置通知:方法执行前---------");

HMTeen 1118

倍福Twincat 3.0软件与C++通讯问题(ADS通讯)

倍福Twincat 3.0软件与C++通讯问题 倍福公司所开发的Twincat 3.0软件是基于Visual studio开发环境的一款自动化软件,目前其与C++程序通讯的方式主要还是靠ADS-DLL接口进行数据和信息传递,作者在Visual C++上进行混合编程开发,通过TwinCAT路由器和C语言API函数实现混合编程。 倍福软件提供: TcAdsDll.dll—动态链接库; TcAdsDll...

weixin_42811651的博客 1万+

Spring AOP 第一个简单示例

build.gradle dependencies { compile group: 'org.springframework', name: 'spring-aop', version: '5.2.1.RELEASE' compile 'org.springframework:spring-context:5.2.1.RELEASE' compile 'org.springframework:spring-core:5.2.1.RELEASE' compile 'org.a

a1158375969的专栏 241

稚晖君Dummy机械臂CAN总线控制详解:从代码到实战(附常见问题排查)

本文深入解析了稚晖君Dummy机械臂的CAN总线控制技术,从协议设计到代码实现,详细介绍了CAN总线在机械臂控制中的核心价值、通信协议栈设计、运动控制指令实现及常见问题排查方法。通过实战案例和代码示例,帮助开发者快速掌握机械臂CAN总线控制的关键技术。

uuu88的博客 295

示波器面板上的隐藏功能:如何利用BW Limit和EXT TRIG提升测量精度

本文深入探讨示波器面板上的隐藏功能BW Limit和EXT TRIG,揭示它们如何提升测量精度。通过带宽限制(BW Limit)有效滤除高频噪声,结合外部触发(EXT TRIG)确保稳定信号捕获,为电子测量提供专业解决方案。特别适用于开关电源、传感器信号等复杂场景的高精度测量需求。

weixin_30300225的博客 518

Spring AOP示例

AOP基本概念: 切面(Aspect):切面是通知和切点的结合。 通知(Advice):定义了切面是什么以及何时使用。 切点(Pointcut):定义了切面作用在何处。 … 不多bb,直接开干。 示例: 基本思路:启用Aspect自动代理;编写切面逻辑。 目标类 package com.markix.aop.service; import org.springframework.stereoty...

Markix的博客 640

[南大ICS-PA2] 字符串处理函数和printf实现

[南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现

qq_42474104的博客 2987

示例:Spring AOP 切面编程

通过这个示例,您可以清晰地看到如何通过 AOP 实现日志记录,避免在业务代码中混杂非功能性逻辑。实际项目中,AOP 还可用于事务管理、性能监控、权限校验等场景。,展示如何通过切面实现日志记录功能,包含步骤说明和代码实现。

yuren_xia的博客 637

python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机

文章目录 目录 文章目录 前言 一、opencv接口介绍 二、调用海康机器人工业相机 1.使用海康机器人工业相机的前提 2.调用海康机器人工业相机进行显示 3.调用海康机器人工业相机进行存图 4.调用海康机器人工业相机存视频 5.调用海康机器人工业相机进行简单图像处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下.

qq_39570716的博客 1万+

WRF移动嵌套结合伏羲模型与CFD(PALM)高精度多尺度降尺度分析研究

WRF移动嵌套(Moving Nesting):动态调整高分辨率嵌套网格位置,追踪天气系统(如台风、强对流系统)以提高局地预报精度。伏羲(Fuxi)模型:国产数值模式,提供对WRF模拟的初始及边界条件优化。CFD(Computational Fluid Dynamics)PALM模型:精细化局地流场、湍流、温度分布。

m0_57411304的博客 1715

Spring AOP 详细深入讲解+代码示例

Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。

小电玩 2614

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

spring aop示例_具有AOP事务管理的Spring ORM示例

spring aop示例This is a very simple Spring ORM example that shows you how to configure an application with Spring that uses 这是一个非常简单的Spring ORM示例,向您展示了如何使用具有以下功能的Spring配置应用程序: Dependency Injection (@Au...

从零开始的教程世界 242

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring:AOP

在软件业中,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构。AOP最早由AOP联盟的组织提出,并制定了一套规范。Spring将AOP思想引入到框架中,就必须遵守AOP联盟的规范。Spring中的AOP技术是通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

2301_81535770的博客 1038

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

springboot中Spring AOP的作用及其简单示例

Spring AOP 在 Spring Boot 中的核心价值是解耦,通过切面集中处理通用功能,让业务代码更纯净。日志记录(请求参数、执行时间);权限校验(方法级权限控制);异常统一处理;事务管理(Spring 声明式事务底层基于 AOP);缓存增强(如方法结果缓存)。使用时需注意:AOP 是基于动态代理实现的,默认对接口用 JDK 代理,对类用 CGLIB 代理,且只能增强 Spring 容器管理的 bean。

m0_74455373的博客 861

Spring Boot – aop 示例

落花人独立,微雨燕双飞。 概述 学习在Spring Boot应用程序中实现AOP,并使用AspectJ添加不同的AOP支持夸业务管理,例如日志记录,概要分析,缓存和事务管理。 使用Spring Boot设置AOP Maven 在spring boot中设置AOP需要包含spring-boot-start-aop依赖项。它将spring-aop和aspectjweaver依赖项导入到应用...

weixin_45932995的博客 250

Spring AOP 详解

AOP

2301_79184547的博客 1129

【Spring】AOP:基本概念及aop示例(包括xml、注解)

1.AOP简介 1.1 定义 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 1.2 优点 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 1.3 原理 aop底层将采用代理机制进行实现。 接口 + 实现类:spring 默认采用 jdk 的动态代理 Proxy。 实现类:spring 默认采用 cglib 字节码增强。 1.4 基本概念 target:目标类,需要被代理的类。例如:Use

A minor 2850

Spring AOP之3种增强方式简单示例

AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。从《Spring实战(第4版)》图书中扒了一张图:从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。想象下面的场景,开发中在多个模块间有某段重复的代码,我们通常是怎么处理的?显然,没有人会靠“复制粘贴”吧。在传统的面向过程编程中,我们也会

wl_Honest的博客 857
上一篇: 使用SpringBoot实现对数据库的增删改查和分页
下一篇: SpringSecurity:基本用法
金心靖晨
博客等级 码龄9年 460粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值