在 Spring 中使用 AspectJ 在 mapper 方法中捕获 setter

Capture setters inside mapper method using AspectJ in Spring

我有 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());
}

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

我得到了这样的字符串字段层次结构列表:

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

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

I want to set b, c, d to null using @Around around their respective setters inside the fetchA() method. Is it feasible using AspectJ and spring? How do I access the setters for b, c, d inside the fetchA() method?

正如我在评论中所说,你的问题不清楚,我不得不猜测你想做什么,因为没有方面代码。我的假设是,如果(且仅当)从某个其他方法内部调用它们时,您想要拦截 setter 方法。 IE。你需要一个依赖于控制流的切入点,比如 cflow()cflowbelow()。按照Spring manual these pointcuts are not supported by Spring AOP, but you can configure Spring to use full AspectJ with LTW (load-time weaving)代替。

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