Estoy buscando un punto de corte que coincida con las ejecuciones de métodos en clases que subclasan una clase con una anotación específica. La excelente AspectJ cheat sheet me ayudó a crear el siguiente punto de corte:@AspectJ pointcut para subclases de una clase con una anotación
within(@my.own.annotations.AnnotationToMatch *) && execution(* *(..))
Esto coincide con todas las llamadas a métodos de una clase A que lleva el @AnnotationToMatch, pero no de un método de la clase B que se extiende A. ¿Cómo se puede hacer coincidir las dos cosas?
Gracias! Para el beneficio de otros: si usa el estilo de anotación, declarar que los padres se traducen a @DeclareParents ("(@ MyAnnotation *)") private TrackedParentMarker emptyMixinForClassesWithMyAnnotation; –
Eso funciona bien para superclases, pero no tan bien para las interfaces. Es decir. en código como 'MiInterfaz o = new MyClass()' se ve loke 'MyClass' se carga antes de la interfaz y la condición no coincide. Agregar un 'println (MyInterface.class)' antes de la instrucción soluciona el problema, pero no es un requisito factible para los aspectos de la biblioteca. ¿Algunas ideas? – ddimitrov