【问题标题】:How to Debug Spring NoSuchBeanDefinitionException如何调试 Spring NoSuchBeanDefinitionException
【发布时间】:2008-12-17 19:04:58
【问题描述】:

我们有一个(非 Web 应用程序)Spring 应用程序,在 CruiseControl 持续集成 Linux 机器上运行测试时会引发 NoSuchBeanDefinitionException。测试在 Eclipse 中的 Windows 上运行良好。

getBean()方法抛出异常:

ApplicationContext context = new ClassPathXmlApplicationContext(CONTEXT_FILE);

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

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

【问题讨论】:

    标签: java spring testing


    【解决方案1】:

    解决了。 CONTEXT_FILE 中“myBean”的实例化发生在另一个依赖它的 bean 之后。这确实不应该是一个问题,但我怀疑 Linux 机器上的解析器必须更严格。不管怎样,改变定义的顺序使它在 Windows 和 Linux 上都可以工作。

    【讨论】:

    • 好的,这也是我异常的原因。 Spring 社区必须研究一下。
    【解决方案2】:

    您确定在 CONTEXT_FILE 中有一个名为“myBean”的 bean 吗?您是否使用了多个上下文文件?您是否打开了 Spring 的日志记录以验证 CONTEXT_FILE 是否已正确加载,此外,Spring 从类路径加载的文件是您认为应该加载的确切文件?

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-14
        • 2016-10-15
        • 2016-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        相关资源
        最近更新 更多