【问题标题】:Deserializing sessions beans with @Inject dependencies使用 @Inject 依赖项反序列化会话 bean
【发布时间】:2018-04-24 12:12:05
【问题描述】:
@Component
@Scope("session")
public class UserBean implements Serializable {
    private Long userId;

    @Inject 
    private UserDAO userDAO;
....
}

我正在尝试反序列化这个对象,但我遇到了:

2017-11-11 10:09:10.470 WARN  o.a.c.c.C.[Catalina].[localhost].[/] - Cannot deserialize session attribute userBean for session 8757DE617838F4D78
5E86BDBFFFB18A6
2017-11-11 10:09:10.505 ERROR o.a.catalina.session.StandardManager - Exception loading sessions from persistent storage
java.lang.ClassCastException: java.lang.String cannot be cast to java.io.ObjectStreamClass

我的印象是 Spring 会在反序列化时处理 userDAO,这应该可以在没有任何修改的情况下工作?

【问题讨论】:

    标签: spring deserialization autowired inject


    【解决方案1】:

    UserBean 标记为Serializable 是不够的。您应该确保它的所有依赖项(字段)和这些依赖项的依赖项也是Serializable。当 java 序列化对象时,它确实会序列化对象的图形。

    它很可能会失败,因为UserDAO 或其依赖项(字段)不可序列化。将它们标记为Serializable,它应该可以工作。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      不确定是否有更好的方法,但这样做可以。

      @Component
      @Scope("session")
      public class UserBean implements Serializable, HttpSessionActivationListener {
      
      private Long userId;
      
          @Inject 
          private transient UserDAO userDAO;
      
          @Override
          public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
      
          }
      
          @Override
          public void sessionDidActivate(HttpSessionEvent e) {
              ServletContext sc = e.getSession().getServletContext();
              WebApplicationContext context = WebApplicationContextUtils
                      .getRequiredWebApplicationContext(sc);
              context.getAutowireCapableBeanFactory().autowireBean(this);
          }
      }
      

      【讨论】:

      • 我预计反序列化会出现问题,因为不会有任何userDAO 这样的问题。
      • @DanyloZatorsky 你是什么意思...UserDAO 是在 sessionDidActivate 方法中自动装配的。
      猜你喜欢
      • 2011-04-16
      • 2011-01-21
      • 1970-01-01
      • 2011-07-13
      • 2023-01-12
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多