(注解配置AOP)学习Spring的第十七天

news/2024/2/27 12:40:42

 基于注解配置的AOP

来看注解式开发 : 

先把目标与通知放到Spring里管理  :


@Service("userService")
public class UserServiceImpl implements UserService {@Overridepublic void show1() {System.out.println("show1......");}@Overridepublic void show2() {System.out.println("show2......");}
}

 看这个通知 ,加@Aspect开始编辑织入 , @Before()里放的是切入点配置:

@Component
@Aspect
public class MyAdvice {//  <aop:before method="beforeAdvice" pointcut-ref="execution(* com.itheima.service.impl.*.*(..))"/>@Before("execution(* com.itheima.service.impl.*.*(..))")public void beforeAdvice() {System.out.println("前置的增强....");}}

还需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:context="http://www.springframework.org/schema/context"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/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!--组件扫描--><context:component-scan base-package="com.itheima"/><!--使用注解配置AOP,需要开启AOP自动代理--><aop:aspectj-autoproxy/></beans>

 如此 , 注解配置就完成了

下图是整体配置信息对比

二 . 切点表达式的抽取

用@Poincut代替了

execution(* com.itheima.service.impl.*.*(..)) , 是操作更加方便

代码如下 :

 @Pointcut("execution(* com.itheima.service.impl.*.*(..))")public void myPoincut(){}//  <aop:before method="beforeAdvice" pointcut-ref="execution(* com.itheima.service.impl.*.*(..))"/>@Before("MyAdvice.myPoincut()")public void beforeAdvice() {System.out.println("前置的增强....");}

三 .代替xml配置方式

新建一个SpringConfig配置类来管理扫描注解

代码如下

@Configuration
@ComponentScan("com.itheima")    // <context:component-scan base-package="com.itheima"/>
@EnableAspectJAutoProxy   //<aop:aspectj-autoproxy/>
public class SpringConfig {}


http://www.ppmy.cn/news/1346260.html

相关文章

用的到的linux-查找find-Day4

前言&#xff1a; 在上一节&#xff0c;我们了解到rm删除命令&#xff0c;一共拥有三种模式&#xff0c;即-i默认只能删除文件且会提示确认&#xff0c;其次是-r 遍历删除&#xff0c;用于删除目录及目录下的文件&#xff0c;同样需确认后才会删除&#xff0c;最后为-f为强制删…

数据结构红黑树

红黑树是一种自平衡的二叉搜索树&#xff0c;它通过确保任何从根到叶子的路径上不会有两个连续的红节点并且从根到叶子的所有路径上有相同数量的黑节点&#xff0c;从而近似平衡。这种平衡保证了在最坏情况下插入、删除、查找操作都能在O(log n)时间复杂度内完成。 下面&#…

Windows SDK(四)鼠标和键盘消息处理

鼠标基础知识 鼠标一般分为三种状态&#xff0c;三个按钮 三种状态&#xff1a;单击&#xff0c;双击&#xff0c;拖动 三个按钮&#xff1a;左键&#xff08;LBUTTON&#xff09;&#xff0c;右键&#xff08;RBUTTON&#xff09;&#xff0c;中键&#xff08;MBUTTON&…

flutter开发实战-ijkplayer视频播放器功能

flutter开发实战-ijkplayer视频播放器功能 使用better_player播放器进行播放视频时候&#xff0c;在Android上会出现解码失败的问题&#xff0c;better_player使用的是video_player&#xff0c;video_player很多视频无法解码。最终采用ijkplayer播放器插件&#xff0c;在flutt…

代码随想录算法训练营29期|day43 任务以及具体任务

第九章 动态规划 part05 1049. 最后一块石头的重量 II class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int i : stones) {sum i;}int target sum >> 1;//初始化dp数组int[] dp new int[target 1];for (int i 0; i < stones.lengt…

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有…

C++设计模式-单一职责原则

单一职责原则定义了类的封装规范。&#xff08;封装、继承、多态&#xff09; 定义&#xff1a;有且仅有一个引起类变化的原因。 e.g.1.一个需要重新封装的类 class A { public:void funName() {}void funSex() {}void funAge() {}void funCourse() {}//要重新封装到其他类v…

python flask 魔术方法

魔术方法作用_init_对象的初始化方法_class_返回对象所属的类_module_返回类所在的模块_mro_返回类的调用顺序&#xff0c;可以找到其父类&#xff08;用于找父类&#xff09;_base_获取类的直接父类&#xff08;用于找父类&#xff09;_bases_获取父类的元组&#xff0c;按它们…

2024.2.6

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&g…

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 &#xff08;了解&#xff09;5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

【WebSocket】微信小程序原生组件使用SocketTask 调用星火认知大模型

直接上代码 微信开发者工具-调试器-终端-新建终端 进行依赖安装 npm install base-64 npm install crypto-js 然后顶部工具栏依次点击 工具-构建npm // index.js const defaultAvatarUrl https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQ…

如果通过浏览器调试?

背景&#xff1a;博主是一个有丰富经验的后端开发人员&#xff0c;在前端开发中感觉总是有种力不从心的感觉&#xff0c;因为没有后端debug调试的清晰感。 解决办法&#xff1a;掌握chorm浏览器调试技巧。 F12&#xff0c; F5 打上断点之后&#xff0c;这不就是梦寐之中的调试…

普渡机器人CEO预测2024年服务机器人市场将扩大

原创 | 文 BFT机器人 根据普渡科技有限公司的报告&#xff0c;商用服务机器人在东亚地区的应用比其他地方更为广泛。然而&#xff0c;预计到2024年&#xff0c;全球其他地区也将迎头赶上。这家总部位于中国深圳的公司自豪地宣称&#xff0c;它已经成为中国最大的此类机器人出口…

Rust语言入门小结(第2篇)

主要是Rust语言圣经学习的小结&#xff0c;供参考 基本概念 // Rust 程序入口函数&#xff0c;跟其它语言一样&#xff0c;都是 main&#xff0c;该函数目前无返回值 fn main() {// 使用let来声明变量&#xff0c;进行绑定&#xff0c;a是不可变的// 此处没有指定a的类型&…

【AG32VF407】国产MCU+FPGA,更新官方固件解决8Mhz内部晶振不准,Verilog实测7.9Mhz!

视频讲解 [AG32VF407]国产MCUFPGA&#xff0c;更新官方固件解决8Mhz内部晶振不准&#xff0c;Verilog实测7.9Mhz&#xff01; 实验过程 之前出现的双路pll不同频率的测试中&#xff0c;提出了内部晶振输出不准的问题&#xff0c;和官方沟通后得到极大改善&#xff0c;方法如下…

爬虫为什么要使用代理?

爬虫使用的代理IP的原因是什么&#xff1a; 速度 选择速度较快的代理IP&#xff0c;能提高 爬虫 程序的效率和稳定性。 速度越快&#xff0c;建立连接和传输数据的时间越短&#xff0c;也就越不容易出现连接超时、连接中断等问题。 稳定性 选择稳定性好的代理IP&#xff0c;能够…

力扣53. 最大子数组和(滑动窗口,动态规划)

Problem: 53. 最大子数组和 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 思路1:滑动窗口 1.为求出最大连续的子数组和,我们逻辑上假设有一个窗口在原数组上滑动, 欲求出最大连续,则需要保证窗口中的所有元素和最起码大于0; 2.即当当前窗口中的元素值的和小于0…

问题 | 开源软件的影响力

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 开源软件的影响力 降低成本和提高效率&#xff1a;开源软件一般是免费提供的&#xff0c;企业和个人无需支付许可费用&#xff0c;从而降低了软件开发和使用的成本。此…

oracle 启动命令以及ORA-01033问题处理、删除归档日志

1 启动数据库:startup 2 关闭数据库&#xff1a;Shutdown immediate 3 查看监听状态&#xff1a;lsnrctl status 4 启动监听&#xff1a;lsnrctl start 5 停止监听&#xff1a;lsnrctl stop 常见问题 1、在服务器重启后会出现&#xff0c;Oracle ORA-01033: ORAC…

3.1-媒资管理之需求分析+搭建Nacos

文章目录 媒资管理模块1 模块需求分析1.1 模块介绍1.2 业务流程1.2.1 上传图片1.2.2 上传视频1.2.3 处理视频1.2.4 审核媒资 2.2 搭建Nacos2.2.1 服务发现中心2.2.2 配置中心2.2.2.1 配置三要素2.2.2.3配置content-api 2.2.3 公用配置2.2.4 配置优先级2.2.5 导入配置文件2.2.6 …
最新文章