2013-05-21 3 views
0

Я новичок в Guice и задаюсь вопросом о кешировании.Guice: Как я могу кэшировать данные

У меня есть WebApp, который использует провайдера для предоставления пользовательских конфигураций.

bind(UserConfiguration.class).toProvider(UserConfigurationProvider.class).in(ServletScopes.REQUEST); 

Поставщик объявлен как:

public class UserConfigurationProvider implements Provider<UserConfiguration>{ 
    public UserConfiguration get() { 
     userConfigurationDatabase.getUserConfiguration(<some param here>); 
    } 
} 

В методе GET, он вызывает DB и сделать очень дорогой DB вызов.

У меня есть несколько классов, которые получают UserConfiguration впрыскивается как:

public class PriceView { 
    private UserConfiguration userConfiguration; 
    @Inject 
    public MyClass(UserConguration userConfiguration){ 
     this.userConfiguration = userConfiguration; 
    } 

    ..... 
} 

public class OrderView { 
    private UserConfiguration userConfiguration; 
    @Inject 
    public MyClass(UserConguration userConfiguration){ 
     this.userConfiguration = userConfiguration; 
    } 
    ........ 
} 

Проблема заключается в том, что каждый раз, когда я включаю вид, новый объект xxxxView создается и, следовательно, новая UserConfiguration впрыскивается и, следовательно, дорогой DB вызывается.

Я хочу позвонить по телефону DB, ограниченному один раз для входа пользователя. Моя идея заключается в том, что кеш UserConfiguration где-то, когда пользователь входит в систему и очищает его после выхода пользователя из системы или истекает.

Но я хочу знать, что whehter Guice предлагает что-то более умные способы кеширования об этом случае использования?

Большое спасибо.

ответ

3

Если вы используете стандартный сеанс сервлетов, то этого должно быть достаточно, чтобы использовать область ServletScopes.SESSION вместо ServletScopes.REQUEST. В этом случае вводимый объект должен создаваться только один раз за сеанс.

Однако, если вы не используете стандартную сессию сервлета, а что-то обычное, вам также необходимо создать custom scope.

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