在Spring的运行时动态声明bean

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

回答:

关于第一个问题,你可以在运行时通过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 的全部内容, 来源链接: utcz.com/qa/421710.html

回到顶部