使用Spring的AspectJ在Mapper方法内捕获捕获器

问题描述 投票:0回答:1

我有这样的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;
}

我有一个带有这样注释的mapper方法:

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

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

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

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

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

java spring security aop aspectj
1个回答
1
投票

我想在b方法内将它们各自的设置器周围使用c来设置dnull@AroundfetchA()。使用AspectJ和spring可行吗?如何在b方法中访问cdfetchA()的设置器?

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

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

© www.soinside.com 2019 - 2024. All rights reserved.