A causa di un'architettura plug-in, sto cercando di aggiungere un bean a livello di codice alla mia webapp. Ho creato un bean Spring tramite l'annotazione @Component
e sto implementando l'interfaccia ApplicationContextAware
.Aggiungi bean a livello di codice per Spring Web App Contesto
mia funzione di override si presenta così:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
Fondamentalmente, io non riesco a capire come aggiungere un fagiolo per l'oggetto applicationContext dato a setApplicationContext. Qualcuno può dirmi come sto andando in questo modo sbagliato?
Ok, questo è ciò che ho finito con la soluzione:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
grazie. Immagino che la parte più difficile sia sapere cosa cercare. – user146714
Si prega di fare attenzione a quanto indicato in [JavaDoc] (http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/beans/factory/config/BeanPostProcessor.html): 'Un BeanFactoryPostProcessor può interagire con e modificare le definizioni di bean, ma mai istanze bean. Ciò potrebbe causare un'anticipazione dei fagioli prematura, violando il contenitore e causando effetti collaterali indesiderati. Se è richiesta l'interazione dell'istanza del bean, prendere in considerazione l'implementazione di BeanPostProcessor. – dgiffone
Cosa fare con 'BeanDefinitionRegistryPostProcessor'? Supponiamo che abbia scritto questa lezione. Cosa succederà? Come si attiva? – Dims