causas da falha @Cacheable e soluções ao integrar Cache shiro

problema

Quando shiro de cache integrado, encontramos a camada de serviço marcados com método de cache anotada não chama o método de cache

Mas todos os métodos de chamada diretamente entidade, resultando em falha da função de cache

 

razão

público  classe UserRealm estende AuthorizingRealm { 

    @Autowired 
    privada UserService UserService;

primavera, quando registrar feijão, vai primeiro encontrar outro feijão e feijão invocado registro

Assim, no caso acima, o UserRealm registro também a camada de classe de implementação UserService serviço também registrado

Mas este não é o ponto crucial do problema

A chave é perceber de cache anotações @Cacheable sobre o método

Cache componente verifica a este comentário, criar um objeto proxy através dos mecanismos relevantes, AOP pode naturalmente executar operações de cache

O problema é que shiro na criação recipiente fase rigisterBeanPostprocessors processo registrar os componentes relacionados

O UserRealm acima é registrado nos rigisterBeanPostprocessors, tornando classe de implementação UserService é criado automaticamente injetada com antecedência

O cache é apenas componentes relevantes para ser registrado após método finisBeanfactoryInitialization em

Então cache de @Cacheable e outras anotações criado antes da classe de implementação de serviço é menos do que a digitalização

 

soluções

Derivada da análise acima, Serviço precisa ser criado depois de um registro de componente de cache

Portanto, dar a propriedade de serviço, mais um comentário @Lazy

Use carregamento lento, e Realm ao mesmo tempo para evitar o registro, recadastramento, quando utilizado

Em seguida, armazenar em cache componentes naturais que foram criados, como cache pode identificar corretamente comentário @Cacheable

Acho que você gosta

Origin www.cnblogs.com/Unicron/p/12578842.html
Recomendado
Clasificación