问题是我需要使为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
注释清楚地标记所有参数。从该类型继承应该适用于您的情况
添加回答
举报
0/150
提交
取消