


AspectJ peut-il réaliser l'héritage d'annotations pour les interfaces et leurs méthodes ?
Oct 24, 2024 am 12:35 AMAspectJ peut-il émuler l'héritage d'annotations pour les interfaces et leurs méthodes ?
L'héritage d'annotations Java est restreint, avec des annotations définies sur les interfaces, les méthodes ou annotations non héritées de l'implémentation de classes, de méthodes de remplacement ou de classes utilisant des annotations annotées. Cette limitation s'applique à AspectJ, qui fonctionne dans le cadre des contraintes JVM.
Solution : émuler l'héritage d'annotations dans des cas spécifiques
Bien qu'une solution générale pour l'héritage d'annotation ne soit pas disponible, une solution de contournement existe pour des interfaces ou des méthodes spécifiques :
<code class="java">public aspect MarkerAnnotationInheritor { // Implementing classes inherit the marker annotation declare @type: MyInterface+ : @Marker; // Overriding 'two' method inherits the annotation declare @method : void MyInterface+.two() : @Marker; }</code>
Implémentation :
- Les ITD (définitions inter-types) ajoutent manuellement l'annotation à l'interface et implémentent/ remplacement des classes/méthodes.
- L'annotation réelle sur l'interface ou la méthode peut être supprimée.
Résultat :
Le journal de la console maintenant prints :
execution(de.scrum_master.app.Application()) execution(void de.scrum_master.app.Application.two())
Solution alternative :
L'aspect peut être intégré dans l'interface, consolidant ainsi l'implémentation en un seul endroit. Renommez le fichier en <interface>.aj pour la reconnaissance du compilateur.
<code class="java">// MyInterface.aj public interface MyInterface { void one(); void two(); public static aspect MarkerAnnotationInheritor { declare @type: MyInterface+ : @Marker; declare @method : void MyInterface+.two() : @Marker; } }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?

Comment puis-je implémenter des techniques de programmation fonctionnelle en Java?

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités

Iceberg: L'avenir des tables de Data Lake

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?
