spring中纯注解实现Advice

背景:课本上是注解和Xml文件混用的方式,研究了一下用配置类加注解和测试方法实现各种通知方式的切入。
1.首先dao的接口,增删改查

public interface UserDaoAspect {public void add();public void delete();public void update();public void select();
}

2.dao的实现类

@Repository("UserDaoAspectImpl")
public class UserDaoAspectImpl implements UserDaoAspect{@Overridepublic void add() {System.out.println("添加用户");}@Overridepublic void delete() {System.out.println("删除用户");//int flag = 1/0;}@Overridepublic void update() {System.out.println("更新用户");}@Overridepublic void select() {System.out.println("查询用户");}
}

3.切入面和切入点


@Component
@Aspect
public class AnnotationAdvice {@Pointcut("execution(* com.awei.aop.dao.UserDaoAspectImpl.*(..))")public void pointcut(){}//前置通知@Before("pointcut()")public void before(JoinPoint joinPoint){System.out.println("执行前置通知");System.out.println("目标类:"+joinPoint.getTarget());System.out.println("目标类的调用方法"+joinPoint.getSignature().getName());}//返回通知@AfterReturning("pointcut()")public void afterReturningTest(JoinPoint joinPoint){System.out.println("执行了返回通知,且是无异常时的调用");System.out.println("被织入增强处理的目标方法:"+joinPoint.getSignature().getName());}//环绕通知@Around("pointcut()")public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println("执行了环绕通知前---------------------------------");Object proceed = proceedingJoinPoint.proceed();System.out.println("执行了环绕通知后---------------------------------");return proceed;}//异常通知@AfterThrowing("pointcut()")public void afterException(){System.out.println("执行了异常通知");}//后置通知@After("pointcut()")public void after(){System.out.println("执行了后置通知");}
}

4.配置类

@Configuration
@ComponentScan("com.awei.aop") //包扫描
@EnableAspectJAutoProxy //开启自动代理
public class AnnotationConfig {}

5.测试方法

public class AopAnitationTest {@Testpublic void aopxml(){//基于AnnotationConfigApplicationContext创建ioc容器AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfig.class);UserDaoAspect userDaoAspect = (UserDaoAspect) context.getBean("UserDaoAspectImpl");userDaoAspect.add();}}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库

为什么需要开发自己的 Go 库 在编程语言中,包(Package)和库(Library)是代码组织和复用的重要工具。在 Go 中,包是代码的基本组织单位,每个 Go 程序都由包构成。包的作用是帮助组织代码&#xf…

[java进阶]——方法引用改写Lambda表达式

🌈键盘敲烂,年薪30万🌈 目录 📕概念介绍: ⭐方法引用的前提条件: 1.引用静态方法 2.引用构造方法 ①类的构造: ②数组的构造: 3.引用本类或父类的成员方法 ①本类&#xff1…

思维训练4

题目描述1 Problem - A - Codeforces 题目分析 对于此题我们要求差值种类最大,故我们可以构造出相邻差值分别为1,2,3...由于n规定了最大的范围故我们增到一定的差值之后其差值必定为之前出现过的数字,但由于要保证数组呈递增趋势…

学习LevelDB架构的检索技术

目录 一、LevelDB介绍 二、LevelDB优化检索系统关键点分析 三、读写分离设计和内存数据管理 (一)内存数据管理 跳表代替B树 内存数据分为两块:MemTable(可读可写) Immutable MemTable(只读&#xff0…

Qt Creator插件

这里以Qt Creator 4.15.2版本的源码为示例进行分析 源码结构如下,为了追溯其插件加载过程,从main.cpp入手 Qt Creator的插件目录,生成的插件,好几十个呢 Qt Creator插件的读取 int main(int argc, char **argv)中以下代码创建插…

Vue 3 相对于 Vue2,模板和组件的一些变化

目录 1,模板的变化1,v-modelvue2vue3 2,v-if 和 v-for3,keyv-forv-if 4,Fragment 2,组件的变化1,Teleport2,异步组件 1,模板的变化 1,v-model vue2 对组件…

垃圾回收系统小程序定制开发搭建攻略

在这个数字化快速发展的时代,垃圾回收系统的推广对于环境保护和可持续发展具有重要意义。为了更好地服务于垃圾回收行业,本文将分享如何使用第三方制作平台乔拓云网,定制开发搭建垃圾回收系统小程序。 首先,使用乔拓云网账号登录平…

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图,添加一个静态网格体组件 当事件开始运行后添加一个定时器,委托给一个自定义事件,每2s执行一次,该事件每2s获取一下“DynamicPawn”和acto…

html+css 通过div模拟出一个表格样式,优化多个边框导致的宽度计算问题

htmlcss 通过div模拟出一个表格样式&#xff0c;优化多个边框导致的宽度计算问题 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

VB.NET—DataGridView控件教程详解

目录 前言: 过程: 第一步: 第二步: 第三步: 第四步: 第五步&#xff1a; 番外篇: 总结: 前言: DataGridView是.NET FormK中的一个Windows窗体控件&#xff0c;它提供了一个可视化的表格控件&#xff0c;允许用户以表格形式显示和编辑数据。它通常用于显示和编辑数据库…

JavaEE-博客系统2(功能设计)

本部分内容&#xff1a;实现博客列表页&#xff1b;web程序问题的分析方法&#xff1b;实现博客详情页&#xff1b; 该部分的代码如下&#xff1a; WebServlet("/blog") public class BlogServlet extends HttpServlet {//Jackson ObjectMapper类(com.fasterxml.jac…

Pyhotn: Mac安装selenium没有chromedriver-114以上及chromedriver无法挪到/usr/bin目录下的问题

1.0 安装selenium 终端输入&#xff1a; pip install selenium 查看版本&#xff1a; pip show selenium2.0 安装chromedriver 查看chrome版本 网上大多数是&#xff0c;基本到114就停了。 https://registry.npmmirror.com/binary.html?pathchromedriver/ 各种搜索&#…

ros1 自定义订阅者Subscriber的编程实现

话题模型 图中&#xff0c;我们使用ROS Master管理节点。 有两个主要节点&#xff1a; Publisher&#xff0c;名为Turtle Velocity&#xff08;即海龟的速度&#xff09;Subscriber&#xff0c;即海龟仿真器节点 /turtlesim Publisher(Turtle Velocity)&#xff0c;发布Messa…

Appium 移动端自动化测试,触摸(TouchAction) 与多点触控(MultiAction)

一、触摸 TouchAction 在所有的 Appium 客户端库里&#xff0c;TouchAction 触摸对象被创建并被赋予一连串的事件。 规范里可用的事件有&#xff1a; * 短按(press) * 释放(release) * 移动到(moveTo) * 点击(tap) * 等待(wait) * 长按(longPress) * 取消(cancel) * 执行(per…

【教程】多进程下载百度旋转验证码图片-制作数据集

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 效果展示&#xff1a; 直接上代码&#xff0c;开箱即用&#xff08;当然selenium库自己装一下&#xff09;&#xff1a; import os import time import requests from selenium import webdriver from selenium.…

【Linux】服务器与磁盘补充知识,硬raid操作指南

服务器硬件 cpu 主板 内存 硬盘 网卡 电源 raid卡 风扇 远程管理卡 1.硬盘尺寸: 目前生产环境中主流的两种类型硬盘 3.5寸 和2.5寸硬盘 2.5寸硬盘可以通过使用硬盘托架后适用于3.5寸硬盘的服务器 但是3.5寸没法转换成2.5寸 2.如何在服务器上制作raid 华为服务器为例子做…

如何找出最优的【SVC】核函数和参数值—以乳腺癌数据集为例

在实际的工作中&#xff0c;有的时候我们不知道数据特征&#xff0c;也不知道我们的数据是线性还是非线性。因此我们需要对数据一步步进行摸索&#xff0c;来找到最优的核函数和参数值。接下来我们以sklearn乳腺癌数据集为例。 先来导入相应的模块&#xff1a; from sklearn.d…

【I/O流之旅】File类-零基础入门指南

&#x1f38a;专栏【Java】 &#x1f33a;每日一句:看不清楚未来时,就比别人坚持久一点 ⭐欢迎并且感谢大家指出我的问题 目录 1.File概述 2.File构造方法 (1).根据文件路径创建文件对象 (2).根据父路径名字符串和子路径名字符串创建对象 (3).根据父路径对应文件对象和子路…

第20章_Myisam与InnoDB

文章目录 区别如何选择innodb额外补充知识innodb为什么推荐使用自增ID作为主键innodb引擎4大特性 区别 InnoDB支持事务&#xff0c;MyISAM不支持&#xff0c;对于InnoDB每一条SQL语言都默认封装成事务&#xff0c;自动提交&#xff0c;这样会影响速度&#xff0c;所以最好把多条…

顶板事故防治vr实景交互体验提高操作人员安全防护技能水平

建筑业在我国各行业中属危险性较大且事故多发的行业&#xff0c;在建筑业“八大伤害”(高处坠落、坍塌、物体打击、触电、起重伤害、机械伤害、火灾爆炸及其他伤害)事故中&#xff0c;高处坠落事故的发生率最高、危险性极大。工地现场培训vr坠落体验利用虚拟现实技术还原各种情…