关于 aop 记录日志的一个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MadDoggy
V2EX    Java

关于 aop 记录日志的一个问题

  •  
  •   MadDoggy 2021-06-02 10:46:40 +08:00 3239 次点击
    这是一个创建于 1667 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 希望通过 aop 在接口被调用时打印日志
    • 现在有两个模块,一个 common,一个 business,切面类写在 common 模块下,execution 表达式匹配的是 business 下的 controller ;现在的问题是 common 是不应该依赖 business 的,这导致 execution 表达式匹配不到 business 下的 controller,我应该把这个切面类移到 business 下吗,这样的话有多个业务模块得重写多次切面类吗
    18 条回复    2021-06-03 13:43:49 +08:00
    ingdawn
        1
    ingdawn  
       2021-06-02 10:48:55 +08:00
    business 不依赖 common ?
    MadDoggy
        2
    MadDoggy  
    OP
       2021-06-02 10:52:24 +08:00
    @ingdawn business 是依赖 common 的,但是 execution 表达式无法匹配到 business 下的 controller
    MadDoggy
        3
    MadDoggy  
    OP
       2021-06-02 11:04:34 +08:00
    背景是我在参考这个开源项目 https://github.com/macrozheng/mall 导入 idea 后他的切面类中的表达式是无法识别的,我仿照他的结构和方式写,接口被调用时也是无法进到这个切面类的
    limuyan44
        4
    limuyan44  
       2021-06-02 11:26:42 +08:00
    你需要的是 spring.factories 。
    limuyan44
        5
    limuyan44  
       2021-06-02 11:27:56 +08:00
    对于 spring 的公共日志模块算是一个经典的用法。
    MadDoggy
        6
    MadDoggy  
    OP
       2021-06-02 11:40:11 +08:00
    @limuyan44 嗯我会去了解的,目前还是想把这个问题搞清楚
    xuanbg
        7
    xuanbg  
       2021-06-02 13:45:45 +08:00
    不是在拦截器里面打日志就好了吗???
    ayang11
        8
    ayang11  
       2021-06-02 14:21:13 +08:00
    或许可以写个自定义注解 给所有需要打日志的接口都加上注解 然后 aop 监听注解
    clf
        9
    clf  
       2021-06-02 14:27:41 +08:00
    api 请求的日志还是用 filter 来处理。对特定注解(或接口实现类)再考虑用 AOP 。
    huifer
        10
    huifer  
       2021-06-02 16:16:05 +08:00
    可以尝试手动注入切面,通过 bean 方式
    chenshun00
        11
    chenshun00  
       2021-06-02 19:05:03 +08:00
    不需要的,最后 common 不还是和 business 达成一个 war 包或者是 jar 包运行么,就算不和 business 放一起,最多也是没有匹配到,不过 idea 会再 common 提示匹配不到,这是因为 idea 作为 IDE 做了优化,脱离 idea 来看,引入记事本来看,其实 common 里边的切面和表达式只不过是字符串,不影响的,最终也是在运行时生效
    MadDoggy
        12
    MadDoggy  
    OP
       2021-06-02 19:13:58 +08:00
    @chenshun00 但是实际上运行的时候,接口被调用的时候也没有进入切面,就很奇怪
    limuyan44
        13
    limuyan44  
       2021-06-02 19:37:12 +08:00
    既然你没写过 spring.factories 大概率你没配要么你没配好 scanBasePackages 把要扫描的包放进去,上面多数是瞎说,其他包的 bean 你不手动去配置扫描怎么可能自动执行。
    ychost
        14
    ychost  
       2021-06-02 20:27:20 +08:00
    common 不应该管控到 business 里面,应该仅提供日志打印能力,在 business 里面写好 aop 引用日志模块
    chenshun00
        15
    chenshun00  
       2021-06-02 20:38:33 +08:00
    @MadDoggy 大概率是切面没有被扫描
    seliote
        16
    seliote  
       2021-06-02 23:14:22 +08:00
    应该是切点写的不对, 或者 Common 里的 AOP 没有被扫描到, 模块和切不切没有必然关系
    zifangsky
        17
    zifangsky  
       2021-06-03 11:26:02 +08:00
    通过自定义注解,AOP 扫描有指定注解的方法,然后再记录日志。给你一个例子: https://github.com/zifangsky/quick-modules-example/blob/master/src/main/java/cn/zifangsky/quickmodules/example/config/QuickLogModuleConfig.java
    ikas
        18
    ikas  
       2021-06-03 13:43:49 +08:00
    你这明显是切面配置不对
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2988 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 13:04 PVG 21:04 LAX 05:04 JFK 08:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86