2017-08-18 5 views
2

J'ai regardé un peu autour de moi et je n'arrive pas à comprendre certaines parties du fonctionnement de l'annotation Java. Tous les exemples que j'ai vus jusqu'à présent créent l'annotation, puis ont une méthode principale qui parcourt les classes du projet en utilisant la réflexion. Ensuite, ils vont faire des choses avec cela et faire en sorte que l'annotation fonctionne.Comprendre les annotations Java

Cependant, je n'arrive pas à comprendre comment cela fonctionne si je veux faire de mon projet d'annotation un pot que je peux inclure dans un autre projet, comme jackson, guice, hibernate, etc. Une méthode principale ne fonctionnerait pas ce cas, non?

J'ai cherché quelques tutoriels sur comment faire des annotations qui sont faites comme un pot que mon projet peut inclure, mais je n'ai encore rien trouvé. Idéalement, j'aimerais pouvoir l'utiliser dans un cadre Web tel que le printemps ou le jeu.

Répondre

2

Il existe deux principaux types d'annotation auxquels vous voulez probablement penser. Le premier type est l'annotation d'exécution. Un exemple serait @JsonIgnore dans Jackson.

class Test { 
    @JsonIgnore private int num; 
    private String str; 
} 

Lorsque l'utilisateur passe un Test dans votre code de bibliothèque à partir de leur code, vous utilisez getClass() pour inspecter les annotations et votre savoir-faire. Autrement dit, lorsque l'utilisateur fait

MyLibrary.doSomething(something) 

vous appelez something.getClass() et boucle sur les annotations quelque part à l'intérieur doSomething(). Les autres sont des annotations de temps de compilation, qui sont traitées par des processeurs d'annotation. Un exemple serait @Getter du projet Lombok:

class Test { 
    @Getter private final String name; 
} 

Le processeur d'annotation il se transforme en

class Test { 
    private final String name; 
    public String getName() { return name; } 
} 

Cela se fait lorsque l'utilisateur appelle javac (juste avant javac ne fait compilation) et votre bibliothèque JAR sur le chemin de classe. Examples