因爲bean是請求範圍,所以它的成員將只存在於單個請求的生命週期中。所以,每次請求頁面時都會提取數據。
你可以做的一件事就是將緩存的數據放在不同的作用域(例如會話或應用程序)中。
<managed-bean>
<managed-bean-name>expensiveBean</managed-bean-name>
<managed-bean-class>lifetime.ExpensiveBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>requestBean</managed-bean-name>
<managed-bean-class>lifetime.RequestBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>cachedAsset</property-name>
<property-class>lifetime.ExpensiveBean</property-class>
<value>#{expensiveBean}</value>
</managed-property>
</managed-bean>
示例代碼:
public class RequestBean {
private ExpensiveBean cachedAsset;
public ExpensiveBean getCachedAsset() {
return cachedAsset;
}
public void setCachedAsset(ExpensiveBean cachedAsset) {
this.cachedAsset = cachedAsset;
}
}
這樣的話,你可以很容易地從一個請求範圍豆,同時保持請求級文物單獨的參考的數據。
某些框架添加了對頁面範圍的支持,這會將數據與視圖的生命週期保持一致。這可能是另一種選擇,取決於您的需求。