2008-12-17 74 views
2

我们有一个(非Web应用程序)Spring应用程序,它在我们的CruiseControl持续集成Linux框上运行测试时抛出NoSuchBeanDefinitionException异常。该测试在Eclipse中的Windows上运行良好。如何调试Spring NoSuchBeanDefinitionException

的抛出异常上的getBean()方法:

ApplicationContext context = new ClassPathXmlApplicationContext(CONTEXT_FILE); 

MyBean bean = (MyBean)context.getBean("myBean"); 

上下文文件相当大且复杂。上下文文件位于类路径中,Spring正在查找它。我更喜欢它,如果Spring在尝试加载上下文文件并构建依赖关系时会抛出异常,以便我们可以从哪里开始。有没有办法强制Spring在创建上下文时抛出异常?

回答

3

已解决。 CONTEXT_FILE中的“myBean”的实例化发生在依赖于它的另一个bean之后。这确实不应该是一个问题,但我怀疑Linux机器上的解析器必须更严格。无论如何,改变定义的顺序使它可以在Windows和Linux上运行。

+0

好的,这也是我的例外背后的原因。 Spring社区必须研究它。 – 2014-11-26 15:44:52

2

您确定在CONTEXT_FILE中有一个名为“myBean”的bean吗?你使用多个上下文文件吗?你有没有发现Spring的日志记录来验证CONTEXT_FILE是否正确加载,而且,Spring从类路径加载的文件是你认为应该加载的文件?

我认为你可能在为你的问题寻找错误的解决方案 - 我从来没有见过Spring抛出NoSuchBeanDefinitionException,除非你要求的bean没有在上下文中定义,就这么简单。

1

我有同样的问题。事实证明,这是一个微妙的类路径问题。 特别是 - 我在linux上建立了classpath,这样我的配置目录包含我的build.xml文件,它出现在我的x-jar(外部jar)目录之后 - 还有一些其他beans.xml从我的x-jar中拾取,正如日志消息所说的,不包含所需的bean。如果beans.xml文件的完整路径已被Spring错误消息记录下来,它会有所帮助。

相关问题