@interfaceインスタンス変数をpointcutとメソッドに渡す必要がありますが、Googleでは何も見つかりませんでした。ここ AspectJ - インターフェイスインスタンス変数をポイントカットに渡す
は、私がこれまで持っているものです。ポイントカット:
pointcut auditField(Object t, Object value): set(@ge.shemo.anotations.CaptureChanges * *) && args(value) && target(t);
before (Object target, Object newValue, FieldChangeName fieldName):
auditField(target, newValue,fieldName) {
FieldSignature sig = (FieldSignature) thisJoinPoint.getSignature();
Field field = sig.getField();
field.setAccessible(true);
Object oldValue;
try {
oldValue = field.get(target);
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to create audit Action", e);
}
System.out.println("changed from " + oldValue + " to " + newValue);
}
およびインタフェース:
@Retention(RUNTIME)
@Target(value = FIELD)
public @interface CaptureChanges {
MethodType fieldType();
}
UPDATED
public enum MethodType {
NAME(FieldChangeType.STRING),
ID(FieldChangeType.STRING),
FIRST_NAME(FieldChangeType.STRING),
LAST_NAME(FieldChangeType.STRING);
private FieldChangeType type;
private FieldChangeName(FieldChangeType type) {
this.type = type;
}
public FieldChangeType getType() {
return this.type;
}
}
public enum FieldChangeType {
ENUM, STRING
}
@interface CaptureChangesから 'FieldChangeMethodメソッド'の値を取得し、それをbefore()関数で使用したいと考えています。
どうすればいいですか?
でした'MethodType'と' FieldChangeName'タイプにあなたの質問にソースを追加しますか?投稿したコードが実際にコンパイルされていることを確認してください。 –
@NándorElődFeketeコードがコンパイルされていて、新旧の価値を得ることができます - しかし、私はMethodTypeの価値も得る必要があります – Purmarili