2017-11-11 5 views
0
@Component 
@Scope("session") 
public class UserBean implements Serializable { 
    private Long userId; 

    @Inject 
    private UserDAO userDAO; 
.... 
} 

Ich versuche, dieses Objekt zu deserialisieren, aber ich laufe in:Deserialisieren Sitzungen Bohnen mit @Inject Abhängigkeiten

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 

Ich habe den Eindruck, dass der Frühling die userDAO auf Deserialisierung behandeln würde, und dies sollte funktionieren, ohne irgendwelche Änderungen?

Antwort

0

Nicht sicher, ob es einen besseren Weg gibt, aber das macht den Job.

@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

Ich würde Probleme mit der Deserialisierung erwarten, da es kein 'userDAO' als solches geben wird. –

+0

@DanyloZatorsky was meinst du ... UserDAO wird in der Methode sessionDidActivate autowired. –

0

Es ist nicht ausreichend, UserBean als Serializable zu markieren. Sie sollten sicherstellen, dass alle Abhängigkeiten (Felder) und Abhängigkeiten dieser Abhängigkeiten ebenfalls Serializable sind. Wenn Java Objekte serialisiert, serialisiert es tatsächlich den Graphen der Objekte.

Am wahrscheinlichsten schlägt es fehl, da UserDAO oder seine Abhängigkeiten (Felder) nicht serialisierbar sind. Markieren Sie sie als Serializable und es sollte funktionieren.

Hoffe es hilft!