我想在运行时使用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
缺少什么或错了什么?
答案 0 :(得分:0)
感谢cheffe对another 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只是在这种情况下,但在现有的上下文中是未知的。