Approche # 1:
Une façon est de créer un aspect, avec une expression point de coupe qui correspond à une méthode ayant cette annotation.
Votre aspect sera alors:
- Lire la valeur de la propriété dans l'annotation
- Recherchez la valeur nécessaire une injecter dans la classe.
AOP Kickstart
Voici un guide pour commencer avec AOP au printemps
http://www.tutorialspoint.com/spring/aop_with_spring.htm
Joinpoint correspondant
est ici une référence qui décrit comment créer une jointure point correspondant sur les annotations: http://eclipse.org/aspectj/doc/next/adk15notebook/annotations-pointcuts-and-advice.html
Approche # 2:
Une autre façon est d'utiliser un BeanFactoryPostProcessor - c'est essentiellement comment fonctionne PropertyPlaceholderConfigurer.
- Il examinera vos définitions de beans et récupérera la classe sous-jacente.
- Il vérifiera ensuite l'annotation dans la classe, en utilisant la réflexion.
- Il mettra à jour la définition du bean pour inclure l'injection de la propriété selon la valeur de l'annotation.
. . En fait, je pense que l'approche # 2 ressemble plus à ce que vous voulez - tout le traitement se passe au démarrage. . . (En fait, vous modifiez les recettes de haricots avant même le démarrage). . alors que si vous utilisiez AOP, vous intercepteriez des invocations de méthodes, ce qui pourrait être trop tard pour vous?
Gestionnaire Namespace
Si vous voulez, vous pouvez même créer votre propre gestionnaire d'espace de noms Spring pour allumer votre post-processeur de manière laconique.Par exemple:
<myApp:injectFromDb />
comme alternative à:
<bean class="MyDatabaseLookupProcessorImpl etc, etc. />
Mise à jour: Approche # 3
Au printemps 3.1 il y a aussi le PropertySourcesPlaceholderConfigurer, qui fournira plus de la plomberie pour vous , donc vous pouvez réaliser ceci avec moins de code.
Je suppose que C'est une autre option: Utilisez Spring 3.1 PropertySourcesPlaceholderConfigurer et ajoutez une nouvelle PropertySource pour les propriétés de ma base de données: http://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/ – DarVar