为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Kotlin 中使用可为空的“beanName”实现 BeanPostProcessor?

如何在 Kotlin 中使用可为空的“beanName”实现 BeanPostProcessor?

largeQ 2022-06-04 17:19:40
问题是我需要使为beanName空。由于 spring pass 的某些部分null而不是有效的 bean 名称(例如 Quartz)。Java 上的相同实现可以正常工作。我尝试添加 JetBrain 的@Nullable注释。它不起作用。而且反编译的类看起来很奇怪。此外,我BeanPostProcessor用不同的名称对项目文件夹进行了完整克隆,在 kotlin 上进行了实现,并且可以为beanName空而没有任何错误。//Javapackage org.myapp;import org.springframework.beans.BeansException;import org.springframework.lang.Nullable;// My clone of BeanPostProcessorpublic interface CloneOfBeanPostProcessor {    @Nullable        default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {            return bean;        }    @Nullable    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {        return bean;    }}// Kotlinpackage org.myappimport org.myapp.CloneOfBeanPostProcessorimport org.springframework.stereotype.Component@Componentclass MessageSourceBeanPostProcessorOld : CloneOfBeanPostProcessor {    // Have no warnings in this case.    override fun postProcessAfterInitialization(bean: Any, beanName: String?): Any? {...}下面的 Kotlin 问题示例。'postProcessAfterInitialization' overrides nothing如果我添加?到 beanName 类型,我在这里得到一个:@Componentclass MessageSourceBeanPostProcessorOld : BeanPostProcessor {    override fun postProcessAfterInitialization(bean: Any, beanName: String?): Any? {...}Java 上的相同代码运行良好:@Componentclass MessageSourceBeanPostProcessor implements BeanPostProcessor {    @Override    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {...}现在我们使用 spring-boot 版本 2.0.6。在 2.1.x 版本中问题不会重现。但是,我想弄清楚这个问题。这是我的知识差距还是错误,我应该报告吗?UPD:正如 Eugene 所说,问题出在 spring 5.x 中引入的包级别的非空 API 声明中。通过将 spring-boot 版本升级到 2.1.x 解决了问题(至少对于石英自动配置问题)。
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

Spring 使用包范围的注解来声明所有参数(除非明确指定)都是不可为空的。

您可以在中间添加一个很小的 Java 抽象类,并用@Nullable注释清楚地标记所有参数。从该类型继承应该适用于您的情况


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号