【问题标题】:Capture setters inside mapper method using AspectJ in Spring在 Spring 中使用 AspectJ 在映射器方法中捕获设置器
【发布时间】:2020-04-02 11:36:42
【问题描述】:

我有这样的java类:

@Data
public class Lead {
    private A a;
    ...
}

@Data
public class A {
    private B b;
    private String c;
    private List<Integer> d;
}

@Data 
public class B {
    private String e;
    private String f;
}

我有一个带有这样注释的映射器方法:

@FieldPermissionAnnotation("a")
public A fetchA(//Some DB Entities) {
    A a = new A();
    ...
    a.setB(fetchB());
    ...
    a.setC(fetchC());
    ...
    a.setD(fetchD());
}

My FieldPermissionAspect 从 db 中为用户获取权限字段映射,如果用户没有给定字段的权限,则将字段设置为 null。

我得到一个字符串字段层次结构列表,如下所示:

["a-b-e", "a-b-f", "a-c", "a-d"]

我想在 fetchA() 方法中使用 @Around 围绕它们各自的设置器将 b、c、d 设置为 null。 使用 AspectJ 和 spring 是否可行? 如何在 fetchA() 方法中访问 b、c、d 的设置器?

【问题讨论】:

  • 欢迎来到 SO。请通过阅读 MCVE 来了解如何提问。您有方面的问题,但不分享任何方面的代码,只分享目标类的片段。所以其他喜欢帮助你的人不得不猜测。

标签: java spring aop aspectj spring-aop


【解决方案1】:

我想在fetchA() 方法中使用@Aroundbcd 设置为null。使用 AspectJ 和 spring 可行吗?如何在fetchA() 方法中访问bcd 的设置器?

正如我在评论中所说,您的问题不清楚,我不得不猜测您想要做什么,因为没有方面代码。我的假设是,如果(且仅当)从某个其他方法内部调用它们时,您想拦截 setter 方法。 IE。你需要一个依赖于控制流的切入点,比如cflow()cflowbelow()。根据Spring manual,Spring AOP 不支持这些切入点,但您可以将 Spring 配置为使用完整的AspectJ with LTW (load-time weaving)

有关更多详细信息,我建议您向我展示您的(MCVE,最好在 GitHub 上使用 Maven 构建),然后向您展示我的(具体解决方案)。

【讨论】:

  • 您好 kriegaex,我阅读了您之前的回答并了解了 cflow。当我尝试运行该应用程序时,它显示了此处提到的错误 stackoverflow.com/questions/59575549/… 。你能调查一下吗?也感谢您的时间。 :)
  • MCVE 这个词有什么不清楚的地方?
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2021-12-26
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
相关资源
最近更新 更多