Spring中两个PointCut表达式的差异及*..部分含义咨询
Spring 切点表达式差异解析
第一个表达式里*..的含义
在Spring AOP的切点表达式规则中,*..是包路径的通配符组合:
*匹配任意单个包名(或类名的一部分)..匹配任意层级的包结构,包括当前包、直接子包,甚至深层嵌套的子包
两者结合后,*..代表匹配任意包路径下的类,不管这个类在根包、当前包还是多级子包里。
两个表达式的核心区别
拆解两个表达式逐一分析:
* *..*Repository.find*(..)*..*Repository部分:能匹配所有包路径下名字以Repository结尾的类,比如com.example.UserRepository、com.example.dao.OrderRepository,甚至当前包下的BookRepository都能命中- 整体作用:匹配任意返回值、任意包下以Repository结尾的类中,所有以
find开头的方法(参数数量、类型不限)
* *Repository.find*(..)*Repository部分:仅匹配当前包下名字以Repository结尾的类。比如切面定义在com.example包下时,只有com.example.UserRepository能被匹配,com.example.dao.OrderRepository这类子包中的类无法被命中- 整体作用:匹配任意返回值、当前包下以Repository结尾的类中,所有以
find开头的方法(参数数量、类型不限)
简言之,第一个表达式的匹配范围覆盖所有层级包的Repository类,第二个仅局限于当前包。
内容的提问来源于stack exchange,提问作者firemancer
相关产品推荐
相关产品推荐

