[英]Guice: How can I cache data
我是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
緩存在某個位置,並在用戶注銷或過期后清除它。
但是我想知道Guice
提供了一些更聰明的緩存此用例的方法嗎?
非常感謝。
如果您使用的是標准Servlet會話,那么使用ServletScopes.SESSION
范圍而不是ServletScopes.REQUEST
應該足夠了。 在這種情況下,每個會話只能創建一次注入的對象。
但是,如果您沒有使用標准的servlet會話,而是自定義的,則還需要創建自定義的scope 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.