难点在于指定的 bean
目前有很多个不同的类,没有规律,类文件还无法改动,都是自动生成的。后期还会继续增多。也就是说不能在 aspect 中写死 expression 限定。
能不能在下述方式声明 bean 的同时,将 A 和 B 的所有方法声明成切入点?
@Bean
类 A getA (){}
@Bean
类 B getB (){}
难点在于指定的 bean
目前有很多个不同的类,没有规律,类文件还无法改动,都是自动生成的。后期还会继续增多。也就是说不能在 aspect 中写死 expression 限定。
能不能在下述方式声明 bean 的同时,将 A 和 B 的所有方法声明成切入点?
@Bean
类 A getA (){}
@Bean
类 B getB (){}
|
lu5je0Mar 23, 2020 via Android
1
BeanPostProcessor
|
|
2
我知道可以把 bean 命名成统一后缀,然后 expression 匹配后缀,但是我觉得这样不优雅。 有没有像加注解的方式?可以在 @Bean 上再加一个注解标明切点
|
|
securityCodingMar 23, 2020
5
@DanielGuo 可以, 比如记录请求日志
@Around("(@annotation(org.springframework.web.bind.annotation.RequestMapping)" + "||@annotation(org.springframework.web.bind.annotation.GetMapping)" + "||@annotation(org.springframework.web.bind.annotation.PostMapping)" + "||@annotation(org.springframework.web.bind.annotation.PutMapping)" + "||@annotation(org.springframework.web.bind.annotation.DeleteMapping))" ) |
|
6
@securityCoding 这样确实是最直观的,就是感觉有点笨笨的,要是能把注解标在 @Bean 方法上就优雅多了
|
|
7
@securityCoding 现在我的痛点就是,我想切的类。。上面并没有注解
|
|
8
@lu5je0 不好意思,记混了,第三方类确实不用实现接口,processor 是对所有 bean 进行遍历。。。但是现在的痛点就是遍历过程中我无法分辨哪些 bean 是需要切的
|
|
zerozeroneMar 23, 2020 via Android
9
自定义 bean 扫描,扫到需要增强的 bean 之后再手动注册到容器
|
|
MoHen9Mar 24, 2020 via Android
10
最近想分享 AOP 的一些小技巧,这个兴许可以帮到你,https://github.com/dingxiuan/springboot-doughnut/blob/master/aop/src/main/java/com/benefit/aop/AopWebRequestAspect.java
如果你有疑问,可以在 V2 给我发消息 |
|
11
@MoHen9 谢谢,pointcut 里用 bean()是适用于我这个场景的。但是我觉得实例都声明成同一个 name 后缀不太好拓展,有办法把 beans 分组,设置一个组名,然后 aspectJ 识别吗?
|