Approccio # 1:
Un modo è quello di creare un Aspetto, con un'espressione taglio a punto che corrisponde a qualsiasi metodo avente questa annotazione.
tuo aspetto sarà quindi:
- Leggere il valore della proprietà nella annotazione
- Cercare il valore richiesto un iniettarlo nella classe.
AOP Kickstart
Ecco una guida per iniziare a lavorare con AOP nella primavera
http://www.tutorialspoint.com/spring/aop_with_spring.htm
Joinpoint corrispondenza
Ecco un riferimento che descrive come creare un join-punto che corrisponde a annotazioni: http://eclipse.org/aspectj/doc/next/adk15notebook/annotations-pointcuts-and-advice.html
Approccio # 2:
Un altro modo è quello di utilizzare un BeanFactoryPostProcessor - questo è essenzialmente come funziona una PropertyPlaceholderConfigurer.
- Analizzerà le definizioni dei bean e recupererà la classe sottostante.
- Verificherà quindi l'annotazione nella classe, utilizzando la riflessione.
- Aggiornare la definizione del bean per includere l'iniezione della proprietà secondo il valore nell'annotazione.
. . in realtà penso che l'approccio # 2 assomigli più a quello che vuoi - tutta l'elaborazione avviene sullo "start-up". . . (In realtà modificando le ricette dei fagioli prima dell'avvio). . mentre se hai utilizzato AOP, intercetti le invocazioni del metodo, che potrebbero essere troppo tardi per te?
Namespace Handler
Se si volesse si potrebbe anche creare il proprio Primavera gestore namespace per accendere il post processore in maniera concisa.Ad esempio:
<myApp:injectFromDb />
come alternativa a:
<bean class="MyDatabaseLookupProcessorImpl etc, etc. />
Aggiornamento: Approccio # 3
partire dalla primavera 3.1 c'è anche la PropertySourcesPlaceholderConfigurer, che fornirà la maggior parte delle tubature per voi , così puoi ottenerlo con meno codice.
fonte
2013-10-11 11:05:23
immagino questa è un'altra opzione: usa Spring 3.1 PropertySourcesPlaceholderConfigurer e aggiungi un nuovo PropertySource per le proprietà del mio database: http://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/ – DarVar