Cambia fagioli Post L'ordine di elaborazione senza configurazione esplicita
-
11-12-2019 - |
Domanda
Sono consapevole del fatto che l'ordine del carico di fagioli è implicitamente determinato dalle dipendenze e dalle dipendenze transitive.
Immagina di avere un insieme di fagioli annotati che ti forniscono una sorta di metadati che si desidera applicare a un altro set di contagiudi. Quindi, solo dopo aver raccolto tutti i metadati da n fagioli, solo dopo che è possibile postare elaborare i costi di conqueaggio. Tipicamente usi org.springframework.beans.factory.config.BeanPostProcessor
per questo tipo di roba. Come affrontare l'ordine però? Penso che anche la configurazione di depends-on
non prenda esplicitamente la precedenza sulle dipendenze da caricare l'ordine, giusto?
C'è un'interfaccia org.springframework.core.Ordered
che determina solo l'ordine dei materiali di beanpostprocessori applicati, ma non l'ordine dei fagioli.
Potrei usare org.springframework.beans.factory.config.BeanFactoryPostProcessor
ma la definizione del bean non ha informazioni sufficienti prima dell'istanza di fagioli. Ad esempio beanDef.getBeanClass()
restituisce il nome della classe Bean, ecc.
è che qualsiasi altro modo potresti pensare a come fare ciò che voglio?
Soluzione 2
L'ho risolto utilizzando org.springframework.beans.factory.config.BeanFactoryPostProcessor
e caricamento delle classi di ClassLoader in modo che io possa usare la riflessione per prendere le annotazioni.Penso che non dovrebbe infrangere nulla perché in seguito quando la primavera è in primavera, la classifica delle classi di fagioli controlla se la classe è già caricata e in caso contrario non lo carica.Altrimenti lo carica.
Altri suggerimenti
Puoi:
a) Iniettare tutti i tuoi fagioli metadati nel tuo BeanPostProcessor
.
b) Rendi il tuo postCenessore attivamente recuperare tutti i fagioli metadati dal contesto dell'applicazione all'avvio.
Ogni modo ha pro e contro, ma l'effetto è lo stesso: dopo la postcuzione BeanPostProcessor
, ogni fagiolo di metadati verrà già postCostruito.