当前位置: 首页 > news >正文

【狂神】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的实现方式)

今天没有偷懒&#xff0c;只是忘了Mybatis&#xff0c;所以去补课了~ ┏━━━━━━━━━━━━━━━┓ NICE PIGGY PIG.. ┗━━━━━━━△━━━━━━━┛ ヽ(&#xff65;ω&#xff65;)&#xff89; | / UU 1.Aop实现方式一 1.1、什…...

第2章 Linux多进程开发 2.18 内存映射

内存映射&#xff1a;可以进行进程间的通信 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 类对象的存储方式 …...

气象站在日常生活中的重要性

气象站在我们的日常生活中起着重要的作用&#xff0c;它监测着天气的变化&#xff0c;能够提供及时、准确的天气信息&#xff0c;对我们的生产和生活都有着极大的影响。 一、气象站的工作原理 气象站通过一系列传感器设备&#xff0c;对风速、风向、温度、湿度、气压、雨量等…...

数据结构学习系列之用队列实现栈功能与用栈实现队列功能

队列与栈&#xff1a;队列&#xff08;Queue&#xff09;是一种先进先出&#xff08;FIFO&#xff09;的线性表&#xff1b;栈&#xff08;Stack&#xff09;是一种后进先出&#xff08;LIFO&#xff09;的线性表&#xff1b;实例1&#xff1a;用队列实现栈的功能&#xff1b;算…...

PY32F003F18P单片机概述

PY32F003F18P单片机是普冉的一款ARM微控制器&#xff0c;内核是Cortex-M0。这个单片机的特色&#xff0c;就是价格便宜&#xff0c;FLASH和SRAM远远超过8位单片机&#xff0c;市场竞争力很强大。 一、硬件资源&#xff1a; 1)、FLASH为64K字节&#xff1b; 2)、SRAM为8K字节&…...

查看GPU占用率

如何监控NVIDIA GPU 的运行状态和使用情况_nvidia 85c_LiBiGo的博客-CSDN博客设备跟踪和管理正成为机器学习工程的中心焦点。这个任务的核心是在模型训练过程中跟踪和报告gpu的使用效率。有效的GPU监控可以帮助我们配置一些非常重要的超参数&#xff0c;例如批大小&#xff0c;…...

设计模式-中介者模式

文章目录 一、前言二、中介者模式1、定义2、未使用/使用中介者模式对比2.1、未使用中介者模式&#xff1a;2.2、使用中介者模式&#xff1a; 3、角色分析3.1、中介者&#xff08;Mediator&#xff09;&#xff1a;3.2、同事&#xff08;Colleague&#xff09;&#xff1a;3.3、…...

react 大杂烩

组件 1.是返回标签的js函数&#xff0c;是可重复利用的UI元素 function test(){ return ( test ); } 2.构建组件&#xff1a; &#xff08;1&#xff09;export 导出组件 &#xff08;2&#xff09;定义函数&#xff0c;名称必须以大写字母开头 &#xff08;3&#xff09…...

图解 STP

网络环路 现在我们的生活已经离不开网络&#xff0c;如果我家断网&#xff0c;我会抱怨这什么破网络&#xff0c;影响到我刷抖音、打游戏&#xff1b;如果公司断网&#xff0c;那老板估计会骂娘&#xff0c;因为会影响到公司正常运转&#xff0c;直接造成经济损失。网络通信中&…...

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:访问者模式

一、定义&#xff1a;访问者模式 访问者模式&#xff1a;核心在于同一个事物不同视角下的访问信息不同。 在一个稳定的数据结构下&#xff0c;例如用户信息、雇员信息等&#xff0c;增加易变的业务访问逻辑。为了增强扩展性&#xff0c;将两部分的业务解耦的一种设计模式。 二…...

【juc】读写锁ReentrantReadWriteLock

目录 一、说明二、读读不互斥2.1 代码示例2.2 截图示例 三、读写互斥3.1 代码示例3.2 截图示例 四、写写互斥4.1 代码示例4.2 截图示例 五、注意事项5.2.1 代码示例5.2.2 截图示例 一、说明 1.当读操作远远高于写操作时&#xff0c;使用读写锁让读读可以并发&#xff0c;来提高…...

Linux开机启动Tomcat

需求背景 Linux重启后要手动执行"startup.sh"启动Tomcat&#xff0c;比较麻烦&#xff0c;想要Linux开机启动Tomcat。 开机启动 #---------------------------------------------------------- sudo tee /usr/bin/tomcat.sh <<-EOF #! /bin/bash nohup /opt/to…...

javaweb、spring、springmvc和springboot有什么区别,都是做什么用的?

JavaWeb是一种基于Java技术的Web开发模式&#xff0c;用于构建动态的、可交互的Web应用程序。它是一种使用Java语言开发Web应用的技术堆栈&#xff0c;包括Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;、JavaServer Faces&#xff08;JSF&#xff09;等。JavaWe…...

已解决module ‘pip‘ has no attribute ‘pep425tags‘报错问题(如何正确查看pip版本、支持、32位、64位方法汇总)

本文摘要&#xff1a;本文已解决module ‘pip‘ has no attribute ‘pep425tags‘的相关报错问题&#xff0c;并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。并且最后说明了如何正确查看pip版本、支持、32位、64位方法汇总 &#x1f60e; 作者介绍&…...

Matlab(画图初阶)

目录 1.plot()函数 2. hold(添加新绘图是否保留旧绘图) 3. Plot Style 3.1 线型 3.2 标记 3.3 颜色 ​编辑 4. legend() 5.X 、Y and Title&#xff1f; 6. Text()和annotation() 7.line(创建基本线条) 7.1 基本语法 7.2 指定线条属性 7.3 更改线条属性 8.图像属性 8.1 …...

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…...

忍者像素绘卷参数详解:CFG值对‘火之意志’风格权重响应敏感度测试

忍者像素绘卷参数详解&#xff1a;CFG值对火之意志风格权重响应敏感度测试 1. 引言&#xff1a;像素艺术与AI的完美融合 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工具&#xff0c;它将传统忍者文化与16-Bit复古游戏美学相结合&#xff0c;创造出独特的视觉体验…...

手机号码定位查询工具:3分钟快速部署,轻松查询号码归属地

手机号码定位查询工具&#xff1a;3分钟快速部署&#xff0c;轻松查询号码归属地 【免费下载链接】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多年使世人深信不疑的直线公理将无穷多各异直线误为同一线

黄小宁 “科学”共识&#xff1a;在初等数学领域绝对不可能有颠覆性创新&#xff0c;谁若说“已非常成熟”的初等数学存在重大错误那就说明谁有“自大狂型精神病”。 “实数集”R可几何化为R轴。与x∈R相异&#xff08;等&#xff09;的实数均可表为yxδ&#xff08;增量δ可…...

WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案

WebPlotDigitizer完全指南&#xff1a;从图表图像提取数据的终极解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...

Whistle Mock实战:精准模拟流式JSON接口的响应头与数据体

1. 为什么我们需要精准模拟流式JSON接口 在前后端分离的开发模式下&#xff0c;前端工程师经常需要模拟后端接口进行开发调试。特别是遇到流式JSON数据这种特殊场景时&#xff0c;简单的数据Mock往往无法满足需求。我遇到过不少这样的情况&#xff1a;明明数据内容完全正确&…...

实战指南:基于快马平台与yolov11快速开发货架商品检测系统

今天想和大家分享一个最近用yolov11实现的零售商品检测项目&#xff0c;整个过程在InsCode(快马)平台上完成得特别顺利。这个系统可以自动识别超市货架上的商品&#xff0c;特别适合库存管理或者智能结算场景。 项目背景与需求分析 超市货架商品识别看似简单&#xff0c;实际会…...

千问3.5-2B保姆级教程:从模型原理到业务集成的全栈技术路径

千问3.5-2B保姆级教程&#xff1a;从模型原理到业务集成的全栈技术路径 1. 认识千问3.5-2B视觉语言模型 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;它能够同时理解图片内容和处理自然语言。简单来说&#xff0c;这个模型就像是一个能"看懂"图片并回答问…...

建筑混凝土搅拌机的设计【任务书、带solidworks三维、7张cad图纸、毕业论文、开题报告、答辩稿】

建筑混凝土搅拌机作为现代建筑施工的核心设备&#xff0c;其设计需兼顾效率、可靠性与适应性。任务书明确了设计目标&#xff1a;通过优化搅拌机构、传动系统及整体结构&#xff0c;实现混凝土均匀性提升与能耗降低&#xff0c;同时确保设备在复杂工况下的稳定性。这一目标贯穿…...

[火]图像数据增强 支持目标检测数据集图像增强 标注框信息同步增强 支持以下图像增强方式HSV-Hue 增强HSV-Saturation 增强 HSV-Value 增强图像旋转 (+/

[火]图像数据增强 支持目标检测数据集图像增强 标注框信息同步增强 支持以下图像增强方式 HSV-Hue 增强 HSV-Saturation 增强 HSV-Value 增强 图像旋转 (/- degrees) 图像平移 (/- 分数) 图像缩放 (/- 增益) 图像错切 (/- 分数) 图像透视 (/- 分数), 范围&#xff1a;0-0.00…...

关于统好 AI可持续发展三大趋势

问&#xff1a;如何理解统好 AI 的可持续发展趋势&#xff1f;答&#xff1a;统好 AI 的可持续发展&#xff0c;核心是技术、业务与运营长期适配&#xff0c;不追求短期迭代&#xff0c;而是围绕企业全生命周期需求构建稳定演进路径。绵阳统好软件有限公司以一体化底座为基础&a…...