问题是我需要使为beanName空。由于 spring pass 的某些部分null而不是有效的 bean 名称(例如 Quartz)。Java 上的相同实现可以正常工作。
我尝试添加 JetBrain 的@Nullable注释。它不起作用。而且反编译的类看起来很奇怪。此外,我BeanPostProcessor用不同的名称对项目文件夹进行了完整克隆,在 kotlin 上进行了实现,并且可以为beanName空而没有任何错误。
//Java
package org.myapp;
import org.springframework.beans.BeansException;
import org.springframework.lang.Nullable;
// My clone of BeanPostProcessor
public 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;
}
}
// Kotlin
package org.myapp
import org.myapp.CloneOfBeanPostProcessor
import org.springframework.stereotype.Component
@Component
class MessageSourceBeanPostProcessorOld : CloneOfBeanPostProcessor {
// Have no warnings in this case.
override fun postProcessAfterInitialization(bean: Any, beanName: String?): Any? {...}
下面的 Kotlin 问题示例。'postProcessAfterInitialization' overrides nothing如果我添加?到 beanName 类型,我在这里得到一个:
@Component
class MessageSourceBeanPostProcessorOld : BeanPostProcessor {
override fun postProcessAfterInitialization(bean: Any, beanName: String?): Any? {...}
Java 上的相同代码运行良好:
@Component
class 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 解决了问题(至少对于石英自动配置问题)。
互换的青春
相关分类