我有这样的场景..
自定义注释定义...
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheMe{
String node();
}
用户详细信息类...
class User {
String name;
String ssn;
}
和#34; User"对象作为变量并使用@CacheMe注释
Class Test{
@CacheMe(node="user")
User user;
public User getUser(Long id){
if(user != null){
user = someImplementingClass.getUserDetails(id);
}
....
.....
}
}
当" user"时,我需要切入点表达式验证对象为null或访问用户对象时。 我使用基于Spring模式的AOP。
感谢您的时间。
答案 0 :(得分:1)
正如之前的评论中所指出的,Spring AOP不支持字段级别的建议。这是因为Spring AOP使用代理(在类或接口级别,具体取决于具体方案)。代理包装实例并能够检测方法调用。 如果你考虑一下,包装器不能检测属性修改,因为根本不能覆盖属性,它只能被遮蔽(从java的角度来看)。
使用Spring AOP,您将能够为getter& amp; setters,但如果您需要Field建议,那么您唯一的选择是AspectJ。 (如果您需要建议构造函数和异常引发,则同样适用。)
检查快速aspectJ参考here并记住,如果你走这条路,你可能需要使用这些切入点:
此外,如果您决定使用aspectJ,则需要设置some things in your app,并决定是否更喜欢加载时编织或编译时编织。该决定会带来您可能想要keep in mind的重要后果。