【发布时间】:2017-08-20 10:55:17
【问题描述】:
所以,标题很简单。我有一个处理程序类DynamicBeanHandler,它实现了spring 提供的BeanDefinitionRegistryPostProcessor 接口。在这个类中,我添加了多个 SCOPE_SINGLETON bean,它们的 bean 类设置为 MyDynamicBean,如下所示-
GenericBeanDefinition myBeanDefinition = new GenericBeanDefinition();
myBeanDefinition.setBeanClass(MyDynamicBean.class);
myBeanDefinition.setScope(SCOPE_SINGLETON);
myBeanDefinition.setPropertyValues(getMutableProperties(dynamicPropertyPrefix));
registry.registerBeanDefinition(dynamicBeanId, myBeanDefinition);
方法getMutableProperties()返回一个MutablePropertyValues的对象。
稍后,我使用SpringUtil.getBean(dynamicBeanId) 获取所需的MyDynamicBean 实例,其中SpringUtil 类实现ApplicationContextAware。这一切都很好。当我想删除其中一个实例并稍后在我没有注册表实例的地方添加一个新实例时,问题就出现了。谁能帮我想办法做到这一点?
下面是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);
}
}
【问题讨论】:
-
您为什么要这样做?您是否要延迟初始化?
-
所以,我想这样做,因为
MyDynamicBean包含一些我想在运行时以编程方式从数据库更新的属性。请注意,我想在上下文初始化后更新 bean 实例并添加一个新的 bean 实例。 -
@Abhishek 你能发布你当前
SpringUtil的代码吗? -
@javaguy - 更新了代码。请检查。
标签: java spring spring-mvc