如何在运行时从Spring XML文件中注册bean?

时间:2017-09-08 12:09:20

标签: java xml spring

我想在运行时使用Spring上下文从文件中注册其他bean。我使用此代码跟踪了example

@Autowired
private ApplicationContext applicationContext;

private void loadBeans(String beansXml) {
    GenericApplicationContext createdContext =
            new GenericApplicationContext(applicationContext);
    XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(createdContext);
    reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);
    reader.loadBeanDefinitions(new InputSource(new StringReader(beansXml)));
    createdContext.refresh();
}

传递的XML字符串实际上是由Spring处理的,我通过提出一个关于Spring抱怨的不可解析的参考资料来验证。但是,当我试图用

获得某个bean时
@Autowired
ApplicationContext context;

public void test() {
    context.getBean("myId");
}

我得到以下异常:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myId' available

春季版:4.3

缺少什么或错了什么?

1 个答案:

答案 0 :(得分:0)

感谢cheffeanother question/answer所链接的评论,我已经找到了以下解决方案:

@Autowired
GenericApplicationContext context;

private void loadBeans(String beansXml) {
    XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(context);
    xmlReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);
    xmlReader.loadBeanDefinitions(new InputSource(new StringReader(beansXml)));
}

问题似乎是新GenericApplicationContext的创建。看起来bean只是在这种情况下,但在现有的上下文中是未知的。