如何在Spring 4中从Bean定义创建对象?

时间:2015-06-22 10:36:05

标签: java spring spring-bean

我有一个返回类型为'AbstractBeanDefinition'的方法,该方法应该设置所有必需的属性并返回它。

    public AbstractBeanDefinition constructJMSMessage() {

    BeanDefinitionBuilder theMessagingService =  BeanDefinitionBuilder.rootBeanDefinition(MessagingService.class);
    theMessagingService.addPropertyValue(..);
    theMessagingService.addPropertyValue(..);
    theMessagingService.addPropertyValue(..);

    return theMessagingService.getBeanDefinition()

}

在调用者位置,我想根据此方法返回的bean定义创建一个对象。我怎么能这样做?

   public void ConstructIt()
  {
     MessagingService obj = constructJMSMessage();
  }

1 个答案:

答案 0 :(得分:2)

您需要先将BeanDefinition注册到BeanDefinitionRegistry(通常是DefaultListableBeanFactory实例),然后将其用作普通bean。

FileSystemXmlApplicationContext c = new FileSystemXmlApplicationContext();
c.refresh();

BeanDefinitionRegistry bdr = (BeanDefinitionRegistry) c.getBeanFactory();
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.genericBeanDefinition(String.class)
        .addConstructorArgValue("test");
BeanDefinition bd = bdb.getBeanDefinition();
bdr.registerBeanDefinition("testBean", bd);

String tb = c.getBean("testBean", String.class);