Примечание: это не имеет никакого смысла, если вы не очень хорошо знакомы с Java, Spring AOP и Tomcat.
Проблема в том, что компоненты, помеченные @Configurable, не вводятся при десериализации Tomcat SESSIONS.ser.
Я заметил такое поведение в устаревшем приложении на базе Struts 1.2.9 с Spring 2.5.4, spring-tomcat-weaver-2.5.4, Tomcat 6.0.14.
Код:
public class MyForm implements Serializable {
private Foo myFoo; // getters and setters
}
public class Foo imlements Serializable {
private Bar myBar; // getters setters
}
@Configurable("barTemplate")
public class Bar implements Serializable {
@Autowired(required=true)
private transient SessionFactory hello;
// other transient dependencies ...
}
XML конфигурирует Bar как прототип bean.
Правильный контекст: настроенный пружиной и контекст: применяются параметры загрузки-ткача и т. Д. (Поскольку он работает при холодном запуске Tomcat).
Все работает нормально при первом запуске. Однако перезапуск Tomcat приводит к записи SESSIONS.ser, а после перезагрузки десериализует MyForm, что и происходит. Однако ни одна из зависимостей в Bar не установлена!
Но если я выключу Tomcat, удалю файл SESSIONS.ser и перезагрузлю, тогда все будет работать.
Weird.
Любой совет с благодарностью.