我有一个返回类型为'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();
  }

最佳答案

您首先需要向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);

07-26 04:55