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

非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.lryc.cn/news/294854.html

相关文章:

  • MongoDB 字段中数据类型不一致序列化异常排查与处理
  • 网络安全简介
  • 【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法
  • 【Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 )
  • 浅析现代计算机启动流程
  • 七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势
  • Android Studio导入项目 下载gradle很慢或连接超时
  • 如何使用VSCode上运行Jupyter,详细案例过程出可视化图
  • Linux中有名管道和无名管道
  • [SWPUCTF 2021 新生赛]easyupload1.0
  • 【Linux网络编程三】Udp套接字编程(简易版服务器)
  • 【Rust】字符串,看这篇就够了
  • 单片机和 ARM 的区别
  • JavaScript从入门到精通系列第三十一篇:详解JavaScript中的字符串和正则表达式相关的方法
  • 23、数据结构/查找相关练习20240205
  • 【VSTO开发-WPS】下调试
  • git 的基本概念
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型
  • Go 中如何检查文件是否存在?可能产生竞态条件?
  • 红日靶场1搭建渗透
  • ChatGPT之搭建API代理服务
  • Kotlin手记(一):基础大杂烩
  • redis源码之:集群创建与节点通信(2)
  • 2024.2.5 寒假训练记录(19)
  • 游戏服务器租赁多少钱一台?26元,服不服?
  • wpf 引入本项目的图片以及引入其他项目的图像资源区别及使用方法
  • jsp页面,让alert弹出信息换行显示
  • 【IC设计】Windows下基于IDEA的Chisel环境安装教程(图文并茂)
  • IF=82.9!高分文献解读|吉西他滨联合顺铂化疗激活肿瘤免疫新机制
  • 【QT+QGIS跨平台编译】之二十八:【Protobuf+Qt跨平台编译】(一套代码、一套框架,跨平台编译)