首页 > 编程语言 >Springboot 实现Aop切面编程

Springboot 实现Aop切面编程

时间:2024-03-31 18:57:00浏览次数:17  
标签:users List 切面 Aop 注解 方法 public Springboot

1. 引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

 

2.写切面方法

现在有个方法,

public List<User> getList() {
    List<User> users = userMapper.selectList(null);
    return users;
}

获取用户返回列表,返回有2条数据,现在要实现把这个数据进行改变

 

可以先写个自定义注解,加在上面这个方法上,然后切面的时候指定有这个注解的就切入

自定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAnnotation {
}

 

刚刚的方法上套上去注解

@UserAnnotation
public List<User> getList() {
    List<User> users = userMapper.selectList(null);
    return users;
}

 

开始写切面

@Pointcut里面写上"@annotation(com.example.printdemo.annotation.UserAnnotation)"

就是注解UserAnnotation的位置,相当于监控着这个注解,方法上有使用到这个注解的都会进入这个切面方法,也可以指定类方法的方式切入,我喜欢用注解的方法所以用这个

切入点表达式用于匹配特定的方法或者类,从而确定切面应该在何处应用。除了使用@annotation来匹配注解的方法,还可以使用其他类型的切入点表达式,例如:

  • execution:匹配方法的执行。
  • within:匹配在特定类或包中的所有方法。
  • args:匹配具有特定参数类型的方法。
  • target:匹配特定目标对象的方法。
  • thisbean:匹配当前代理对象或特定Spring bean的方法。

 

@Around("userListAspect()") 这里用环绕方法,括号里面就是把@Pointcut的方法写上就行

@Aspect
@Component
public class UserListAspect {
    
    @Pointcut("@annotation(com.example.printdemo.annotation.UserAnnotation)")
    public void userListAspect() {}

    @Around("userListAspect()")
    public Object before(ProceedingJoinPoint pjp) throws Throwable {
        // 执行原方法
        Object result = pjp.proceed();
        // 检查返回值是否为List类型
        if (result instanceof List) {
            List<User> users = (List<User>) result;
            for (User user : users) {
                System.out.println(user);
            }
//           去掉第二个元素
            users.remove(1);
            return users;
        }
        return null;
    }

    @After("userListAspect()")
    public void afterList() {
        System.out.println("后置 执行");
    }

}

 

 这里我把返回值去掉了第二个元素,然后return出去,进行修改数据

这里可以做其它的,例如进入方法前的权限检查,方法执行时间,输出日志之类

 

现在用的是环绕切面

还有其他的:AOP提供了多种类型的通知,每种通知都有其特定的执行时机:

  • @Before:在方法执行之前执行。
  • @After:在方法执行之后执行,无论方法是否成功。
  • @AfterReturning:在方法成功返回之后执行。
  • @AfterThrowing:在方法抛出异常之后执行。
  • @Around:在方法执行前后都执行,可以完全控制方法的执行过程。

 

标签:users,List,切面,Aop,注解,方法,public,Springboot
From: https://www.cnblogs.com/Hello233/p/18107072

相关文章

  • SpringBoot集成Junit单元测试找不到bean报错:expected at least 1 bean which qualifie
    发生缘由调用封装的MinIOstarter运行环境电脑系统版本:Windows1064bitIdea:2023.2(UltimateEdition)Maven:apache-maven-3.6.0Docker:Dockerversion26.0.0,build2ae903eMinIO:加载本地镜像,不清楚版本号jdk版本:jdk-8spring.boot.version:2.3.9.RELEASEminio依赖:7.1.......
  • 数据下钻--vue+springboot+echarts
    今天下午整了下数据下钻直接上成果: 然后左边可以选范围:左边调范围,然后对应的会显示那些省份满足条件。 然后就是鼠标悬停在某个省份,就显示相应数量: 然后可以点击对应省份进行下钻到市然后可以继续下钻到县:  同样的呢,市和县都可以向省一样那样显示范围和调试: ......
  • springboot 监听请求
    加个这个类就可以了importorg.springframework.stereotype.Component;importjavax.servlet.*;importjavax.servlet.http.HttpServletRequest;importjava.io.BufferedReader;importjava.io.IOException;@ComponentpublicclassLoggingFilterimplementsFilter{@Overri......
  • SpringBoot整合Canal进行数据库 缓存同步
    Canal是阿里巴巴开源的一款基于MySQL数据库的增量日志订阅和解析工具,主要用于实现数据的实时同步和流处理。通过使用Canal,应用程序可以实现对数据库变更的监听,并将变更的数据实时同步到其他系统,比如消息队列、缓存系统等。 先记一下缓存雪崩的问题,缓存雪崩是指在我们的......
  • 基于Springboot框架高校学校自习室教室座位预约系统设计与实现(安装部署+源码+文档)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 9.折磨了一周的springboot样式跳转
    大致是这样的springboot一个项目将头部和侧部公共部分都提取出来但是一点击员工怎么侧边样式一直失败我看F12报错说的什么cavas渲染加上了还是错啊因为我是侧边栏的问题我的Controller跳转肯定没错这个真是让我难受了一周多因为还差增删改查就设计完毕了这个坑一......
  • Springboot整合Mybatis
    整合生产者默认如果在windows安装了rabbitmq是不用配置信息的,因为存在默认的配置整合流程:导包----------编写配置-----------写代码在springboot中存在很多template,MQ就是其中的一种导包其实不需要导包,在创建springboot项目时,勾选MQ,就可以了编写配置#......
  • SpringBoot配置静态资源访问
    默认的静态资源映射SpringBoot中的SpringMVC模块利用ResourceHttpRequestHandler来处理静态内容,对静态资源的映射提供了默认的配置。默认情况下,SpringBoot按如下优先级,从上到下将/**所有的资源访问映射到以下目录:classpath:/META-INF/resources/classpath:/resources/......
  • 会员制医疗预约服务管理信息系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读100套最新项目持续更新中.....2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssm+vue等技术项目合集)1.系统功能模块2.管理员功能模块......
  • 财务管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读100套最新项目持续更新中.....2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssm+vue等技术项目合集)目录1.管理员功能效果图1.1.员工功能模块2.系统功能设计3.数据库E......