2010-03-23 48 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