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

非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.kler.cn/a/229078.html

相关文章:

  • Java基础(一)
  • Digital Document System (DDS)
  • redis 分布式重入锁
  • 若依分页插件失效问题
  • 【EI 会议征稿通知】第七届机器人与智能制造技术国际会议 (ISRIMT 2025)
  • C++ 并发编程之std::find的并发版本
  • HBase相关面试准备问题
  • mysql8通过binlog恢复数据
  • OpenGL 入门(九)—Material(材质)和 光照贴图
  • AS-V1000 视频监控平台产品介绍:客户端功能介绍(二)
  • 算法练习-二叉树的层序遍历(思路+流程图+代码)
  • Docker进阶篇-轻量级可视化工具Portainer
  • 力扣:131. 分割回文串
  • langgraph学习--创建基本的agent执行器
  • 汽车信息安全--SHE中的密钥管理(一)
  • setState的参数
  • 2 月 5 日算法练习- 字符串
  • easyexcel解析跨多行的数据
  • Linux 【docker系列1 - docker 安装与使用】
  • 解决hive表新增的字段查询为空null问题
  • 2.5 作业
  • 从 AGP 4.1.2 升级到 7.5.1——动态添加仓库
  • 【Java】小白友好的MyBatis基础XML开发学习笔记
  • 什么是Java中的弱引用(Weak Reference)和软引用(Soft Reference)?
  • 【漏洞复现】大华智慧园区综合管理平台bitmap接口存在任意文件上传漏洞
  • 某赛通电子文档安全管理系统 UploadFileToCatalog SQL注入漏洞复现