Проблема в том, что мне нужно сделать beanName
обнуляемым.Из-за некоторых частей пружины вместо действительного имени бина null
(например, 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? {...}
Пример проблемы Котлина ниже.Здесь я получаю '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 {...}
Теперь мы используем версию 2.0 с весенней загрузкой+0,6.В версии 2.1.x проблема не воспроизводится.Однако я хочу разобраться с этой проблемой.Это пробел в моих знаниях или это ошибка, и я должен сообщить об этом?
UPD: Как сказал Юджин, проблема заключалась в объявлении ненулевого API на уровне пакета, представленном весной 5.Икс.Проблема решена путем обновления версии с весенней загрузкой до 2.1.x (по крайней мере, для проблемы с автоконфигурацией кварца).