1. Annotations personnalisées et printemps Java
Les annotations Java, en tant que type d'informations sur les métadonnées des éléments du programme (classes, variables membres, méthodes membres, etc.), n'ont aucun impact sur l'exécution du programme lui-même. Grâce à des annotations personnalisées, vous pouvez ajouter des déclarations spéciales aux éléments du programme.
En tant que plate-forme pour créer des applications au niveau de l'entreprise, Spring offre des fonctions riches. La combinaison des annotations personnalisées de Java avec le printemps pour implémenter l'analyse et le traitement des annotations dans des scénarios spécifiques peut réduire le degré d'applications de couplage et améliorer l'évolutivité du programme.
2. Scénarios d'application
Ce qui suit résume plusieurs scénarios d'application et n'explique que l'idée générale (PS: tous les scénarios n'ont pas été pratiqués dans le projet)
2.1 Connexion, blocage d'autorisation
Dans les projets Web, l'interception de connexion et l'interception d'autorisation sont une fonction clichée. Grâce à des annotations de connexion personnalisées ou à des annotations d'autorisation, analysez les annotations dans l'intercepteur personnalisé pour réaliser les fonctions de connexion et d'interception d'autorisation.
Cette méthode d'utilisation a une configuration simple, une flexibilité élevée et un couplage de code faible.
2.2 Gestion des tâches de synchronisation
Pendant le processus de construction du système, il y aura diverses exigences de tâches chronométrées, et la gestion centralisée des tâches chronométrées peut maintenir plus efficacement le fonctionnement du système.
Les annotations de tâche de synchronisation personnalisées dans le chapitre Repetingannotations du document officiel d'annotation Java peuvent réaliser la déclaration de tâches de synchronisation des méthodes commerciales. Combiné avec le conteneur de Spring Postprocessor BeanPostProcessor (PS: Spring Container Postprocessor sera discuté dans le prochain article), analysant les annotations personnalisées. Les informations d'annotation analysées sont ensuite utilisées pour construire la tâche de synchronisation d'exécution à l'aide de Quartzapi, qui peut compléter la création d'exécution et la gestion centralisée de la tâche de synchronisation.
Cette méthode peut éviter de définir la configuration des tâches de synchronisation quartz et d'améliorer l'évolutivité du système.
2.3 Spécification de la source de données pour le routage de la source multi-données
AbstractroutingDatasource fourni par Spring implémente le routage dynamique de plusieurs sources de données et peut être appliqué dans une architecture de séparation maître-esclave. En spécifiant différentes sources de données pour différentes méthodes, le routage dynamique des sources de données est réalisé (par exemple: les méthodes de lecture proviennent de la source de données de la base de données esclaves, les méthodes d'écriture proviennent de la source de données de base de données principale). Comment identifier le type de source de données correspondant à différentes méthodes peut être implémenté à l'aide d'annotations personnalisées. La fonction de routage de la source de données est réalisée en analysant le type de source de données correspondant déclaré sur la méthode.
Cette méthode évite l'analyse de correspondance des méthodes (par exemple: en commençant par sélectionner, en commençant par la mise à jour, etc.), et la déclaration est plus flexible.
Annotations personnalisées
Jetons un coup d'œil à l'exemple le plus simple. Dans le processus d'utilisation des applications SpringWeb, nous utilisons inévitablement @Controller, @Service, @Repository et d'autres annotations pour définir les javabeans. Alors, comment pouvez-vous définir une annotation vous-même? Le ressort peut se charger automatiquement. Il y a donc le premier exemple.
@Target ({elementType.Type}) @ rétention (retentionPolicy.runtime) @ documenté @ composantpublic @Interface MyComponent {String Value () Default "";} @ConfigurationPublic Class ComponentAnnotationTest {public static void main (String [] args) {annotationConfigApplicationContext AnnotationConfigApplicationContext = new AnnotationConfigApplicationContext (); AnnotationConfigApplicationContext.Register (ComponentAnNotationTest.Class); annotationConfigApplicationContext.refresh (); InjectClass injectClass = annotationConfigApplicationContext.getBean (injectClass.class); injectClass.print (); } @MyComponent public static class injectClass {public void print () {System.out.println ("Hello World"); }}}Exécutez cet exemple et vous constaterez que la classe annotée par @MyComponent est également chargée par le printemps et peut être utilisée normalement comme javabean ordinaire. En vérifiant le code source de Spring, vous constaterez que Spring utilise ClassPathScanningCanDateComponentProvider pour scanner le package. Cette classe a une telle annotation.
Un fournisseur de composants qui scanne le chemin de classe à partir d'un package de base. Il s'applique ensuite à l'exclusion et à inclure des filtres aux classes résultantes pour trouver des candidats.
La méthode RegisterDefaultFilters de cette classe a plusieurs lignes de code
protégé void registerDefaultFilters () {this.includFilters.add (new AnnotationTypeFilter (composant.class)); Classloadher cl = classPathScanningCandidateComponentProvider.class.getClassLoader (); essayez {this.includefilters.add (new AnnotationTypeFilter (((classe <? étend l'annotation>) classutils.forname ("javax.annotation.managedbean", cl)), false)); Logger.debug ("JSR-250 'Javax.annotation.ManagedBean' Found and Prisedated for Component Scanning"); } catch (classNotFoundException ex) {// JSR-250 1.1 API (comme inclus dans Java EE 6) non disponible - sautez simplement. } try {this.includefilters.add (new AnnotationTypeFilter (((classe <? étend l'annotation>) classutils.forname ("javax.inject.named", cl)), false)); Logger.debug ("JSR-330 'javax.inject.named' Annotation trouvée et prise en charge pour la numérisation des composants"); } catch (classNotFoundException ex) {// API JSR-330 non disponible - sautez simplement. }}Ici, vous constaterez que l'utilisation par Spring des informations de classe de numérisation ne jugera que la classe annotée par @Component, de sorte que toute annotation personnalisée peut être scannée par le printemps et injectée dans le conteneur tant qu'elle est équipée de @component (bien sûr, il doit y avoir une valeur de chaîne () par défaut ""; Méthode, car les haricots de Spring sont marqués avec un nom de beanname).
Résumer
Ce qui précède concerne la brève discussion de cet article sur l'application des annotations personnalisées au printemps, j'espère qu'elle sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!