Java AspectJ-将接口实例变量传递给切入点
我需要将@interface实例变量值传递给切入点和方法,但在google上找不到任何东西 以下是我到目前为止的情况: 切入点:Java AspectJ-将接口实例变量传递给切入点,java,aop,aspectj,Java,Aop,Aspectj,我需要将@interface实例变量值传递给切入点和方法,但在google上找不到任何东西 以下是我到目前为止的情况: 切入点: pointcut auditField(Object t, Object value): set(@ge.shemo.anotations.CaptureChanges * * ) && args(value) && target(t); before (Object target, Object newValue, FieldCha
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();
}
已更新
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;
}
}
我想从@interface CaptureChanges获取'FieldChangeMethod'的值,并在before()函数中使用它
我怎样才能做到这一点?虽然我不清楚您试图用
MethodType
和FieldChangeType
类实现什么,但在字段值即将更改时,有一种方法可以访问@CaptureChanges
注释的值:
pointcut auditField(Object t, Object value, CaptureChanges captureChanges):
set(* *) && @annotation(captureChanges) && args(value) && target(t);
before (Object target, Object newValue, CaptureChanges captureChanges):
auditField(target, newValue, captureChanges) {
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
+ ", fieldType=" + captureChanges.fieldType()
+ ", fieldChangeType=" + captureChanges.fieldType().getType());
}
能否将源添加到问题的
MethodType
和FieldChangeName
类型中?请确保您发布的代码确实编译。@NándorElődFekete代码正在编译,我可以获得新值和旧值-但我也需要获得MethodType的值谢谢,这正是我需要的
pointcut auditField(Object t, Object value, CaptureChanges captureChanges):
set(* *) && @annotation(captureChanges) && args(value) && target(t);
before (Object target, Object newValue, CaptureChanges captureChanges):
auditField(target, newValue, captureChanges) {
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
+ ", fieldType=" + captureChanges.fieldType()
+ ", fieldChangeType=" + captureChanges.fieldType().getType());
}