/** * Get a signature for a member * * @param member the member * @return the result */ public static Signature getSignature(Member member) { if (member == null) throw new IllegalArgumentException("Null member"); if (member instanceof Method) { Method method = Method.class.cast(member); return new MethodSignature(method); } if (member instanceof Field) { Field field = Field.class.cast(member); return new FieldSignature(field); } if (member instanceof Constructor) { Constructor<?> constructor = Constructor.class.cast(member); return new ConstructorSignature(constructor); } throw new IllegalArgumentException("Unknown member: " + member); }
import java.lang.reflect.Field; import org.aspectj.lang.reflect.FieldSignature; public privileged aspect FieldChangeMonitorAspect { void around(Sample sample): set(int Sample.x) && target(sample) { FieldSignature fieldSignature = (FieldSignature) thisJoinPoint.getSignature(); Field field = fieldSignature.getField(); int oldValue = sample.x; int newValue = ((Integer)thisJoinPoint.getArgs()[0]).intValue(); proceed(sample); int actualNewValue = sample.x; System.out.printf("changed field %s: old value=%d, new value=%d, " + "actual new value=%d\n", field, oldValue, newValue, actualNewValue); } }
import java.lang.reflect.Field; import org.aspectj.lang.reflect.FieldSignature; public aspect FieldChangeMonitorAspectWithReflection { void around(Sample sample): set(int Sample.x) && target(sample) { FieldSignature fieldSignature = (FieldSignature) thisJoinPoint.getSignature(); Field field = fieldSignature.getField(); try { Object oldValue = field.getInt(sample); Object newValue = thisJoinPoint.getArgs()[0]; proceed(sample); Object actualNewValue = field.get(sample); System.out.printf("changed field %s: old value=%d, new value=%d, " + "actual new value=%d\n", field, oldValue, newValue, actualNewValue); } catch (IllegalArgumentException | IllegalAccessException e) { throw new RuntimeException(e); } } }
/** * Get a signature for a member info * * @param member the member * @return the result */ public static Signature getSignature(MemberInfo member) { if (member == null) throw new IllegalArgumentException("Null member"); if (member instanceof MethodInfo) { MethodInfo method = MethodInfo.class.cast(member); return new MethodSignature(method); } if (member instanceof FieldInfo) { FieldInfo field = FieldInfo.class.cast(member); return new FieldSignature(field); } if (member instanceof ConstructorInfo) { ConstructorInfo constructor = ConstructorInfo.class.cast(member); return new ConstructorSignature(constructor); } throw new IllegalArgumentException("Unknown member: " + member); }
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()); }
/** * Get a signature for a member * * @param member the member * @return the result */ public static Signature getSignature(Member member) { if (member == null) throw new IllegalArgumentException("Null member"); if (member instanceof Method) { Method method = Method.class.cast(member); return new MethodSignature(method); } if (member instanceof Field) { Field field = Field.class.cast(member); return new FieldSignature(field); } if (member instanceof Constructor) { Constructor<?> constructor = Constructor.class.cast(member); return new ConstructorSignature(constructor); } throw new IllegalArgumentException("Unknown member: " + member); }
Field field = fieldSignature.getField(); if (field == null) field = SecurityActions.findField(clazz, signature.getName());
/** * Get a signature for a member info * * @param member the member * @return the result */ public static Signature getSignature(MemberInfo member) { if (member == null) throw new IllegalArgumentException("Null member"); if (member instanceof MethodInfo) { MethodInfo method = MethodInfo.class.cast(member); return new MethodSignature(method); } if (member instanceof FieldInfo) { FieldInfo field = FieldInfo.class.cast(member); return new FieldSignature(field); } if (member instanceof ConstructorInfo) { ConstructorInfo constructor = ConstructorInfo.class.cast(member); return new ConstructorSignature(constructor); } throw new IllegalArgumentException("Unknown member: " + member); }
/** * Add annotations for a field * * @param repository the repository * @param classloader the classloader * @param component the mutable metadata * @param context the context * @param fieldInfo the field info * @param annotations the annotations * @param add true for add, false for remove */ private void updateAnnotations(MutableMetaDataRepository repository, ClassLoader classloader, ComponentMutableMetaData component, KernelControllerContext context, FieldInfo fieldInfo, Set<AnnotationMetaData> annotations, boolean add) { if (annotations == null || annotations.isEmpty()) return; Signature signature = new FieldSignature(fieldInfo); ScopeKey scope = new ScopeKey(CommonLevels.JOINPOINT_OVERRIDE, fieldInfo.getName()); updateAnnotations(repository, classloader, component, context, signature, scope, annotations, add); }
if (hasJoinPointAnnotation(m.getDeclaringClass(), new FieldSignature(m), annotation))
/** * Decorates the fields * * @return the fields */ private Set<AnnotatedField<? super X>> initialiseAnnotatedFields() { Set<AnnotatedField<? super X>> fields = new HashSet<AnnotatedField<? super X>>(); for (AnnotatedField<? super X> field : getDelegate().getFields()) { MetaData fieldMetaData = getMetaData() == null ? null : getMetaData().getComponentMetaData(new FieldSignature(field.getJavaMember())); fields.add(new MDRAnnotatedField<X>(this, field, fieldMetaData)); } return fields; }
return new FieldSignature(member.getName());
return new FieldSignature(member.getName());
public <T extends Annotation> T resolveTypedAnnotation(Field f, Class<T> annotation) { T value = null; if (metadata != null) { FieldSignature signature = new FieldSignature(f); MetaData fieldMD = metadata.getComponentMetaData(signature); if (fieldMD != null) { value = fieldMD.getAnnotation(annotation); if (value != null) return value; } } //MUST call this instead of AR.resolveTypedClassAnnotation since EJB3 overrides AR.resolveClassAnnotation value = (T)annotations.resolveAnnotation(f, annotation); if (value == null && metadata == null) { value = AnnotationElement.getVisibleAnnotation(f, annotation); } return value; }
if (field != null) Signature sis = new FieldSignature(field); MetaData cmdr = retrieval.getComponentMetaData(sis); if (cmdr != null)