@DefaultValue
如果能够将注释与记录和 Lombok 自动生成的构造函数一起使用,将会非常有用。我在 spring-boot 中做了一些小的代码更改,它提供了这样的能力。
我创建了一个示例项目,显示了所需的用法,请参阅此公共存储库中的源代码并进行测试:https://github.com/An1s9n/spring-boot-sample。
如有任何疑问,请随时与我联系,首选(也是最快)的方式是 Telegram:https://t.me/An1s9n。
@DefaultValue
如果能够将注释与记录和 Lombok 自动生成的构造函数一起使用,将会非常有用。我在 spring-boot 中做了一些小的代码更改,它提供了这样的能力。
我创建了一个示例项目,显示了所需的用法,请参阅此公共存储库中的源代码并进行测试:https://github.com/An1s9n/spring-boot-sample。
如有任何疑问,请随时与我联系,首选(也是最快)的方式是 Telegram:https://t.me/An1s9n。
@An1s9n 我们刚刚在团队会议上讨论过这个问题。
虽然我们认为这对于 Lombok 用户来说可能是一个有趣的补充,但我们认为为此注释添加字段+方法目标并不值得,因为它会让大多数 Java 用户处于可以在无效安排中使用它的位置。
记录组件目标对于所有 Spring Boot 用户都很有价值,我们希望实现它。您想用以下内容修改您的 PR 吗?
由于这需要更多的工作,并且这不会解决 Lombok 用例,因此如果您不想解决此问题,请随时告诉我们。
谢谢!
@bclozel,嗨!是的,我想按照你的描述修改我的 PR,因为我想为 Spring Boot 做出贡献,哈哈:))我会尽力尽快做到这一点。
@bclozel,我已经完成了你要求我做的事情:)如果还需要其他东西,请告诉我 - 我会修复它
我不确定注释处理器是否可以处理@DefaultValue
这种开箱即用的使用。我们应该尝试一下,并在需要时创建一个单独的问题。
@snicoll,你的意思是元数据生成,对吗?
@snicoll,幸运的是它工作得非常完美,没有任何额外的改变! :) 我已经为这种情况添加了单元测试。
这是针对 2.7.x,我们使用 Java 8 进行编译,但ElementType.RECORD_COMPONENT
在 Java 8 中不可用。我们需要决定是否愿意等到 3.0 来发布此增强功能,或者我们是否想要构建并发布一个多版本-为 Java 17 上的用户发布 jar。https://github.com/spring-projects/spring-boot/issues/25090与后一个选项相关。
我认为考虑到我们的构建生成多版本 jar 所需的工作量,我们应该将其移至 3.0。
非常感谢,@An1s9n。
自从合并这些更改以来,我们了解到它们实际上并不是必要的。现有PARAMETER
目标 on@DefaultValue
意味着@DefaultValue
已经从记录组件传播到其相应的构造函数参数。绑定器和配置元数据注释处理器都从那里获取它。本期所做的更改仅意味着它将@DefaultValue
传播到记录组件本身并使用反射从那里可用。这对于我们的目的来说不是必需的,但它可能不会造成任何损害。我将在即将召开的团队会议上将此标记为讨论,以便我们可以决定是否要保留目标RECORD_COMPONENT
或恢复目标。
https://github.com/spring-projects/spring-boot/issues/30460已更新文档来描述我们的记录支持,@DefaultValue
并反向移植一些测试以验证它是否按照文档描述的方式工作。