【发布时间】:2012-11-14 23:01:01
【问题描述】:
我正在与一个由 10 多名 Java 开发人员组成的团队合作开发一个 Web 应用程序。这是一个大项目(2 岁),从昨晚开始我们就遇到了一个问题:一些 bean(2 个 bean)在使用时会导致 NullPointerException(好像 IoC 不再工作一样)。
问题是,两天前一切正常,这两天我已经阅读了每一个提交,但 Spring Configuration 文件没有任何变化。
我知道有时如果你通过 Spring 动态注入一个 bean 并通过新的操作数实例化它,它会给出一个 NPE,但在项目中没有任何迹象。
所有开发人员在他们的本地机器上都没有这个问题,但是在 CI 服务器上,它可以正常工作一段时间然后停止,直到我们重新启动机器(而不是服务器)。有谁知道如何处理这个问题?服务器启动根本不显示任何错误。
更新:
服务器上下文初始化绝对没有显示错误(也没有警告),并以成功消息结束。
我检查了对 bean setter 的所有调用:没有使用。
bean 是通过配置文件获取的,没有 @Autowired。
我实际上已经在整个项目中搜索了新操作数,花了我将近两个小时来检查每个,但是没有用新操作数实例化 bean。
【问题讨论】:
-
某处代码将您的成员设置为空(“它可以正常工作一段时间然后停止。”)。你确定你没有在代码中的任何地方调用 setX() 吗?
-
你能补充一点细节吗?如果您可以在 spring 上打开调试日志记录,则堆栈跟踪代码 sn-ps 或日志
-
增加日志级别并向我们展示一些相关的日志和spring配置文件。检查循环依赖。
-
如果这些 bean 是单例的,那么在上下文初始化期间 spring 将快速失败。也许它与服务器状态有关。这些豆子是怎么捡起来的? is 是上下文/组件扫描,是 bean 配置文件。无论如何,我认为 duffymo 和 TJ 是正确的 - 可能有 10 多个开发人员之一做类似 setSomeBeanReference(new ...) 的事情你能知道这些 bean 是如何自动装配的吗?
标签: java spring dependencies inversion-of-control code-injection