2013-08-12 3 views
1

У меня есть следующий метод;Spring @Cacheable не кэширует общедоступные методы

@Cacheable(value = "psgSiteToMap", key = "'P2M_'.concat(#siteName)") 
    public Map getSiteDetail(String siteName) { 
     Map map = new HashMap(); 
     ..... 
     //construct map variable here 
     ....... 
     return map; 
    } 

В то время как запуск проекта, не может использовать класс autowire, к которому относится этот метод. Если я изменяю метод выше, как указано ниже;

@Cacheable(value = "psgSiteToMap", key = "'P2M_'.concat(#siteName)") 
    private Map getSiteDetail(String siteName) { 
     Map map = new HashMap(); 
     ..... 
     //construct map variable here 
     ................ 
     return map; 
    } 

    public Map getSiteDetailPublic(String siteName) { 
     return this.getSiteDetail(siteName); 
    } 

Это работает. Есть ли ограничение на @Cacheable аннотации для общедоступных методов?

Заранее спасибо

+0

Я использовал его в своем проекте для общественных методов, он просто отлично работает. Кроме того, Ehcache [документация] (http://ehcache.org/documentation/user-guide/spring#cacheable) не говорит ничего подобного. В примере, показанном в ссылке, используется общедоступный метод. –

+0

@ShashankKadne В другом классе, я также использую для публичных методов, и он отлично работает. Однако в этом классе он не работает для метода getSiteDetail (String siteName) –

ответ

2

Spring AOP работает только на открытых методов по умолчанию. Вам понадобится AspectJ и время загрузки или время компиляции, чтобы заставить его работать с частными методами.

Так работает в вашем случае означает, что при перемещении @Cachableprivate к методе прокси не создаются вообще и что работает является autowireing, но не кэширование.

Возможно, вы не установили свойство proxy-target-class в свою конфигурацию XML или его эквивалентный атрибут аннотации. Можете ли вы добавить конфигурацию Spring, которую вы используете, и строку определения класса. Мне интересно, реализует ли он какие-либо интерфейсы? Чем больше я расскажу о своем ответе.

Смежные вопросы