首页 > 其他分享 >spring aop

spring aop

时间:2023-06-22 18:00:48浏览次数:35  
标签:args obj .. spring Object aop joinPoint public


切面表达式


execution表达式

基本语法格式为:execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)除了返回类型模式,方法名模式和参数模式外,其它项都是可选的。 例如:

// com下所有方法
@Pointcut("execution(* com..*.*(..))")	
	

@Pointcut("execution(public * cn.hjljy.*.controller..*.*(..))")
    public void logCut(){}
    @Around("logCut()")
    public Object validateParam(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("进入切面进行验证");
        Object obj = joinPoint.proceed();
        return obj;
    }

模式

描述

public

public 表示public 级别方法。 可以不写,不写就是所有的方法(public,private,protected等级别的方法)

开头的 *

表示方法返回值的类型 * 表示全部

cn.hjljy.*.controller

表示具体的包名,中间使用*做通配符

..

表示包以及包下面的子包

*

表示全部

.*(..)

表示全部方法

@args 表达式

args主要是用来限制方法的参数的,args有两种表现形式:@args 和args 使用@args需要通过注解,如果方法里面有参数持有这个注解,就可以。 例如:

@Pointcut("@args(cn.hjljy.mlog.common.annotation.MlogLog)")
    public void logCut(){}
    @Around("logCut()")
    public Object validateParam(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("进入切面进行验证");
        Object obj = joinPoint.proceed();
        return obj;
    }

如果某个方法例如:

public void test(MlogCommentEntity entity) {
      //如果entity这个实体类上面有MlogLog这个注解,就会被切面切到。
   }

如果是args需要书写方法参数类型并且是配合execution表达式进行的处理例如:

//第一种写法
   @Around("execution( * cn..*.controller..*.*(..))&&args(..,org.springframework.validation.BindingResult)\"")
   public Object validateParam(ProceedingJoinPoint joinPoint) throws Throwable {
       System.out.println("进入切面进行验证");
       Object obj = joinPoint.proceed();
       return obj;
   }
//第二种写法
   @Around("execution( * cn..*.controller..*.*(..))&& args(..,bindingResult)")
   public Object validateParam(ProceedingJoinPoint joinPoint, BindingResult bindingResult) throws Throwable {
       System.out.println("进入切面进行验证");
       Object obj = joinPoint.proceed();
       return obj;
   }

模式

描述

两种写法

表示任意参数开头,方法最后一个入参是BindingResult 类型

@annotation 表达式

这个非常的常见,直接通过注解进行的切面。只需要在需要切面的方法上加上对应的注解就可以了。 例如:

@Pointcut("@annotation(cn.hjljy.mlog.common.annotation.MlogLog)")
    public void logCut(){}
    @Around("logCut()")
    public Object validateParam(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("进入切面进行验证");
        Object obj = joinPoint.proceed();
        return obj;
    }

然后在需要进行切面的方法上加上对应的注解就可以了。





标签:args,obj,..,spring,Object,aop,joinPoint,public
From: https://blog.51cto.com/u_12948550/6535180

相关文章

  • SpringBoot - jackson 序列化配置,支持jdk8 时间类型和解决科学计数法
    jdk8时间序列化配置#Copy@ConfigurationpublicclassJacksonConfig{@BeanpublicObjectMapperserializingObjectMapper(){JavaTimeModulejavaTimeModule=newJavaTimeModule();/**序列化配置,针对java8时间**/javaTimeModule.add......
  • 微服务 – Spring Cloud –zookeeper
    微服务–SpringCloud–zookeeperzookeeper简介ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步、提供组服务.支持高度可靠的分布式协调.zookeeper数据模型和分层命名空间zookeeper数据模型:其实就是用来存储和处理数据的。类似于数据库系统。不过z......
  • springboot 默认配置的线程池
     线程池的大小通常都是我们比较关注的,SpringBoot会为系统做默认配置。如果不清楚SpringBoot默认配置的线程池的大小的话,容易线上踩坑。最近碰到一个生产问题,线上部署6台机器,定时任务A,B都在17:00执行,执行时会各自先获取分布式锁。(服务器时间是一致的)理论上是可以做到同......
  • springboot集成easyexcel实现导入导出
    1、添加依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>2、controller/***基于Liste......
  • springboot简单依赖
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/......
  • springboot启动流程 (3) 自动装配
    在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能。本文将详细分析该注解的工作流程。EnableAutoConfiguration注解启用SpringBoot自动装配功能,尝试猜测和配置可能需要的组件Bean。自动装配类通常是根据类路径和定义的Bean来应用的。例如,如果类路径上有tomcat-......
  • Jenkins部署前后端不分离springboot项目
    背景写这篇博客的时候我还是大学生,学校期末课程设计时要求使用Jenkins部署项目,所以使用windows,但是企业中都是使用linux,往往还会搭建一个gitlab。下面我介绍的是在window环境下使用jenkins部署项目,这阵子搞这个期末作业时感觉收获还是挺大的,专门记录下。持续集成(CI)持续集成......
  • 9. SpringMVC处理ajax请求
    9.1、@RequestBody@RequestBody可以获取请求体信息,使用@RequestBody注解标识控制器方法的形参,当前请求的请求体就会为当前注解所标识的形参赋值<!--此时必须使用post请求方式,因为get请求没有请求体--><formth:action="@{/test/RequestBody}"method="post"> 用户名:<inp......
  • 14. SpringMVC执行流程
    14.1、SpringMVC常用组件DispatcherServlet:前端控制器,不需要工程师开发,由框架提供作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求HandlerMapping:处理器映射器,不需要工程师开发,由框架提供作用:根据请求的url、method等信息查找Handler,即控制......
  • 13. 注解配置SpringMVC
    使用配置类和注解代替web.xml和SpringMVC配置文件的功能13.1、创建初始化类,代替web.xml在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。Spring提供了这个接口的实现,名为SpringServletCo......