Comment assurer les annotations de l'ordre d'exécution de java?
j'ai 2 custom annotations, mais on devrait toujours exécuté avant les autres. Comment dois-je faire pour cela? Est-il une sorte de commander ou de le faire avec d'autres définitions de méthode?
ce qui se passe ? fonctionne de façon aléatoire ?
Ou dans l'alphabet?
Il semble que des annotations, des descriptions dans
Que voulez-vous dire à propos de l'ordre d'exécution? La manière dont les annotations sont traitées dépend du code qui les utilise. De quoi êtes-vous en annotant? Les annotations que vous utilisez?
Si elles sont faites sur les annotations, code personnalisé probablement des processus, donc, vous pouvez facilement l'ordre dans le dit code personnalisé de la vôtre.
Ou dans l'alphabet?
Il semble que des annotations, des descriptions dans
Class
sont stockés dans HashMap
. Ce n'est pas garantie d'ordre d'origine, bien sûr. Donc, je pense, il n'existe aucun moyen.Que voulez-vous dire à propos de l'ordre d'exécution? La manière dont les annotations sont traitées dépend du code qui les utilise. De quoi êtes-vous en annotant? Les annotations que vous utilisez?
Si elles sont faites sur les annotations, code personnalisé probablement des processus, donc, vous pouvez facilement l'ordre dans le dit code personnalisé de la vôtre.
OriginalL'auteur user358448 | 2013-01-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vous assurer que la commande de votre custom avec annotations @Afin d'annotation.
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/annotation/Order.html
Exemple:
Première annotation:
Deuxième annotation:
:
Dans cet exemple, CustomAnnotationInterceptor exécuté en premier.
J'ai ajouté un exemple.
OriginalL'auteur Roman
Je sais que c'est une très vieille question, mais je voulais juste pour documenter mes conclusions. Quelqu'un peut s'il vous plaît confirmer si ils sont corrects?
Il est déjà mentionné dans cette page qui Ressort de la documentation dit que l'exécution des annotations n'est pas défini, à moins que @Afin d'annotation est utilisée.
J'ai essayé de renommer l'Aspect des classes, et testé de nombreuses fois, et a constaté que l'Aspect classes sont exécutés dans l'ordre alphabétique de leurs noms et de constater que le résultat est cohérent.
Ci-dessous mon code d'exemple:
Quand j'ai essayé d'exécuter advisedMethod(), voici les logs que j'ai reçu:
J'ai changé d'annotation déclaration de la séquence:
Suivantes sont les journaux:
J'ai renommé l'Annotation @A @C, voici les logs:
Mais, quand j'ai essayé de renommer Aspect classe A_Aspect à C_Aspect, voici les logs:
Comme je l'ai dit, je veux quelqu'un pour confirmer ce que je ne pouvais pas trouver toute la documentation de cette
OriginalL'auteur Atul Kumbhar
De http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering
Spring AOP suit les mêmes règles de priorité comme AspectJ pour déterminer l'ordre des conseils de l'exécution. La priorité la plus élevée des conseils s'exécute en premier "sur le chemin" (donc deux morceaux avant de les conseils, l'un avec la plus haute priorité s'exécute en premier). "Sur le chemin" à partir d'un point de rejoindre, la priorité la plus élevée des conseils s'exécute en dernier (donc deux pièces d'après les conseils, l'un avec la priorité la plus élevée sera exécuté à la seconde).
Quand deux morceaux de conseils définies dans les différents aspects à la fois besoin de courir à la même rejoindre le point, sauf spécification contraire, l'ordre d'exécution n'est pas défini. Vous pouvez contrôler l'ordre d'exécution en précisant la priorité. Cela se fait dans les conditions normales de Printemps façon, soit par la mise en œuvre de l'org.springframework.de base.Commandé interface dans l'aspect de la classe ou de l'annotation avec l'Ordre d'annotation. Étant donné deux aspects, l'aspect de retourner la valeur la plus faible de Commandé.getValue() (ou l'annotation de la valeur) a la priorité plus élevée.
Quand deux morceaux de conseils définies dans le même aspect à la fois besoin de courir à la même rejoindre le point, l'ordre n'est pas défini (car il n'y a aucun moyen de récupérer l'ordre de déclaration, par la réflexion, pour javac-classes compilées). Envisager l'effondrement de tels conseils dans l'un des conseils de méthode pour rejoindre le point dans chaque aspect de la classe, ou de refactoriser les pièces de conseils en aspect distinct des classes - qui peut être commandé auprès de l'aspect de niveau.
OriginalL'auteur Emerson Farrugia
Vous pouvez le faire en utilisant EJB intercepteurs.
vous pouvez simplement ajouter des intercepteurs via @Intercepteurs( { MyInterceptor.class } ) et ensuite d'ajouter pour la deuxième @MyInterceptorConfiguration(valeur=quelque chose).
Comme bkail dit dans leur réponse ici:
Cela peut vous aider, docs.oracle.com/javase/1.5.0/docs/guide/apt/index.html le code approprié pour l'annotation.
je ne le comprends pas.
stackoverflow.com/questions/1460001/... Essayez de cette façon
Lorsque vous copiez les mots des autres, vous devez toujours fournir le crédit approprié. J'ai édité le ci-dessus pour vous montrer comment c'est fait.
OriginalL'auteur Amol
Caisse https://stackoverflow.com/a/30222541/810109: Au moins dans Java 8, vous pouvez récupérer les annotations dans un ordre garanti, de sorte que vous devez les déclarer dans le bon ordre.
OriginalL'auteur mkurz
Oui je pense que l'Annotation elle-même annotation pour que, comme @Abord, et @Seconde ... de sorte que vous pouvez essayer qui
OriginalL'auteur Prafulla
Première annotation:
Deuxième annotation:
Exemple d'utilisation:
Résultat/sortie:
OriginalL'auteur mdolanci