【发布时间】:2014-04-17 13:22:56
【问题描述】:
我正在使用 aspectj 编写一个简单的审计框架,它允许我审计使用 @Audit 注释注释的类的字段。 作为值,@Audit 注释需要观察一组字段名称
示例用法:
@Audit({"name","phoneNumber"})
class User {
private String name;
private String phoneNumber;
public getName(){
return name;
};
public setName(String name){
this.name=name;
}
}
观察上面示例中注释的字段分配的方面看起来如何?
这是我第一次尝试的存根:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Audit {
String[] value()
}
@Aspect
class AuditAspect {
@Pointcut("????")
public void markedFieldWasModified(){}
@AfterReturning("markedFieldWasModified()")
public void addFieldToModifiedFields(JoinPoint jp, AuditableEO eo){
eo.addModifiedField(jp.getSignature().getName());
}
// inter Type declarations
public interface IAuditableEO {
public Iterator<String> modifiedFields();
public boolean modified();
public boolean addModifiedField(String field);
};
}
【问题讨论】:
-
如果我理解正确你的问题,切入点必须在用
@Audit注释的类的设置器(所有“设置*”方法)上定义。然后,您需要检查方法名称是否与@Audit参数中的字段匹配,然后处理新值。也许有一种方法可以在我不知道的字段上添加观察者。