Spring прокси класс с CGLIB - как узнать имена аргументов функции
Я хочу использовать @EventListener
аннотация с атрибутом условия на проксируемом объекте. Выражение EL использует аргумент функции. Но во время выполнения org.springframework.core.LocalVariableTableParameterNameDiscoverer
не может прочитать отладочную информацию из сгенерированного CGLIB-прокси, и поэтому параметры недоступны. В результате я получаю
org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 92): свойство или поле 'prop' не может быть найдено в null
class InterestedInEvent {
@EventListener(classes = SomeEvent.class, condition="#event.prop!=null")
@CacheEvict(cacheNames = CACHE_FOR_SOMETHING, allEntries = true)
public void onEvent(SomeEvent event) {
logger.debug("Chache {} has been cleaned, event={}", CACHE_FOR_SOMETHING, event);
}
}
Как я могу выставить имена аргументов или как заставить Spring анализировать оригинальный класс, а не прокси?
1 ответ
У меня была похожая проблема, и я нашел обходной путь, используя #root.event вместо #event.