So ist der Titel ziemlich einfach. Ich habe eine Handler-Klasse DynamicBeanHandler
, die BeanDefinitionRegistryPostProcessor
Schnittstelle von Feder implementiert implementiert. In dieser Klasse Hinzufügen ich mehrere SCOPE_SINGLETON
Bohnen, die Bean-Klasse als MyDynamicBean
als folgt-Wie fügt man eine Bean-Instanz zur Laufzeit im Frühjahr hinzu WebApplicationContext?
GenericBeanDefinition myBeanDefinition = new GenericBeanDefinition();
myBeanDefinition.setBeanClass(MyDynamicBean.class);
myBeanDefinition.setScope(SCOPE_SINGLETON);
myBeanDefinition.setPropertyValues(getMutableProperties(dynamicPropertyPrefix));
registry.registerBeanDefinition(dynamicBeanId, myBeanDefinition);
Verfahren eingestellt haben getMutableProperties()
ein Objekt von MutablePropertyValues
zurückgibt.
Später, ich SpringUtil.getBean(dynamicBeanId)
die erforderliche MyDynamicBean
Instanz zu holen, wo SpringUtil
Klasse ApplicationContextAware
implementiert. All das funktioniert großartig. Das Problem tritt auf, wenn ich eine dieser Instanzen entfernen und später eine neue Instanz hinzufügen möchte, in der ich die Registrierungsinstanz nicht habe. Kann mir bitte jemand helfen, einen Weg zu finden?
Im Folgenden finden Sie den Code für die Klasse SpringUtil
-
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String beanId) {
return applicationContext.getBean(beanId);
}
public static <T> T getBean(String beanId, Class<T> beanClass) {
return applicationContext.getBean(beanId, beanClass);
}
}
Warum möchten Sie das tun? Versuchen Sie, die Initialisierung zu verzögern? –
Also, ich möchte es tun, weil "MyDynamicBean" einige Eigenschaften enthält, die ich zur Laufzeit von der Datenbank programmatisch aktualisieren möchte. Bitte beachten Sie, dass ich die Bean-Instanz nach dem Initialisieren des Kontexts aktualisieren und eine neue Bean-Instanz hinzufügen möchte. – Abhishek
@Abhishek Können Sie den Code Ihres aktuellen 'SpringUtil's veröffentlichen? – developer