【问题标题】:Spring Dependency Injection stopped workingSpring 依赖注入停止工作
【发布时间】: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


【解决方案1】:

我的猜测是有人叫“new”来创建一个bean,这意味着它不再受Spring bean工厂的控制,但不知何故它依赖于DI。如果您使用注释来连接资源,则更有可能。

您自己说过:多年来一直运行良好。春天并没有突然消失。更有可能的是,这 10 多位 Java 开发人员中的一位是新手,或者并不像他们认为的那样了解 Spring。

【讨论】:

    【解决方案2】:

    问题是由于 JavaMelody 和 Spring AOP 之间的冲突造成的。为了解决这个问题,我们不得不暂时禁用 JavaMelody,直到我们知道问题的根源。

    来自 JavaMelody 常见问题解答(更多信息)

    如果您的应用程序在一体式监控spring.xml 和AOP 或@Autowired 之间存在冲突,那么您可以使用monitoring-spring-datasource.xml 文件,而不是监控-spring.xml。该文件仅包含数据源后处理器和 SpringDataSourceFactoryBean 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2018-11-21
      • 2012-12-23
      相关资源
      最近更新 更多