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.

Другие вопросы по тегам