代码之家  ›  专栏  ›  技术社区  ›  Paul Croarkin

如何调试Spring NoSuchBeanDefinitionException

  •  2
  • Paul Croarkin  · 技术社区  · 16 年前

    我们有一个(非web应用程序)Spring应用程序,在CruiseControl连续集成linux设备上运行测试时抛出NoSuchBeanDefinitionException。该测试在Eclipse中的Windows上运行良好。

    ApplicationContext context = new ClassPathXmlApplicationContext(CONTEXT_FILE);
    
    MyBean bean = (MyBean)context.getBean("myBean");
    

    上下文文件相当大和复杂。上下文文件在类路径中,Spring正在查找它。我更希望Spring在尝试加载上下文文件和构建依赖项时抛出异常,这样我们就可以知道从哪里开始了。有没有办法强制Spring在创建上下文时抛出异常?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Paul Croarkin    16 年前

        2
  •  2
  •   matt b    16 年前

    您确定上下文文件中有一个名为“myBean”的bean吗?您是否使用多个上下文文件?您是否打开了Spring的日志来验证CONTEXT_文件是否正确加载,而且Spring从类路径加载的文件是否就是您认为应该加载的文件?

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

        3
  •  1
  •   alexbt    8 年前

    我也有同样的问题。事实证明,这是一个微妙的类路径问题。 具体地说,我在linux上的类路径是这样设置的:包含build.xml文件的配置目录位于我的x-jars(外部jars)目录之后,并且从我的x-jars中提取了一些其他的beans.xml,正如日志消息正确地说的,x-jars不包含所需的bean。如果beans.xml文件的完整路径已经记录了Spring错误消息,那么这会有所帮助。