在Spring中运行时动态声明bean

时间:2013-03-10 23:12:13

标签: spring

我想知道以下是否可行。出于测试目的,我希望在应用程序上下文中为不同的测试声明不同的模拟类。这些是使用Jersey REST客户端的验收测试。有没有办法在运行时动态声明bean? Spring是否有一个API允许在加载上下文后更改应用程序上下文?

1 个答案:

答案 0 :(得分:23)

在应用程序上下文中使用不同bean的常用方法是使用配置文件。您可以在以下春季来源帖子中阅读有关配置文件的信息:

关于第一个问题,您可以通过BeanDefinitionRegistry.registerBeanDefinition()方法在运行时声明bean,例如:

  BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(SomeClass.class);
  builder.addPropertyReference("propertyName", "someBean");  // add dependency to other bean
  builder.addPropertyValue("propertyName", someValue);      // set property value
  DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getBeanFactory();
  factory.registerBeanDefinition("beanName", builder.getBeanDefinition());

也可以使用

注册单个bean实例(已配置)
context.getBeanFactory().registerSingleton(beanName, singletonObject)

最后,在刷新上下文后,Spring没有提供更改bean的明确方法,但最常见的方法是: