我正在使用Vaadin Spring 1.0.0並試圖找出如何將僅在UI範圍內(當用戶打開頁面時)可用的bean注入經典彈簧@Component
豆。很簡單,讓我們班:Spring @Component中注入vaadin @UIScope bean @Component
@Component
public class A {
@Inject
private IB b;
}
@UIScope
@SpringComponent
public class B implements IB {
}
而且很明顯在啓動過程中:
Caused by: java.lang.IllegalStateException: No VaadinSession bound to current thread
什麼是正常的方式該怎麼辦呢?我理解了整個概念,即在UI範圍不可用時啓動時初始化Bean,但我使用在Spring中用@Component
實現的公共庫,並且我想實現一些接口,但我只能在UI範圍內實現而不是在啓動過程中。
A'類也需要UIScope。 –
除了@ MarkRotteveel的評論,[在vaadin維基(https://vaadin.com/wiki?p_p_id=36&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_36_struts_action=%2Fwiki%2Fview&_36_pageResourcePrimKey=9364598&p_r_p_185834411_nodeName=vaadin.com+wiki&p_r_p_185834411_title=II+-+注入+和+範圍+ + Vaadin + Spring)也解釋了原因:'...注入了該註釋的任何東西在相同的UI內都會得到相同的實例。加載一個不同的用戶界面,你會得到一個不同的實例。如果會話過期或UI關閉,實例將被清除.' – Morfic
@MarkRotteveel是的,這是可能的,但''A類來自common-lib並且使用了數十個其他類。這意味着我必須將'@ UIScope'添加到常見lib中的每個相關類。然而,這個common-lib也用於沒有UI範圍或Vaadin的彈簧啓動應用程序。 – Mejmo