【问题标题】:dynamically declare beans at runtime in SpringSpring在运行时动态声明bean
【发布时间】:2013-02-26 01:23:38
【问题描述】:

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

【问题讨论】:

    标签: spring


    【解决方案1】:

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

    关于你的第一个问题,你可以通过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 的明确方法,但最常见的方法是:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多