Dear Spring Cache проект сообщества,Непризнанные аннотации кэша Spring при самостоятельной вызове метода внутри того же компонента
В настоящее время я реализует Spring Apache CXF основе (версия 4.1.5) веб-службы конечных точек с помощью контракт 1-й подход. Здесь я наблюдаю при аннотации общедоступного метода в моем классе веб-сервисов, аннотации кэш-памяти Spring «@Cachable» игнорируются каждый раз, когда я вызываю этот метод самозаверенным способом внутри одного и того же компонента. Это можно было проверить, если посмотреть в репозиторий кеша (через JMX) основного поставщика кеша (здесь: EhCache). Там никакого заполнения кеша не происходит.
После взглянуть на текущей документации Spring ниже Enable caching annotations и The dispatcher servlet Я предполагаю, что это может быть связано с тем, что:
<cache:annotation-driven/>
выглядит только для @ Cacheable/@ CachePut/@ CacheEvict/@ Кэширование по бобам в том же контексте приложения, в котором оно определено. Это означает, что если вы введете WebApplicationContext для DispatcherServlet, он проверяет только бобы в ваших контроллерах, а не ваши службы. Для получения дополнительной информации см. Раздел 17.2 «Диспетчерский набор».
В настоящее время, Апачи CXF «CXFServlet» зарегистрирован в «web.xml» дескриптора развертывания начинает Весеннюю WebApplicationContext с помощью «CXF-servlet.xml» Spring приложения файл контекста по умолчанию. Там находится <cache:annotation-driven/>
.
Возможно, это связано с тем, что я вызываю аннотированный метод @Cacheable из одного и того же Spring-компонента, чтобы сгенерированный прокси-сервер Spring был обойден? Подробности можно найти в главе «Прокси-механизмы» (9.6) весенней документации.
Но я не знаю, как изменить поведение, чтобы результаты моего метода были кэшированы. У тебя есть идеи? Или мои предположения, которые я написал выше, неверно?