【问题标题】:STS reports error in bean config for java.sql.Date propertySTS 在 java.sql.Date 属性的 bean 配置中报告错误
【发布时间】:2014-08-13 21:20:11
【问题描述】:

我有一个带有如下属性设置器的 bean 类:

public void setDueDate(java.sql.Date dueDate)

我还有一个在 XML 中配置的 bean 的实例,如下所示:

<property name="dueDate">
    <bean class="java.sql.Date"/>
</property>

STS 将该配置标记为错误: No constructor with 0 arguments defined in class 'java.sql.Date'

嗯,没错,java.sql.Date 没有无参数构造函数。但是这个应用程序运行良好,显然 Spring 足够聪明,可以在没有构造函数的情况下创建 Date 实例。问题是,为什么 STS 编辑器/构建器会抱怨,是否有可能说服它这不是错误或警告?

【问题讨论】:

标签: eclipse spring spring-tool-suite


【解决方案1】:

目前,我只能看到代码“可以工作”的 3 种情况,按照它们发生的可能性顺序排列:

  1. 注入属性的父 bean 使用 scope="prototype" 或 lazy-init="true" 定义,根本无法访问
  2. 运行时类路径包含java.sql.Dateshadowing 的实现
  3. 应用程序中未使用特定上下文 xml

否则Spring应该发出nice:

Could not instantiate bean class [java.sql.Date]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.sql.Date.<init>()

【讨论】:

  • 你知道了,有这个问题的 bean 的范围都是 prototype 并且在我的测试中到目前为止它们实际上并没有被访问(仍然有一些调查要做,因为这个应用程序被一些批次调用具有不同参数和输入数据的脚本)。
  • 我不习惯拥有或看到很多prototype bean,所以我什至没有想过要寻找它。啊,跳入现有应用程序的危险。
  • 很高兴能为您提供帮助;享受旧代码的乐趣:)
【解决方案2】:

如果代码有效,但 STS 报告错误错误,请在 https://issuetracker.springsource.com/browse/STS 提交针对 STS 的错误(如上所述)。

与此同时,您可以通过项目的 Spring 首选项禁用验证来解决此问题。只需转到项目的首选项 -> Spring,然后转到“项目验证器”选项卡,然后停用导致错误报告的验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多