Ho un bean che analizza le classi annotate con una particolare annotazione (una specifica di dominio). Voglio assicurarmi che tutti i fagioli annotati con @MyDomainAnnotation
sono inizializzati e istanziati prima del bean che esegue la scansione dei bean con annotati @MyDomainAnnotation
.
C'è un modo per definire una dipendenza come questa fa parte di un framework e quindi le nuove classi potrebbero essere "collegate". Fondamentalmente non conosco i nomi delle classi in anticipo.
risposte:
1 per risposta № 1Strumento ApplicationListener<ContextRefreshedEvent>
sul tuo fagiolo di scansione.
public class MyScanningBean implements ApplicationListener<ContextRefreshedEvent> {
private boolean scanned = false;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
/* Published when the ApplicationContext is initialized or refreshed,
* for example, using the refresh() method on the
* ConfigurableApplicationContext interface. "Initialized" here means
* that all beans are loaded, post-processor beans are detected and
* activated, singletons are pre-instantiated, and the
* ApplicationContext object is ready for use. */
if (!scanned) {
// scan for beans
scanned = true;
}
}
}
0 per risposta № 2
Sebbene io abbia optato per l'implementazioneApplicationListener come @Tichodroma mi ha suggerito di trovare anche un'altra soluzione che a volte potrebbe essere ciò che si desidera se si ha bisogno di un'inizializzazione del controllo più fine sull'ordine dei fagioli ". SmartLifecycle è possibile fornire valori di fase che determineranno la sequenza (in ordine ascendente) in cui i bean vengono istanziati (cioè i bean con i valori di fase più piccoli verranno inizializzati per primi).
Ma comunque penso che la risposta di cui sopra sia più elegante e pulita nel mio caso.