2017-11-11 16 views
0
@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 
나는 봄이 직렬화에 userDAO을 처리 할 것이며이없이 작동한다는 인상이었다

어떤 수정?

답변

0

더 좋은 방법이 있을지는 모르겠지만 실제로는 그렇지 않습니다.

@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); 
    } 
} 
+0

저는 'userDAO'가 없기 때문에 직렬화에 문제가있을 것으로 예상합니다. –

+0

@DanyloZatorsky 당신은 무엇을 의미합니까? UserDAO는 sessionDidActivate 메소드에 autowired입니다. –

0

그것은 SerializableUserBean을 표시하기에 충분하지 않습니다. 의존성 (필드)과 종속성의 종속성이 모두 Serializable인지 확인해야합니다. java serialise 객체는 실제로 객체의 그래프를 직렬화합니다.

UserDAO 또는 종속성 (필드)이 직렬화되지 않기 때문에 대부분 실패합니다. 그들을 Serializable으로 표시하면 제대로 작동합니다.

희망 하시겠습니까?