Spring5深入浅出篇:Spring切入点详解

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 该文档是关于Spring框架中切入点的详细解释。切入点是AOP(面向切面编程)的核心概念,用于定义通知(如日志、事务管理)应该附加到代码的哪些位置。文档主要介绍了切入点表达式的不同类型:1. 方法切入点表达式:使用`execution()`定义匹配的方法,星号`*`代表任意返回值和方法名,`(..)`表示任意参数。2. 类切入点:指定特定类以应用额外功能,可以精确到类中的所有方法,或者只包含特定包的类。3. 包切入点表达式:适用于整个包或包及其子包内的所有类和方法。

Spring5深入浅出篇:Spring切入点详解

切⼊点详解

切⼊点决定额外功能加⼊位置(⽅法)
<aop:pointcut id="pc" expression="execution(* *(..))"/>
exection(* *(..)) ---> 匹配了所有⽅法 a b c
1. execution() 切⼊点函数
2. * *(..) 切⼊点表达式

切⼊点表达式

⽅法切⼊点表达式


* *(..) --> 所有⽅法
* ---> 修饰符 返回值
* ---> ⽅法名
()---> 参数表
..---> 对于参数没有要求 (参数有没有,参数有⼏个都⾏,参数是什么类型的都⾏)
  • 定义login⽅法作为切⼊点
* login(..)
# # 定义register register作为切⼊点
* register(..)
  • 定义login⽅法且login⽅法有两个字符串类型的参数 作为切⼊点
* login(String,String)
##注意:⾮java.lang java.lang包中的类型,必须要写全限定名
* register(com.baizhiedu.proxy.User)
# .. # ..可以和具体的参数类型连⽤
* login(String,..) -->
login(String),login(String,String),login(String,com.baizhiedu
.proxy.User)
  • 精准⽅法切⼊点限定
修饰符 返回值 包.类.⽅法(参数)
 * 
com.baizhiedu.proxy.UserServiceImpl.login(..)
 * 
com.baizhiedu.proxy.UserServiceImpl.login(String,String)

类切⼊点

指定特定类作为切⼊点(额外功能加⼊的位置),⾃然这个类中的所有⽅法,都会加上对应的额外功能

  • 语法1
#类中的所有⽅法加⼊了额外功能
* com.baizhiedu.proxy.UserServiceImpl.*(..)
  • 语法2
##忽略包
1. 类只存在⼀级包 com.UserServiceImpl
* *.UserServiceImpl.*(..)
2. 类存在多级包 com.baizhiedu.proxy.UserServiceImpl
* *..UserServiceImpl.*(..)

包切⼊点表达式

指定包作为额外功能加⼊的位置,⾃然包中的所有类及其⽅法都会加⼊额外的功能

  • 语法1
##切⼊点包中的所有类,必须在proxy proxy中,不能在proxy proxy包的⼦包中
* com.baizhiedu.proxy.*.*(..)
  • 语法2
##切⼊点当前包及其⼦包都⽣效
* com.baizhiedu.proxy..*.*(..)

切⼊点函数

切⼊点函数:⽤于执⾏切⼊点表达式

  • execution
最为重要的切⼊点函数,功能最全。
执⾏ ⽅法切⼊点表达式 类切⼊点表达式 包切⼊点表达式
弊端:execution执⾏切⼊点表达式 ,书写麻烦
 execution(* com.baizhiedu.proxy..*.*(..))
 
注意:其他的切⼊点函数 简化是execution书写复杂度,功能上完全⼀致
  • args
作⽤:主要⽤于函数(⽅法) 参数的匹配
切⼊点:⽅法参数必须得是2个字符串类型的参数
execution(* *(String,String))
args(String,String)
  • within
作⽤:主要⽤于进⾏类、包切⼊点表达式的匹配
切⼊点:UserServiceImpl这个类
execution(* *..UserServiceImpl.*(..))
within(*..UserServiceImpl)
execution(* com.baizhiedu.proxy..*.*(..))
within(com.baizhiedu.proxy..*)
作⽤:为具有特殊注解的⽅法加⼊额外功能
<aop:pointcut id="" expression="@annotation(com.baizhiedu.Log)"/>

切⼊点函数的逻辑运算

指的是 整合多个切⼊点函数⼀起配合⼯作,进⽽完成更为复杂的需求


  • and与操作
案例:login 同时 参数 2个字符串
1. execution(* login(String,String))
2. execution(* login(..)) and args(String,String)
注意:与操作不同⽤于同种类型的切⼊点函数
案例:register⽅法 和 login⽅法作为切⼊点
execution(* login(..)) or execution(* register(..))
  • or或操作
案例:register⽅法 和 login⽅法作为切⼊点
execution(* login(..)) or execution(* register(..))

以上便是本文的全部内容,我是全干程序员demo,每天为你带来最新好用的开发运维工具,如果你觉得用,请点赞,让更多的人了解相关工具

如果你想了解更多关于全干程序员demo,还有更多付费工具免费破解,可以关注公众号-全干程序员demo,后面文章会首先同步至公众号

目录
打赏
0
0
0
0
68
分享
相关文章
|
10月前
|
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究Spring的核心注解开发和实现指南(Spring5的常见的注解)
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究Spring的核心注解开发和实现指南(Spring5的常见的注解)
54 1
Spring5深入浅出篇:Spring动态代理详解
# Spring动态代理详解 本文探讨了Spring中的MethodBeforeAdvice和MethodInterceptor在动态代理中的应用和差异。MethodBeforeAdvice在方法执行前执行额外功能,而MethodInterceptor则可在方法执行前后或抛出异常时运行额外逻辑。MethodInterceptor还能影响原始方法的返回值。
Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)
Spring 第五节 AOP——切入点表达式 万字详解!
138 25
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
Spring5入门到实战------1、Spring5框架概述、入门案例
这篇文章是Spring5框架的入门教程,概述了Spring框架的核心概念和特点,并通过一个创建普通Java类的案例,详细演示了从下载Spring核心Jar包、创建配置文件、编写测试代码到运行测试结果的完整流程,涵盖了Spring IOC容器的使用和依赖注入的基本用法。
|
10月前
|
切面编程的锋芒:Spring切入点的玩法与技巧
切面编程的锋芒:Spring切入点的玩法与技巧
74 0
切面编程的锋芒:Spring切入点的玩法与技巧
Spring5深入浅出篇:Spring中静态代理与动态代理
Spring框架中的代理模式分为静态代理和动态代理。在JavaEE分层开发中,Service层最为重要,包含核心业务逻辑和额外功能。静态代理通过手动创建代理类来增加原始类的额外功能,但当代理类数量多时管理不便且不易于维护。动态代理则解决了这一问题,通过Spring的AOP(面向切面编程)实现,无需手动创建代理类,只需定义切点和增强(额外功能),在运行时动态生成代理对象,提高了代码的灵活性和可维护性。动态代理主要利用了JVM的字节码技术,在运行过程中创建代理类,执行完毕后随着虚拟机的结束而销毁,不会产生持久化的代理类。
Spring5深入浅出篇:Spring配置⽂件参数化
该文档介绍了Spring配置文件参数化的概念和步骤。目的是将经常需要修改的配置,如数据库连接参数,从主配置文件中分离到一个单独的`.properties`文件,以便于管理和维护。步骤包括创建小型配置文件(如`db.properties`),在`applicationContext.xml`中引入该文件,并使用`${key}`语法在Spring配置文件中引用这些参数。最终通过测试验证配置文件参数化的成功。
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
31 0

云原生

+关注