我正在使用@configurable注释的Vaadin控制器和我的Spring上下文,并且它工作正常 - 除非我需要重新启动Tomcat,并且会话被反序列化。然后我为我的Vaadin应用程序得到了这个:
尚未在BeanConfigurerSupport上设置org.springframework.beans.factory.wiring.BeanConfigurerSupport BeanFactory:确保此configurer在Spring容器中运行。无法配置[web.vaadin.ui.BackOfficeApplication]类型的bean。无需注射即可进行。
我在想这可能是因为vaadin应用程序在春豆工厂有机会之前进行了重新编译?
(我正在使用CTW - aspectj和Spring 3.1.1.RELEASE)
注意:
在日志中似乎这些错误出现在“Root WebApplicationContext:initialization started”之前。如何在启动上下文初始化之前自动装配bean?
答案 0 :(得分:0)
我不是使用Spring和Tomcat进行(反)序列化的专家,这不是一个答案,但可能是一种解决方法。
如果BackOfficeApplication
是您的Vaadin应用程序,则可以选择在该类上使用@Configurable
。相反,创建一个per-Vaadin Application Spring应用程序上下文XML文件并将其添加到其中以使您的BackOfficeApplication
实例自动装配等等:
<bean id="backOfficeApplication"
class="org.dellroad.stuff.vaadin.ContextApplication"
factory-method="get"/>
一般来说,@Configurable
可能比普通的bean布线更麻烦,因为它们需要在对象构造时进行配置,而不是允许bean工厂稍后进行布线,在那里它可能更好地检测循环,强制排序等。
理想情况下,正常的bean布线应该用于在应用程序开始时初始化一次的单例,@Configurable
应该用于在正常操作期间随机创建的“动态”bean。