【狂神】Spring5(Aop的实现方式)
今天没有偷懒,只是忘了Mybatis,所以去补课了~
┏━━━━━━━━━━━━━━━┓ NICE PIGGY PIG.. ┗━━━━━━━△━━━━━━━┛ ヽ(´・ω・)ノ | / UU
1.Aop实现方式一
1.1、什么是AOP

1.2、AOP在Spring的作用
3、使用Spring实现Aop

1.4、案例代码
//1.afterLog
package com.zhang.log;import org.springframework.aop.AfterAdvice;
import org.springframework.aop.AfterReturningAdvice;import java.lang.reflect.Method;public class AfterLog implements AfterReturningAdvice {@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {System.out.println("执行了"+method.getName()+"方法,结果为:"+returnValue);}
}
//2.Log
package com.zhang.log;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;public class Log implements MethodBeforeAdvice {@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");}
}//3.UserService
package com.zhang.service;public interface UserService {void add();void delete();void update();void query();
}//4.UserServicelmpl
package com.zhang.service;public class UserServicelmpl implements UserService {@Overridepublic void add() {System.out.println("添加!");}@Overridepublic void delete() {System.out.println("删除!");}@Overridepublic void update() {System.out.println("更改!");}@Overridepublic void query() {System.out.println("查找!");}
}//5.Test类
import com.zhang.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = context.getBean("UserService", UserService.class);userService.delete();}
}//6.pom.xml<!--aop织入--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.4</version></dependency>
//7.application.xml
<?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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd
"><!--注册bean--><bean id="log" class="com.zhang.log.Log"></bean><bean id="afterLog" class="com.zhang.log.AfterLog"></bean><bean id="UserService" class="com.zhang.service.UserServicelmpl"></bean><!--方式一:执行原生Spring API接口--><!--配置aop:需要导入aop的约束--><aop:config><!--切入点:expression:表达式。execution(要执行的位置!* * * *),括号里的两个点表示可以有任意的参数--><aop:pointcut id="pointout" expression="execution(* com.zhang.service.UserServicelmpl.*(..))"/><!--执行环绕增强--><aop:advisor advice-ref="log" pointcut-ref="pointout"/><aop:advisor advice-ref="afterLog" pointcut-ref="pointout"/></aop:config>
</beans>
2、Aop实现方式二

相关代码如下:
<!--方式二:自定义--><bean id="diy" class="com.zhang.diy.Diy"/><aop:config><!--自定义切面 ref表示要引用的类--><aop:aspect ref="diy"><!--切入点--><aop:pointcut id="point" expression="execution(* com.zhang.service.UserServicelmpl.*(..))"/><!--通知也就是方法--><aop:before method="before" pointcut-ref="point"/><aop:after method="after" pointcut-ref="point"/></aop:aspect></aop:config>
3、Aop实现方式三
注解实现IOP

方式三是通过注解来实现的,这里多加了个环绕的知识点。

相关代码:
package com.zhang.diy;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class AnnotationPoinCut {@Before("execution(* com.zhang.service.UserServicelmpl.*(..))")public void before(){System.out.println("=====前====");}@After("execution(* com.zhang.service.UserServicelmpl.*(..))")public void after(){System.out.println("=====后====");}@Around("execution(* com.zhang.service.UserServicelmpl.*(..))")public void around(ProceedingJoinPoint jp) throws Throwable {System.out.println("环绕前");Object proceed = jp.proceed();System.out.println("环绕后");}
}
总结
总言之,aop的实现可能理解会有点麻烦,但是只要再看一遍视频就好了。其实主要就是一些理念的理解,比如说切面,切入点这些。很简单的,用心就可以了。加油哦!

相关文章:
【狂神】Spring5(Aop的实现方式)
今天没有偷懒,只是忘了Mybatis,所以去补课了~ ┏━━━━━━━━━━━━━━━┓ NICE PIGGY PIG.. ┗━━━━━━━△━━━━━━━┛ ヽ(・ω・)ノ | / UU 1.Aop实现方式一 1.1、什…...
第2章 Linux多进程开发 2.18 内存映射
内存映射:可以进行进程间的通信 1.如果对mmap的返回值(ptr)做操作(ptr), munmap是否能够成功? void * ptr mmap(…); ptr; 可以对其进行操作 munmap(ptr, len); // 错误,要保存地址 2.如果open时O_RDONLY, mmap时prot参数指定PROT_READ | PROT_WRITE会怎样? 错…...
【C++深入浅出】类和对象上篇(类的基础、类的模型以及this指针)
目录 一. 前言 二. 面向对象与面向过程 2.1 面向过程 2.2 面向对象 三. 类的基础知识 3.1 类的引入 3.2 类的定义 3.3 成员变量的命名规则 3.4 封装 3.5 类的访问限定符 3.6 类的作用域 3.7 类的实例化 四. 类的对象模型 4.1 类对象的大小 4.2 类对象的存储方式 …...
气象站在日常生活中的重要性
气象站在我们的日常生活中起着重要的作用,它监测着天气的变化,能够提供及时、准确的天气信息,对我们的生产和生活都有着极大的影响。 一、气象站的工作原理 气象站通过一系列传感器设备,对风速、风向、温度、湿度、气压、雨量等…...
数据结构学习系列之用队列实现栈功能与用栈实现队列功能
队列与栈:队列(Queue)是一种先进先出(FIFO)的线性表;栈(Stack)是一种后进先出(LIFO)的线性表;实例1:用队列实现栈的功能;算…...
PY32F003F18P单片机概述
PY32F003F18P单片机是普冉的一款ARM微控制器,内核是Cortex-M0。这个单片机的特色,就是价格便宜,FLASH和SRAM远远超过8位单片机,市场竞争力很强大。 一、硬件资源: 1)、FLASH为64K字节; 2)、SRAM为8K字节&…...
查看GPU占用率
如何监控NVIDIA GPU 的运行状态和使用情况_nvidia 85c_LiBiGo的博客-CSDN博客设备跟踪和管理正成为机器学习工程的中心焦点。这个任务的核心是在模型训练过程中跟踪和报告gpu的使用效率。有效的GPU监控可以帮助我们配置一些非常重要的超参数,例如批大小,…...
设计模式-中介者模式
文章目录 一、前言二、中介者模式1、定义2、未使用/使用中介者模式对比2.1、未使用中介者模式:2.2、使用中介者模式: 3、角色分析3.1、中介者(Mediator):3.2、同事(Colleague):3.3、…...
react 大杂烩
组件 1.是返回标签的js函数,是可重复利用的UI元素 function test(){ return ( test ); } 2.构建组件: (1)export 导出组件 (2)定义函数,名称必须以大写字母开头 (3)…...
图解 STP
网络环路 现在我们的生活已经离不开网络,如果我家断网,我会抱怨这什么破网络,影响到我刷抖音、打游戏;如果公司断网,那老板估计会骂娘,因为会影响到公司正常运转,直接造成经济损失。网络通信中&…...
Kubernetes技术--k8s核心技术Controller控制器
1.Controller概述 Controller是在集群上管理和运行容器的对象。是一个实际存在的对象。 2.pod和Controller之间的关系 pod通过controller实现应用的运维,包括伸缩、滚动升级等操作。 这里pod和controller通过label标签来建立关系。如下所示: 3.Deployment控制器应用场景 -1:…...
Kubernetes技术--k8s核心技术 Secret
1.概述 Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret可以以 Volume 或者环境变量的方式使用。 作用 加密数据存储在/etc中,使得pod容器以挂载volume方式进行访问。在进行的数据存储中是以base64加密的方式…...
day27 String类 正则表达式
String类的getBytes方法 String s "腻害"; byte[] bytes s.getBytes(StandardCharsets.UTF_8); String类的new String方法 String ss "ss我的"; byte[] gbks ss.getBytes("gbk"); String gbk new String(gbks, "gbk"); String类的…...
Java设计模式:四、行为型模式-10:访问者模式
一、定义:访问者模式 访问者模式:核心在于同一个事物不同视角下的访问信息不同。 在一个稳定的数据结构下,例如用户信息、雇员信息等,增加易变的业务访问逻辑。为了增强扩展性,将两部分的业务解耦的一种设计模式。 二…...
【juc】读写锁ReentrantReadWriteLock
目录 一、说明二、读读不互斥2.1 代码示例2.2 截图示例 三、读写互斥3.1 代码示例3.2 截图示例 四、写写互斥4.1 代码示例4.2 截图示例 五、注意事项5.2.1 代码示例5.2.2 截图示例 一、说明 1.当读操作远远高于写操作时,使用读写锁让读读可以并发,来提高…...
Linux开机启动Tomcat
需求背景 Linux重启后要手动执行"startup.sh"启动Tomcat,比较麻烦,想要Linux开机启动Tomcat。 开机启动 #---------------------------------------------------------- sudo tee /usr/bin/tomcat.sh <<-EOF #! /bin/bash nohup /opt/to…...
javaweb、spring、springmvc和springboot有什么区别,都是做什么用的?
JavaWeb是一种基于Java技术的Web开发模式,用于构建动态的、可交互的Web应用程序。它是一种使用Java语言开发Web应用的技术堆栈,包括Java Servlet、JavaServer Pages(JSP)、JavaServer Faces(JSF)等。JavaWe…...
已解决module ‘pip‘ has no attribute ‘pep425tags‘报错问题(如何正确查看pip版本、支持、32位、64位方法汇总)
本文摘要:本文已解决module ‘pip‘ has no attribute ‘pep425tags‘的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。并且最后说明了如何正确查看pip版本、支持、32位、64位方法汇总 😎 作者介绍&…...
Matlab(画图初阶)
目录 1.plot()函数 2. hold(添加新绘图是否保留旧绘图) 3. Plot Style 3.1 线型 3.2 标记 3.3 颜色 编辑 4. legend() 5.X 、Y and Title? 6. Text()和annotation() 7.line(创建基本线条) 7.1 基本语法 7.2 指定线条属性 7.3 更改线条属性 8.图像属性 8.1 …...
汽车自适应巡航系统控制策略研究
目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…...
忍者像素绘卷参数详解:CFG值对‘火之意志’风格权重响应敏感度测试
忍者像素绘卷参数详解:CFG值对火之意志风格权重响应敏感度测试 1. 引言:像素艺术与AI的完美融合 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工具,它将传统忍者文化与16-Bit复古游戏美学相结合,创造出独特的视觉体验…...
手机号码定位查询工具:3分钟快速部署,轻松查询号码归属地
手机号码定位查询工具:3分钟快速部署,轻松查询号码归属地 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitco…...
点集相等概念表明流传2300多年使世人深信不疑的直线公理将无穷多各异直线误为同一线
黄小宁 “科学”共识:在初等数学领域绝对不可能有颠覆性创新,谁若说“已非常成熟”的初等数学存在重大错误那就说明谁有“自大狂型精神病”。 “实数集”R可几何化为R轴。与x∈R相异(等)的实数均可表为yxδ(增量δ可…...
WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案
WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...
Whistle Mock实战:精准模拟流式JSON接口的响应头与数据体
1. 为什么我们需要精准模拟流式JSON接口 在前后端分离的开发模式下,前端工程师经常需要模拟后端接口进行开发调试。特别是遇到流式JSON数据这种特殊场景时,简单的数据Mock往往无法满足需求。我遇到过不少这样的情况:明明数据内容完全正确&…...
实战指南:基于快马平台与yolov11快速开发货架商品检测系统
今天想和大家分享一个最近用yolov11实现的零售商品检测项目,整个过程在InsCode(快马)平台上完成得特别顺利。这个系统可以自动识别超市货架上的商品,特别适合库存管理或者智能结算场景。 项目背景与需求分析 超市货架商品识别看似简单,实际会…...
千问3.5-2B保姆级教程:从模型原理到业务集成的全栈技术路径
千问3.5-2B保姆级教程:从模型原理到业务集成的全栈技术路径 1. 认识千问3.5-2B视觉语言模型 千问3.5-2B是Qwen系列中的小型视觉语言模型,它能够同时理解图片内容和处理自然语言。简单来说,这个模型就像是一个能"看懂"图片并回答问…...
建筑混凝土搅拌机的设计【任务书、带solidworks三维、7张cad图纸、毕业论文、开题报告、答辩稿】
建筑混凝土搅拌机作为现代建筑施工的核心设备,其设计需兼顾效率、可靠性与适应性。任务书明确了设计目标:通过优化搅拌机构、传动系统及整体结构,实现混凝土均匀性提升与能耗降低,同时确保设备在复杂工况下的稳定性。这一目标贯穿…...
[火]图像数据增强 支持目标检测数据集图像增强 标注框信息同步增强 支持以下图像增强方式HSV-Hue 增强HSV-Saturation 增强 HSV-Value 增强图像旋转 (+/
[火]图像数据增强 支持目标检测数据集图像增强 标注框信息同步增强 支持以下图像增强方式 HSV-Hue 增强 HSV-Saturation 增强 HSV-Value 增强 图像旋转 (/- degrees) 图像平移 (/- 分数) 图像缩放 (/- 增益) 图像错切 (/- 分数) 图像透视 (/- 分数), 范围:0-0.00…...
关于统好 AI可持续发展三大趋势
问:如何理解统好 AI 的可持续发展趋势?答:统好 AI 的可持续发展,核心是技术、业务与运营长期适配,不追求短期迭代,而是围绕企业全生命周期需求构建稳定演进路径。绵阳统好软件有限公司以一体化底座为基础&a…...
