Je suis en train de faire un conseil autour d'une méthode qui étend une interface qui ressemble à ceci:Conseils autour de la méthode mise en œuvre d'une interface étendue
public interface StructureService {
void delete(FileEntry entry);
}
public interface FileService extends StructureService {
void dummy();
}
Les classes qui mettent en œuvre ces regards comme ce qui suit:
public class DbStructureService implements StructureService {
public void delete(FileEntry entry) {
}
}
public class DbFileService extends DbStructureService implements FileService {
public void dummy() {
}
}
J'essaie de faire correspondre la méthode delete, mais seulement pour les classes implémentant FileService.
J'ai défini l'aspect suivant:
public aspect FileServiceEventDispatcherAspect {
pointcut isFileService() : within(org.service.FileService+);
pointcut delete(FileEntry entry) :
execution(void org.service.StructureService.delete(..))
&& args(entry) && isFileService();
void around(FileEntry entry) : delete(entry) {
proceed(entry);
}
}
Le problème est que tant que j'ai pointcut de isFileService a permis à cette correspondra pas de cours; même si il ya beaucoup de méthodes qui devraient correspondre à cela
Si je remplace le dans within(org.service.FileService+)
à within(org.service.StructureService+)
il fonctionne également bien.
J'ai essayé d'expérimenter avec ceci() et ainsi de suite mais sans succès. Comment est-ce que je fais ça à aspectj?
EDIT: Mise à jour de l'apparence des classes qui implémente les interfaces. Je pense que ce scénario peut être difficile à conseiller puisqu'il n'y a pas de méthode surchargée dans DbFileService
J'utilise le temps de compilation binaire tissage si cela – jontro
Pour le code source de compilation, ce code est correct. Peut être le problème est en "binaire", bien qu'il ne devrait pas y avoir. – alehro
Oui, j'ai édité ma question. Pensez-vous que c'est un scénario qui n'est pas supporté par aspectj? – jontro