Pessoal tudo bem !?
Gostaria de saber se é possível interceptar a invocação dos mutators no VRaptor sem apelar para AOP. Eu poderia fazer isso utilizando CGlib mas para isso eu preciso alterar o funcionamento do VRaptor para que ele utilize um construtor específico dos objetos do Modelo.
Abaixo o código que com AspectJ que faz o que eu quero (mas infelizmente depende do aspectj
)
@Aspect
public class DirtyWatcherAspect {
public static class BaseObjectImpl implements InternalMonjoObject {
private Set<String> dirtFields = new HashSet<String>();
public Set<String> getDirtFields() {
return dirtFields;
}
public void addDirtField(String fieldName) {
dirtFields.add(fieldName);
}
}
@DeclareMixin("(@org.monjo.core.annotations.Entity *)")
public static InternalMonjoObject createMoodyImplementation() {
return new BaseObjectImpl();
}
@Before("call(void (@org.monjo.core.annotations.Entity *).set*(*))")
public void listOperation(JoinPoint joinPoint) {
InternalMonjoObject entity = (InternalMonjoObject) joinPoint.getTarget();
entity.addDirtField(joinPoint.getSignature().getName());
}
}
[]'s
Rodrigo
