gpt4 book ai didi

java - 特定注释变量的AOP切入点表达式

转载 作者:行者123 更新时间:2023-12-01 11:27:02 27 4
gpt4 key购买 nike

我有一个这样的场景..

自定义注释定义...

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheMe{
String node();
}

用户详细信息类...

class User {
String name;
String ssn;
}

以及一个以“User”对象作为变量并使用@CacheMe注释的类

Class Test{

@CacheMe(node="user")
User user;

public User getUser(Long id){
if(user != null){
user = someImplementingClass.getUserDetails(id);
}
....
.....
}

}

当“用户”对象验证为空或访问用户对象时,我需要切入点表达式。我正在使用基于 Spring 模式的 AOP。

感谢您的宝贵时间。

最佳答案

正如之前的评论所指出的,Spring AOP 不支持字段级建议。原因是 Spring AOP 使用代理(在类或接口(interface)级别,具体取决于具体场景)。代理包装实例并能够检测方法调用。 如果您考虑一下,包装器无法检测属性修改,因为属性根本无法被覆盖,它只能被隐藏(从 java 的角度来看)。

使用 Spring AOP,您将能够为 getter 和 setter 提供建议,但如果您需要 Field 建议,那么您唯一的选择是 AspectJ。 (如果您需要建议构造函数和异常引发,这同样适用)。

查看快速aspectJ引用here请记住,如果您走这条路,您可能需要使用这些切入点:

  • get(Signature):对与签名匹配的任何字段的每个引用
  • set(Signature):对任何与签名匹配的字段的每次分配。分配的值可以通过 args 切入点公开

此外,如果您决定使用aspectJ,则需要设置some things in your app ,并决定您是否更喜欢加载时编织或编译时编织。该决定会带来您可能想要的重要后果 keep in mind .

关于java - 特定注释变量的AOP切入点表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com