Spring Aop 跨模块失效求助

4 天前
 ftsland

https://stackoverflow.com/questions/64814633/spring-aop-aspect-doesnt-work-in-multi-module-project

遇到一个需求需要把分布在各个模块的接口中返回的某些字段加密, 把切面 @Aspect 定义在了公共模块 common 业务模块 A,B 在 pom 依赖 common 模块, 参照 stackoverflow 的答案在 A,B 模块分别定义了 Config 类 切点使用自定义注解, 在公共模块中的接口(没错。。老代码里公共模块也有对外接口)切面生效了, 但是在 A,B 模块的接口切面一直不生效, 求助

//切面类

@AfterReturning(pointcut = "@annotation(cn.core.annotation.InfoEncrypt)", returning = "response")
public void afterReturning(JoinPoint jp, InfoEncryptResponse response) {
    LoggerEx.info("加密身份证,手机号开始");
    try {
        if (response != null && CollectionUtils.isNotEmpty(response.getInfoEncryptBeans())) {
            List<? extends InfoEncryptBean> needEncryptBeans = response.getInfoEncryptBeans();
            doEncrypt(needEncryptBeans);
        }
    } catch (Exception e) {
        LoggerEx.exception("AspectInfoEncrypt exception", e);
    }
}


@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan({"cn.module.a"})
public class AspectInfoEncryptConfigA {

    @Bean
    public AspectInfoEncrypt aspectInfoEncrypt() {
        return new AspectInfoEncrypt();
    }

}
302 次点击
所在节点    Java
4 条回复
mufanzz
4 天前
失效的类被加入 spirng bean 了吗,调用的时候通过代理了吗?
ftsland
4 天前
@mufanzz 切面不生效的类是使用 @Service 注解的 , 已经注入了
yuezk
4 天前
确认一下 A, B 模块里面的返回值类型是不是 `InfoEncryptResponse` 或者它的子类
ftsland
4 天前
想起来了, 是因为同类调用的问题, 学艺不精,, 惭愧,已经解决了, 谢谢两位的帮助

@mufanzz
@yuezk

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1080238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX