非springboot 使用aop 切面

在非Spring Boot应用中使用AOP(Aspect Oriented Programming,面向切面编程)的代码实现需要依赖Spring AOP库。由于Spring AOP库并不直接支持非Spring应用,你需要将Spring AOP库作为依赖项添加到项目中,并使用Spring AOP的基本概念手动实现AOP。

以下是一个基本的AOP示例,演示了如何在非Spring Boot应用中使用AOP:

  1. 首先,添加Spring AOP库的依赖项到你的项目中。如果你使用Maven,可以在pom.xml文件中添加以下依赖项:

 

xml复制代码

<dependency> 
<groupId>org.aspectj</groupId> 
<artifactId>aspectjweaver</artifactId> 
<version>1.9.7</version> 
</dependency>
  1. 创建一个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逻辑。

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

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

相关文章

Web课程学习笔记--CSS盒模型

CSS 盒模型 盒模型 网页设计中常听的属性名&#xff1a;内容(content)、填充(padding)、边框(border)、边界(margin)&#xff0c; CSS盒子模式都具备这些属性。 这些属性我们可以把它转移到我们日常生活中的盒子&#xff08;箱子&#xff09;上来理解&#xff0c;日常生活中所…

目标检测:3采用YOLOv8 API训练自己的模型

​ 目录 ​1.YOLOv8 的新特性 2.如何使用 YOLOv8? 3使用YOLOv8训练模型 4.验证训练集 5.测试训练集 6.测验其他图片 7 其他问题 参考: 1.YOLOv8 的新特性 Ultralytics 为 YOLO 模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统…

【JS逆向学习】今日头条

逆向目标 目标网页&#xff1a;https://www.toutiao.com/?wid1707099375036目标接口&#xff1a;https://www.toutiao.com/api/pc/list/feed目标参数&#xff1a;_signature 逆向过程 老规矩先观察网络请求&#xff0c;过滤XHR请求观察加密参数&#xff0c;发现Payload的_s…

arm 汇编积累

C语言函数与汇编对应关系 一、MOV 系列指令 1、指令格式 MOV{条件}{S} 目的寄存器&#xff0c;源操作数 2、含义解析&#xff1a; &#xff08;1&#xff09;&#xff1a;mov 指令传送数据 案例&#xff1a; MOV R0,R1 ; R0 R1; MOV PC,R14 ;PC R14; MOV R0,R…

Kafka SASL_SSL双重认证

文章目录 1. 背景2. 环境3. 操作步骤3.1 生成SSL证书3.2 配置zookeeper认证3.3 配置kafka安全认证3.4 使用kafka客户端进行验证3.5 使用Java端代码进行认证 1. 背景 kafka提供了多种安全认证机制&#xff0c;主要分为SASL和SSL两大类。 SASL&#xff1a; 是一种身份验证机制&…

【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总

【NLP概念合集&#xff1a;一】预训练 Pre-Training&#xff0c;微调 Fine-Tuning 及其方法的概念区别 前言请看此正文预训练 Pre-Training无监督学习 unsupervised learning概念&#xff1a;标签PCA 主成分分析&#xff08;Principal Component Analysis&#xff09;降维算法L…

洛谷 P1408 采药(背包问题应用)

[NOIP2005 普及组] 采药 题目描述 辰辰是个天资聪颖的孩子&#xff0c;他的梦想是成为世界上最伟大的医师。为此&#xff0c;他想拜附近最有威望的医师为师。医师为了判断他的资质&#xff0c;给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说&#xff1a;“孩…

本地部署TeamCity打包发布GitLab管理的.NET Framework 4.5.2的web项目

本地部署TeamCity 本地部署TeamCity打包发布GitLab管理的.NET Framework 4.5.2的web项目部署环境配置 TeamCity 服务器 URLTeamCity 上 GitLab 的相关配置GitLab 链接配置SSH 配置项目构建配置创建项目配置构建步骤构建触发器结语本地部署TeamCity打包发布GitLab管理的.NET Fra…

市场复盘总结 20240205

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率低 50% 最常用…

Leetcode刷题笔记题解(C++):257. 二叉树的所有路径

思路&#xff1a;深度优先搜索 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right…

[软件工具]文档页数统计工具软件pdf统计页数word统计页数ppt统计页数图文打印店快速报价工具

文档页数统计工具软件——打印方面好帮手 在信息化时代&#xff0c;文档已成为我们工作、学习、生活中不可或缺的一部分。无论是学术论文、商业报告&#xff0c;还是个人日记&#xff0c;都需要我们对其进行有效的管理。而在这个过程中&#xff0c;文档页数统计工具软件就显得…

掌握CSS网格函数fit-content()的妙用

CSS网格布局是一种强大的布局系统&#xff0c;它提供了灵活的网格化设计能力。其中&#xff0c;fit-content()函数是一项重要的功能&#xff0c;它可以帮助我们在网格容器中自动调整网格项的尺寸。本文将详细讲解fit-content()函数的使用方法及其常见应用场景&#xff0c;助你掌…

Rust消费kafka

use futures::stream::StreamExt; // 引入 StreamExt 以使用 next() 方法 use rdkafka::config::ClientConfig; use rdkafka::consumer::{CommitMode, Consumer, StreamConsumer}; use rdkafka::error::KafkaResult; use rdkafka::message::{Message};async fn run_consumer() …

前端学习01

1.浏览器能识别的标签 1.1 编码&#xff08;head&#xff09; <meta charset"UTF-8">1.2 title&#xff08;head&#xff09; <head><meta charset"UTF-8"><title>我的联通</title> </head>1.3 标题 <!DOCTYPE…

ETL是什么,有哪些ETL工具?就业前景如何?

ETL是什么 ETL&#xff08;Extract-Transform-Load&#xff09;&#xff0c;用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目标端的过程。ETL一词较常用在数据仓库&#xff0c;但其对象并不限于数据仓库。它可以自动化数据处理过程&#xff0c;减少…

Python学习之路-Tornado基础:数据库

Python学习之路-Tornado基础:数据库 简介 与Django框架相比&#xff0c;Tornado没有自带ORM&#xff0c;对于数据库需要自己去适配。我们使用MySQL数据库。 在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库&#xff0c;而从3.0版本开始&#xff0c;此模块…

2023_中国零售业人工智能行业应用 发展图谱

01 零售人工智能行业应用发展背景 02 零售人工智能行业应用发展图谱及行业应用案例 案例&#xff1a;京东云、蓝色光标、京东言犀智能服务、腾讯企点、 案例&#xff1a;淘天集团、极睿科技、百度电商数字人直播 案例&#xff1a;中国联通、云拿科技AI智能商店&#xff1b; 0…

【flutter】报错 cmdline-tools component is missing

在flutterSDK目录下&#xff0c;双击flutter_console.bat&#xff0c;调出命令行。 输入flutter doctor&#xff0c;如果第三个诊断为[x]&#xff0c;报cmdline-tools component is missing错&#xff08;我这已经修改好了&#xff0c;所以是勾了&#xff09;&#xff0c;那就可…

EasyExcel的导入导出使用

EasyExcel的导入导出使用 /*** ClassName: CellWidthStyleHandler* Description: 设置表头的调整宽策略* Author: * Date: */ public class CellWidthStyleHandler extends AbstractColumnWidthStyleStrategy {// 可以根据这里的最大宽度&#xff0c;按自己需要进行调整,搭配单…

HTTP和HTTPS区别!

http 是我们几乎天天都要打交道的东西&#xff0c;相关知识点有点多&#xff0c;所以也有不少面试必问的点&#xff0c;这里做了一些整理&#xff0c;帮且大家树立完整的 http 知识体系&#xff0c;对面试官说 so easy HTTP 的特点和缺点 特点&#xff1a;无连接、无状态、灵…