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,后面文章会首先同步至公众号