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

AOP简单使用模版

AOP面向切面编程

切面类的定义之模版

package com.xie.service;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/*** 切面演示 包括切点定义 各通知定义*/
@Aspect
@Component
public class AopService {/*** 定义切点* com.xie.controller.*.*(..) 表示 controller包下 的所有类 的所有方法(*(..))*/@Pointcut("execution(* com.xie.controller.*.*(..))")private void checkMem() {System.out.println("*************** 切点 *****************");}/*** 前置此切点? 切面? 通知 已绑定 切点*/@Before("checkMem()")private void before(JoinPoint joinPoint) {HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();System.out.println("----------------1----------------");System.out.println("前置通知");System.out.println("Url is:" + request.getRequestURL().toString());System.out.println("method is:" + joinPoint.getSignature().getName());System.out.println("----------------1----------------");}/*** 后置此切点? 切面? 通知 已绑定 切点*/@After("checkMem()")private void printMem() {System.out.println("---------------2-----------------");System.out.println("后置通知");System.out.println("After the method, is Mem usage is:" + Runtime.getRuntime().freeMemory() / 1024 / 1024 + "M");System.out.println("----------------2----------------");}/*** 环绕此切点? 切面? 通知 已绑定 切点*/@Around("checkMem()")private Object around(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("---------------3-----------------");System.out.println("环绕通知");System.out.println("Around for AOP");//获取方法参数值数组Object[] args = joinPoint.getArgs();Object ret = joinPoint.proceed(args);System.out.println("proceed args, result is: " + ret);System.out.println("----------------3----------------");//调用方法return ret;}/*** 后置成功通知  切面? 通知 已绑定 切点*/@AfterReturning(pointcut = "checkMem()", returning = "returnObj")private void afterReturning(Object returnObj) {System.out.println("@AfterReturning 4 ========后置返回(成功)通知===========");System.out.println("--------------------------------");System.out.println("return value is:" + returnObj);System.out.println("--------------------------------");}/*** 后置异常通知  切面? 通知 已绑定 切点*/@AfterThrowing(pointcut = "checkMem()", throwing = "e")private void afterThrowing(JoinPoint joinPoint, Exception e) {System.out.println("@AfterThrowing 5 =====后置异常通知==============");System.out.println("--------------------------------");System.out.println("Exception is:" + e.getMessage());System.out.println("--------------------------------");}
}

相关文章:

AOP简单使用模版

AOP面向切面编程 切面类的定义之模版 package com.xie.service;import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.aspectj.lang.ProceedingJoinPoint; import org.springframework.stereotype.Component; import javax.servlet.http.Http…...

手机注册.

<!DOCTYPE html> <html><head><title>注册</title><meta http-equiv"content-type" content"text/html; charsetutf-8"/><meta name"apple-mobile-web-app-capable" content"yes"/><lin…...

PostgreSQL 17新特性之登录事件触发器

PostgreSQL 9.3 就提供了事件触发器功能&#xff0c;可以基于 DDL 语句触发相应的操作。 正在开发中的 PostgreSQL 17 增加了基于登录事件的触发器&#xff0c;可以在用户登录时执行某些检查或者特定操作。登录事件触发器的使用方法和其他触发器一样&#xff1a;创建一个返回 …...

Docker 搭建 LNMP + Wordpress

[TOC](Docker 搭建 LNMP Wordpress 一、项目介绍1.1、项目环境1.2、 服务器环境1.3、 任务需求 二、部署Nginx2.1、建立工作目录2.2、 编写 Dockerfile 脚本2.3、准备 nginx.conf 配置文件2.4、生成镜像2.5、创建自定义网络 三、部署Mysql3.1、建立工作目录3.2、编写 Dockerfi…...

大数据调度最佳实践 | 从Airflow迁移到Apache DolphinScheduler

迁移背景 有部分用户原来是使用 Airflow 作为调度系统的&#xff0c;但是由于 Airflow 只能通过代码来定义工作流&#xff0c;并且没有对资源、项目的粒度划分&#xff0c;导致在部分需要较强权限控制的场景下不能很好的贴合客户需求&#xff0c;所以部分用户需要将调度系统从…...

node实战——搭建带swagger接口文档的后端koa项目(node后端就业储备知识)

文章目录 ⭐前言⭐初始化项目⭐配置router目录自动扫描路由⭐swagger文件配置自动生成json文件⭐封装扫描目录路由加入swagger⭐配置项目入口总文件⭐运行效果⭐总结⭐结束⭐前言 大家好,我是yma16,本文分享关于node实战——搭建带swagger接口文档的后端koa项目(node后端就…...

Qt篇——子控件QLayoutItem与实际控件的强转

方法&#xff1a;使用qobject_cast<QLabel*>() &#xff0c;将通过itemAt(i)获取到的子控件(QLayoutItem)强转为子控件的实际类型(如QLineEdit、QLabel等)。 场景举例&#xff1a; QLabel *label qobject_cast<QLabel*>(ui->horizontalLayout_40->itemAt(0…...

Css3使用

CSS3是CSS&#xff08;层叠样式表&#xff09;的最新版本&#xff0c;它引入了许多新特性&#xff0c;使网页设计更加灵活和富有创意。在本文中&#xff0c;我们将介绍CSS3的一些新特性&#xff0c;包括选择器、布局、动画和变形效果。 一、选择器 CSS3引入了一些新的选择器&…...

【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构

完全解耦的时间片轮询框架构 简介项目代码timeslice.htimeslice.clist.hlist.c 创建工程移植代码实验函数说明timeslice_task_inittimeslice_task_addtimeslice_tak_deltimeslice_get_task_num 结尾 简介 timeslice是一个时间片轮询框架&#xff0c;他是一个完全解耦的时间片轮…...

人工智能期末考试(刷题篇部分题有答案)

参考&#xff1a; 人工智能 经典考试试题及答案 - 百度文库 大学人工智能期末考试题库 - 百度文库 人工智能【期末复习题】 - 百度文库 人工智能期末试题及答案完整版 - 百度文库 一、选择题 AI的缩写是 Artificial Intelligence反演归结&#xff08;消解&#xff09;证明…...

手写Vue渲染器render函数

使用js对象来描述UI更加的灵活。“这种对象”在vue框架中被称为虚拟DOM&#xff0c;渲染函数内部可以创建虚拟DOM&#xff0c;然后vue.js可以将其内容进行渲染。 1.渲染器的介绍 渲染器的作用就是把虚拟DOM渲染为真实DOM 思考下&#xff0c;我们有一个虚拟 DOM&#xff0c;如…...

CGAL+QT

先安装CGAL和QT 安装完QT其中MSVC 这两个没配置 1、x32配置选择的是 x64配置选择的是 2、CGAL 5.4.5 - Manual: Using CGAL on Windows (with Visual C) 参数文章配置一些环境变量 3、 测试 新建build 进行cmake QT、Boost、CGAL都自动匹配上了&#xff08;环境变量已经配…...

GBase8a SSL 配置

GBase8a SSL 配置 GBase8a MPP Cluster 支持 SSL 标准协议&#xff0c; SSL 协议是一种安全性更高的协议标准&#xff0c; 它加入了数字签名和数字证书来实现客户端和服务器的双向身份验证&#xff0c;保证了通信双方更加安全的数据传输。 配置客户端使用 SSL 安全连接的方式连…...

数据结构之队列(源代码➕图解➕习题)

前言 在学过栈之后&#xff0c;会了解到栈的底层是根据顺序表或者链表来构建的&#xff0c;那么我们今天要学习的队列是否也是基于顺序表和链表呢&#xff1f;那我们直接进入正题吧&#xff01; 1. 队列的概念&#xff08;图解&#xff09; 还是跟上节一样&#xff0c;依旧用图…...

社区迭代|ETLCloud社区新增“论坛”啦!

ETLCloud社区是谷云科技RestCloud旗下面向开发工程师、集成研发人员等技术人员提供全方位交流和学习的开放式平台&#xff0c;也是ETLCloud在产品生态赋能上的一大亮点&#xff0c;旨在能够帮助更多的用户更快捷高效的掌握技能&#xff0c;也为企业提供集成人才培养赋能&#x…...

ohos的代码同步以及添加自己的代码

首先我们需要获取到官方的repo工具&#xff0c;命令如下curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ./repo&#xff0c;这里我们就拿到repo工具了&#xff0c;这个repo可以放任意地方&#xff0c;也可以放 /usr/local/bin/repo下&#xff0c;这样可以…...

Python的Pandas库(二)进阶使用

Python开发实用教程 DataFrame的运算 DataFrame重载了运算符&#xff0c;支持许多的运算 算术运算 运算方法运算说明df.add(other)对应元素的加&#xff0c;如果是标量&#xff0c;就每个元素加上标量df.radd(other)等效于otherdfdf.sub(other)对应元素相减&#xff0c;如果…...

如何才能从程序员到架构师?

1 引言 小团队一般 10 人左右&#xff0c;其中常常是技术最牛的人做架构师&#xff08;或TL&#xff09;。所以&#xff0c;架构师在广大码农中的占比大概平均不到 10%。而架构师也可以分为初级、中级、高级三档&#xff0c;江湖上真正高水平的软件架构师就更少了。 所以&…...

dvadmin-打包发布-nginx-静态服务器配置-防火墙设置

文章目录 1.下载nginx2.nginx常用命令3.dvadmin打包发布4.防火墙设置 1.下载nginx 也从作者下载的网址下载&#xff1a;https://download.csdn.net/download/m0_67316550/88470098 2.nginx常用命令 注意&#xff1a;一定要在dos窗口启动&#xff0c;不要直接双击nginx.exe&a…...

Win10中Pro/E鼠标滚轮不能缩放该怎么办?

Pro/E安装好后&#xff0c;鼠标滚轮不能缩放模型&#xff0c;该怎么办&#xff1f;问题多发生在win8/win10上&#xff0c;新装了PROE&#xff0c;发现滑动鼠标中键不能放大缩小。 彩虹图纸管理软件_图纸管理系统_图纸文档管理软件系统_彩虹EDM【官网】彩虹EDM图纸管理软件系统…...

终极TypeScript类型安全指南:LiveTerm接口定义与类型检查最佳实践

终极TypeScript类型安全指南&#xff1a;LiveTerm接口定义与类型检查最佳实践 【免费下载链接】LiveTerm &#x1f4bb; Build terminal styled websites in minutes! 项目地址: https://gitcode.com/gh_mirrors/li/LiveTerm LiveTerm是一个基于Next.js的终端风格网站构…...

如何利用 three.ar.js 快速实现 3D 模型加载与 AR 场景渲染

如何利用 three.ar.js 快速实现 3D 模型加载与 AR 场景渲染 【免费下载链接】three.ar.js A helper three.js library for building AR web experiences that run in WebARonARKit and WebARonARCore 项目地址: https://gitcode.com/gh_mirrors/th/three.ar.js three.ar…...

如何3步轻松备份微博内容:Speechless免费PDF导出完整指南

如何3步轻松备份微博内容&#xff1a;Speechless免费PDF导出完整指南 【免费下载链接】Speechless 把新浪微博的内容&#xff0c;导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在信息快速更迭的数字时代&…...

Unity/Godot开发者看过来:手把手教你将Spine动画导出并集成到游戏引擎里(附常见报错解决)

Unity/Godot开发者实战指南&#xff1a;Spine动画工程化集成全流程解析 当你在Spine中完成了一个令人满意的角色动画后&#xff0c;接下来面临的真正挑战是如何让它活灵活现地跑在游戏引擎里。作为经历过无数次Spine动画集成的老手&#xff0c;我深知这个过程中可能遇到的种种…...

Alexa Plus 拓展食品配送领域,语音订餐体验升级

Alexa Plus 开启食品配送新功能从本周起&#xff0c;Alexa Plus 拓展至食品配送领域&#xff0c;用户可通过它从优步外卖&#xff08;Uber Eats&#xff09;和 Grubhub 订餐。只需将优步或 Grubhub 应用与 Alexa Plus 设备关联&#xff0c;就能询问食品配送情况&#xff0c;并通…...

终极指南:使用SMU Debug Tool释放AMD Ryzen处理器的隐藏性能

终极指南&#xff1a;使用SMU Debug Tool释放AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

Phi-4-mini-reasoning Chainlit插件开发:集成代码执行与结果可视化

Phi-4-mini-reasoning Chainlit插件开发&#xff1a;集成代码执行与结果可视化 1. 项目概述 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员&#xff0c;它特别强化了数学推理能力…...

SMUDebugTool系统调试实战指南:从问题诊断到性能优化的进阶之路

SMUDebugTool系统调试实战指南&#xff1a;从问题诊断到性能优化的进阶之路 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: h…...

构建高效Cursor Pro功能解锁的模块化架构实现指南

构建高效Cursor Pro功能解锁的模块化架构实现指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request limi…...

网站 SEO 软件如何提高网站流量

了解网站 SEO 软件的重要性 在当今互联网时代&#xff0c;网站流量的重要性不言而喻。无论你经营的是一个电子商务网站&#xff0c;博客&#xff0c;还是企业官方网站&#xff0c;高流量意味着更多的曝光和潜在客户。如何有效地提高网站流量呢&#xff1f;这里&#xff0c;我们…...