DanielGuo
V2EX  ›  问与答

如何用 aop 切入指定 bean 的所有方法?急

  •  
  •   DanielGuo · Mar 23, 2020 · 2513 views
    This topic created in 2421 days ago, the information mentioned may be changed or developed.

    难点在于指定的 bean

    目前有很多个不同的类,没有规律,类文件还无法改动,都是自动生成的。后期还会继续增多。也就是说不能在 aspect 中写死 expression 限定。

    能不能在下述方式声明 bean 的同时,将 A 和 B 的所有方法声明成切入点?
    @Bean
    类 A getA (){}
    @Bean
    类 B getB (){}

    12 replies  •  2020-03-24 09:58:46 +08:00
    lu5je0
    lu5je0
    Mar 23, 2020 via Android
    1
    BeanPostProcessor
    DanielGuo
    DanielGuo
    OP
    Mar 23, 2020
    2
    我知道可以把 bean 命名成统一后缀,然后 expression 匹配后缀,但是我觉得这样不优雅。 有没有像加注解的方式?可以在 @Bean 上再加一个注解标明切点
    DanielGuo
    DanielGuo
    OP
    Mar 23, 2020
    3
    @lu5je0 BeanPostProcessor 要实现接口啊。。。现在这些类都是无法改动的,第三方类
    lu5je0
    lu5je0
    Mar 23, 2020 via Android
    4
    @DanielGuo 第三方的类不需要实现 BeanPostProcessor,你可以再了解一下
    securityCoding
    securityCoding
    Mar 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))"
    )
    DanielGuo
    DanielGuo
    OP
    Mar 23, 2020
    6
    @securityCoding 这样确实是最直观的,就是感觉有点笨笨的,要是能把注解标在 @Bean 方法上就优雅多了
    DanielGuo
    DanielGuo
    OP
    Mar 23, 2020
    7
    @securityCoding 现在我的痛点就是,我想切的类。。上面并没有注解
    DanielGuo
    DanielGuo
    OP
    Mar 23, 2020
    8
    @lu5je0 不好意思,记混了,第三方类确实不用实现接口,processor 是对所有 bean 进行遍历。。。但是现在的痛点就是遍历过程中我无法分辨哪些 bean 是需要切的
    zerozerone
    zerozerone
    Mar 23, 2020 via Android
    9
    自定义 bean 扫描,扫到需要增强的 bean 之后再手动注册到容器
    MoHen9
    MoHen9
    Mar 24, 2020 via Android
    10
    最近想分享 AOP 的一些小技巧,这个兴许可以帮到你,https://github.com/dingxiuan/springboot-doughnut/blob/master/aop/src/main/java/com/benefit/aop/AopWebRequestAspect.java

    如果你有疑问,可以在 V2 给我发消息
    DanielGuo
    DanielGuo
    OP
    Mar 24, 2020 via iPhone
    11
    @MoHen9 谢谢,pointcut 里用 bean()是适用于我这个场景的。但是我觉得实例都声明成同一个 name 后缀不太好拓展,有办法把 beans 分组,设置一个组名,然后 aspectJ 识别吗?
    MoHen9
    MoHen9
    Mar 24, 2020
    12
    @DanielGuo 可以举个例子吗?我不太理解你的场景
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4140 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:38 · PVG 14:38 · LAX 22:38 · JFK 01:38
    ♥ Do have faith in what you're doing.