非springboot 使用aop 切面
在非Spring Boot应用中使用AOP(Aspect Oriented Programming,面向切面编程)的代码实现需要依赖Spring AOP库。由于Spring AOP库并不直接支持非Spring应用,你需要将Spring AOP库作为依赖项添加到项目中,并使用Spring AOP的基本概念手动实现AOP。
以下是一个基本的AOP示例,演示了如何在非Spring Boot应用中使用AOP:
-
首先,添加Spring AOP库的依赖项到你的项目中。如果你使用Maven,可以在pom.xml文件中添加以下依赖项:
xml复制代码
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
-
创建一个Aspect类,用于定义切面。在这个类中,你可以定义切入点、前置通知、后置通知等。以下是一个简单的Aspect类示例:
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut; @Aspect
public class MyAspect { @Pointcut("execution(* com.example.myapp.service.*.*(..))") public void serviceMethods() {} @Before("serviceMethods()") public void beforeServiceMethod() { System.out.println("Before service method execution."); }
}
这个Aspect类定义了一个切入点(serviceMethods),该切入点匹配com.example.myapp包下service包中所有方法的执行。然后,它定义了一个前置通知(beforeServiceMethod),在匹配的方法执行之前输出一条消息。
3. 在你的应用中,你需要手动启动AOP代理。这可以通过创建一个代理对象来实现,该对象实现了目标对象的接口,并在调用方法时执行AOP逻辑。以下是一个示例:
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.interceptor.SimpleTraceInterceptor;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.StaticMethodMatcherPointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.myapp.MyService;
import com.example.myapp.MyAspect; @Component
public class MyApp { @Autowired private MyService myService; @Autowired private MyAspect myAspect; @Autowired private ApplicationContext applicationContext; public void run() { ProxyFactory factory = new ProxyFactory(new MyServiceImpl()); // 创建目标对象的代理工厂 factory.addInterceptor(new SimpleTraceInterceptor()); // 添加一个简单的跟踪拦截器来输出方法调用的信息 factory.addAdvisor(new DefaultPointcutAdvisor(new MyAspect(), new StaticMethodMatcherPointcut() { // 添加自定义的切面和切入点匹配器 @Override public boolean matches(Method method, Class<?> targetClass) { return true; // 匹配所有方法,这里只是一个示例,需要根据实际需求进行修改。 } })); MyService proxy = (MyService) factory.getProxy(); // 创建代理对象并注入目标对象的方法调用逻辑和AOP逻辑。 proxy.doSomething(); // 调用代理对象的方法,将触发AOP逻辑的执行。 }
}
创建了一个代理工厂(ProxyFactory),并将拦截器和切面添加到工厂中。然后,我们使用工厂创建一个代理对象(MyServiceImpl),并将其注入到MyApp类的实例中。最后,我们调用代理对象的方法(doSomething),将触发AOP逻辑的执行。在这个示例中,我们使用了一个简单的跟踪拦截器来输出方法调用的信息,并在实际开发中可以根据需要使用其他拦截器和通知类型来实现更复杂的AOP逻辑。
相关文章:
非springboot 使用aop 切面
在非Spring Boot应用中使用AOP(Aspect Oriented Programming,面向切面编程)的代码实现需要依赖Spring AOP库。由于Spring AOP库并不直接支持非Spring应用,你需要将Spring AOP库作为依赖项添加到项目中,并使用Spring AO…...
MongoDB 字段中数据类型不一致序列化异常排查与处理
MongoDB 字段中数据类型不一致序列化异常排查与处理 背景如下,因为项目迁移愿意,一个使用Mongodb的业务拥有C#和Java两组Api。Java Api开发和测试都很顺利。上线一段时间后,客服反馈记录都不见了。查看数据库发现,时间字段拥有两…...
网络安全简介
网络安全: 网络安全攻击分为被动攻击和主动攻击。 1. 被动攻击:是指攻击者从网络上窃取了他人的通信内容,通常把这类的攻击称为截获,被动攻击只要有2种形式:消息内容泄漏攻击和流量分析攻击。由于攻击者没…...
【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…...
【Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 )
一、创建自定义插件类型模块 ( Java or Kotlin Library ) 选择 " 菜单栏 / New / New Module… " 选项 , 在 " Create New Module " 对话框中 , 选择 创建 " Java or Kotlin Library " 类型的依赖库 ; 二、手动导入相关依赖 ( Java | Groovy | …...
浅析现代计算机启动流程
文章目录 前言启动流程概述磁盘分区格式MBR磁盘GPT磁盘隐藏分区 传统BIOS引导传统BIOS启动流程 UEFI引导UEFI引导程序UEFI启动流程 引导加载程序启动操作系统相关参考 前言 现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包…...
七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势
前言 自去年7月份我带队成立大模型项目团队以来,我司至今已有5个项目组,其中 第一个项目组的AIGC模特生成系统已经上线在七月官网第二项目组的论文审稿GPT则将在今年3 4月份对外上线发布第三项目组的RAG知识库问答第1版则在春节之前已就绪至于第四、第…...
Android Studio导入项目 下载gradle很慢或连接超时
AS最常见的问题之一就是下载gradle非常慢,还经常出现下载失败的情况,没有gradle就无法build项目,所以一定要先解决gradle的下载问题,下面教大家两种常用方法 手动下载压缩包并替换 1、关闭Android Studio,复制下面的网…...
如何使用VSCode上运行Jupyter,详细案例过程出可视化图
Python作为最受AI喜欢的语言之一,我们与大家共同学习下如何在VS Code上运行Jupyter,并且用简单案例实现出图。 环境 VS Code version: 1.80.1 Python: 3.12.0 小白安装过程: 在准备好基础环境,小白心想,AI可是霸占科…...
Linux中有名管道和无名管道
无名管道基础 进程间通信介绍 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共享内存(mmap) 套接字(socket)过时的IPC通信方式 System V IPC 共享内存(sh…...
[SWPUCTF 2021 新生赛]easyupload1.0
发现是上传文件第一想到是文件木马 <?php eval ($_POST[123]);?>木马上传burp修改后缀发现flag里面这个是假的 我们猜想是在phpinfo我们上传<?php eval(phpinfo(););?>木马上传burp修改后缀里面 CtrlF 发现flag...
【Linux网络编程三】Udp套接字编程(简易版服务器)
【Linux网络编程三】Udp套接字编程(简易版服务器) 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…...
【Rust】字符串,看这篇就够了
这节课我们把字符串单独拿出来讲,是因为字符串太常见了,甚至有些应用的主要工作就是处理字符串。比如 Web 开发、解析器等。而 Rust 里的字符串内容相比于其他语言来说还要多一些。是否熟练掌握 Rust 的字符串的使用,对 Rust 代码开发效率有很…...
单片机和 ARM 的区别
单片机和 ARM 在功能和使用上有一些区别,因此哪个更好用取决于具体的需求和场景。 单片机是一种集成了微处理器、存储器和外设接口的集成电路芯片,通常具有体积小、功耗低、可靠性高、成本低等特点。单片机广 泛应用于各种领域,如智能仪表、工…...
JavaScript从入门到精通系列第三十一篇:详解JavaScript中的字符串和正则表达式相关的方法
文章目录 知识回顾 1:概念回顾 2:正则表达式字面量 一:字符串中正则表达式方法 1:split 2:search 3:match 4:replace 知识回顾 1:概念回顾 正则表达式用于定义一些字符串的…...
23、数据结构/查找相关练习20240205
一、请编程实现哈希表的创建存储数组{12,24,234,234,23,234,23},输入key查找的值,实现查找功能。 代码: #include<stdlib.h> #include<string.h> #include<stdio.h> #include<math.h> typedef struct Node {int data;struct n…...
【VSTO开发-WPS】下调试
重点2步: 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后,要选中附加到调试,并指定启动项目。 如PPT输入WPP搜…...
git 的基本概念
当使用Git时,一些基本概念包括: 1. **仓库(Repository):** 存储项目文件和版本历史的地方。可以是本地仓库(在你的计算机上)或远程仓库(在服务器上)。 2. **提交&#…...
《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型
文章目录 第6章 逻辑斯谛回归与最大熵模型6.1 逻辑斯谛回归模型6.1.1 逻辑斯谛分布6.1.2 二项逻辑斯谛回归模型6.1.3 模型参数估计6.1.4 多项逻辑斯谛回归 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第3章 k邻近邻法 《统计学习…...
Go 中如何检查文件是否存在?可能产生竞态条件?
嗨,大家好!本文是系列文章 Go 技巧第十三篇,系列文章查看:Go 语言技巧。 Go 中如何检查文件是否存在呢? 如果你用的是 Python,可通过标准库中 os.path.exists 函数实现。遗憾的是,Go 标准库没有…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
Yolo11改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用
1 论文信息 FBRT-YOLO(Faster and Better for Real-Time Aerial Image Detection)是由北京理工大学团队提出的专用于航拍图像实时目标检测的创新框架,发表于AAAI 2025。论文针对航拍场景中小目标检测的核心难题展开研究,重点解决…...
