java – Spring AoP引用切入点中某个String结尾的任何包中所有类的所有方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring AoP引用切入点中某个String结尾的任何包中所有类的所有方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1782字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring AoP引用切入点中某个String结尾的任何包中所有类的所有方法](/upload/InfoBanner/zyjiaocheng/728/2b1f64a2572c4c6c985a8c071f6c2a95.jpg)
我想引用切入点中某个String结尾的任何包中所有类的所有公共方法.
我试过了:
@Pointcut("execution(public * *.*SomeString.*(..))")
编辑:由于我想引用的类都来自应用程序上下文,我知道我可以使用bean()
@Pointcut("bean(*SomeString)")
但我更喜欢使用execution().
解决方法:
*.* SomeString的问题在于它只查找第一个包级别的类,例如foo.BarSomeString或hello.MySomeString,但不在子包中查找,例如foo.aaa.bbb.BarSomeString或hello.xxx.MySomeString.
如果包名称完全不相关,则可以使用通配符:
execution(public * *..*SomeString.*(..))
顺便说一句,如果你使用完整的AspectJ而不是Spring AOP,你可以使用这个快捷方式(我不知道为什么Spring AOP不喜欢它,因为它也使用AspectJ库进行切入点匹配):
execution(public * *SomeString.*(..))
如果要在其下定义基本背面和子包,可以使用..语法:
execution(public * de.scrum_master..*SomeString.*(..))
后者的替代方案是使用within()来限制包:
execution(public * *(..)) && within(de.scrum_master..*SomeString)
顺便说一句,在AspectJ中你真的需要execution()切入点,因为它有更多的切入点类型,但是在Spring AOP中隐式地所有切入点都是执行切入点,因为它是Spring AOP支持的唯一连接点类型,因为它基于代理的性质.所以你也可以写:
within(de.scrum_master..*SomeString)
对于基于接口的代理(Java动态代理),这是相同的,因为只支持公共方法.这里唯一的细微差别是,对于CGLIB代理(当代理类,而不是接口,或通过所有代理的配置)时,这也将匹配受保护和包范围的方法.
稍微偏离主题,这里是如何不对类而不是具有特殊后缀的方法做同样的事情:
execution(public * *SomeString(..))
如果您还想限制包/类范围,您可以将它组合起来:
execution(public * *SomeString(..)) && within(de.scrum_master..*)
或等效地:
execution(public * de.scrum_master..*SomeString(..))
因此,如果您想立即限制package,class和mathod名称,请执行以下操作:
execution(public * de.scrum_master..*Controller.*SomeString(..))
或等效地:
execution(public * *SomeString(..)) && within(de.scrum_master..*Controller)
内容总结
以上是互联网集市为您收集整理的java – Spring AoP引用切入点中某个String结尾的任何包中所有类的所有方法全部内容,希望文章能够帮你解决java – Spring AoP引用切入点中某个String结尾的任何包中所有类的所有方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。