2011-02-04 62 views
1

我有一個@SessionScoped?被注入到Stripes框架中的DAO攔截器構造函數似乎可以從攔截器中找到(在後續調用中),但不會被注入到相同請求(和會話)中的服務中。爲什麼在服務中重用的是同一個實例(在攔截器中初始化)(它位於同一個項目的不同包中)?爲什麼不是guice注入先前實例化的@SessionScoped對象?

讓DAO變成@Singleton是不可接受的,因爲DAO存儲的信息必須在具有多個用戶共享相同DAO實例的應用程序的用戶會話中保持一致。

+0

是否使用條紋,吉斯(HTTP:?// bgoodin .github.com/stripes-guice /) – Kdeveloper 2011-02-05 20:31:13

+0

是的,guice 2.0和stripes-guice 1.5.2 – mut1na 2011-02-07 12:44:02

回答

0

好的,我已經想通了。我將@SessionScoped更改爲bind(DAO.class).in(ServletScopes.SESSION)聲明與注射工作。據我瞭解,這些應該是等價的,但在我的情況下,他們產生不同的結果。

一直困擾着我的一個方面是Stripes構建了在啓動時注入DAO的攔截器,因爲這發生在會話範圍外(這是DAO爲@SessionScoped。ActionBeanContext上下文信息需要初始化這是我在AbstractActionBean setContext方法是動作bean的建設過程中調用設置DAO會話的上下文

感謝您的關注和幫助

0

如果Interceptor不是會話範圍的對象,那麼您需要將Provider<YourDaoType>注入Interceptor。當壽命較長的物體依賴於壽命較短的另一物體時,這是常用的模式。

相關問題