Java 为什么不是';guice注入以前实例化的@SessionScoped对象?

Java 为什么不是';guice注入以前实例化的@SessionScoped对象?,java,session-state,guice,stripes,Java,Session State,Guice,Stripes,我有一个@sessionscope?正在注入Stripes框架拦截器构造函数的DAO,该拦截器构造函数似乎是从拦截器(在后续调用中)找到的,但没有注入同一请求(和会话)中的服务。为什么同一个实例(在拦截器中初始化)没有在服务中重用(在同一项目的不同包中) 将DAO设置为@Singleton可以做到这一点,但这是不可接受的,因为DAO在一个应用程序上存储的信息必须在整个用户会话期间保持一致,该应用程序有多个用户共享同一DAO实例。如果拦截器不是会话范围的对象,然后需要将提供程序注入拦截器。这是一个

我有一个@sessionscope?正在注入Stripes框架拦截器构造函数的DAO,该拦截器构造函数似乎是从拦截器(在后续调用中)找到的,但没有注入同一请求(和会话)中的服务。为什么同一个实例(在拦截器中初始化)没有在服务中重用(在同一项目的不同包中)


将DAO设置为@Singleton可以做到这一点,但这是不可接受的,因为DAO在一个应用程序上存储的信息必须在整个用户会话期间保持一致,该应用程序有多个用户共享同一DAO实例。

如果
拦截器
不是会话范围的对象,然后需要将
提供程序
注入
拦截器
。这是一个使用寿命较长的对象依赖另一个使用寿命较短的对象时常用的模式。

好的,我已经解决了。我将
@SessionScoped
更改为一个
绑定(DAO.class).in(ServletScopes.SESSION)
语句,注入使用该语句。据我所知,它们应该是等价的,但在我的例子中,它们产生了不同的结果

一路上困扰我的一个方面是Stripes构建了拦截器,该拦截器在启动时注入DAO,导致错误,因为这发生在会话范围之外(DAO是
@SessionScoped
。需要ActionBeanContext上下文信息来初始化DAO会话上下文,我在构造ActionBean期间调用的AbstractActionBean setContext方法中设置了该上下文


感谢您的关注和帮助。

您使用stripes guice吗?()是的,guice 2.0和stripes guice 1.5.2谢谢您的回答。((单例)拦截器的使用寿命比(会话范围)长DAO,尽管guice甚至没有在单个请求中注入原始DAO实例。调试显示guice调用DAO的构造函数,而不是使用(会话附加?)实例。您是否可以包括绑定DAO的代码和拦截器的代码?