2010-03-23 54 views
1

我有一個Portlet應用程序。它使用Spring框架IoC容器進行配置。我正在使用org.springframework.web.context.ContextLoaderListener加載我的上下文。以編程方式在Portlet特定上下文中訪問Bean

我有一個在根級別(applicationContext.xml)和一個portlet特定上下文(MyPortlet-portlet.xml)的應用程序上下文。

我有一個org.springframework.web.portlet.DispatcherPortlet類型的portlet連接到Controller。在控制器中,我想訪問其中一個bean(例如,帶有id「myBean」的bean),我已經在我的portlet特定上下文中定義了它。我已經嘗試過

MyBean mybean = (MyBean)PortletApplicationContextUtils.getWebApplicationContext(
    getPortletContext()).getBean("myBean") 

但是,只有我的應用程序上下文中的bean在這裏可用 - 我的portlet特定上下文中沒有任何bean可用。

有沒有辦法在我的portlet特定的上下文中訪問bean?

感謝

回答

1

首先,你就不能在bean到控制器以正常方式線,而不是取回編程?

如果做不到這一點,你應該認識到getWebApplicationContext()獲取到根Web應用程序上下文的引用,而不是servlet應用程序上下文:

找到了根WebApplicationContext 此portlet應用程序,這是 通常通過 裝ContextLoaderListener或 ContextLoaderServlet。

如果您的控制器必須在其自己的上下文句柄,那麼它應該實現ApplicationContextAwareBeanFactoryAware,也可以使用@Autowired ApplicationContext如果你想使用自動裝配。

+0

嗨,我沒有以正常的方式連接我的bean的原因是因爲控制器有一個單身的服務,它需要一個不是單身的處理器。所以我每次都將控制器中的處理器傳遞給服務。有沒有更好的方法在XML上下文文件中配置它? – aos 2010-03-23 16:02:18

+0

@Aos:是的,我在答案中描述了更好的方法 - 使用'ApplicationContextAware'等 – skaffman 2010-03-23 16:10:19

+1

好的 - 謝謝你的幫助。我現在有我的控制器工作。 – aos 2010-03-23 16:40:47

相關問題