在 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 构建),然后我向您展示我的(具体解决方案)。
我有 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
tonull
using@Around
around their respective setters inside thefetchA()
method. Is it feasible using AspectJ and spring? How do I access the setters forb
,c
,d
inside thefetchA()
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 构建),然后我向您展示我的(具体解决方案)。