Java 以编程方式在特定于portlet的上下文中访问bean

Java 以编程方式在特定于portlet的上下文中访问bean,java,spring,spring-mvc,portlet,Java,Spring,Spring Mvc,Portlet,我有一个portlet应用程序。它是使用Spring框架IoC容器配置的。我正在使用org.springframework.web.context.ContextLoaderListener加载我的上下文 我有一个根级别的应用程序上下文(applicationContext.xml)和一个特定于portlet的上下文(MyPortlet.xml) 我有一个org.springframework.web.portlet.DispatcherPortlet类型的portlet,它连接到一个控制器。在

我有一个portlet应用程序。它是使用Spring框架IoC容器配置的。我正在使用org.springframework.web.context.ContextLoaderListener加载我的上下文

我有一个根级别的应用程序上下文(applicationContext.xml)和一个特定于portlet的上下文(MyPortlet.xml)

我有一个org.springframework.web.portlet.DispatcherPortlet类型的portlet,它连接到一个控制器。在控制器中,我希望访问我在portlet特定上下文中定义的一个bean(例如id为“myBean”的bean)。我试过了

MyBean mybean = (MyBean)PortletApplicationContextUtils.getWebApplicationContext(
    getPortletContext()).getBean("myBean")
然而,这里只有我的应用程序上下文中的bean可用——我的portlet特定上下文中的bean都不可用

在我的portlet特定上下文中有没有访问bean的方法


首先,你不能用普通的方式把bean连接到你的控制器上,而不是用编程的方式检索它吗

否则,您应该意识到,将获取对根webapp上下文的引用,而不是对servlet app上下文的引用:

查找根WebApplicationContext 对于这个portlet应用程序,它是 通常通过 ContextLoaderListener或 ContextLoaderServlet


如果您的控制器在其自身上下文上需要一个句柄,那么它应该实现
ApplicationContextAware
BeanFactoryAware
,或者如果您想使用自动连线,它可以使用
@Autowired ApplicationContext

首先,您不能用正常的方式将bean连接到控制器上吗,而不是以编程方式检索它

否则,您应该意识到,将获取对根webapp上下文的引用,而不是对servlet app上下文的引用:

查找根WebApplicationContext 对于这个portlet应用程序,它是 通常通过 ContextLoaderListener或 ContextLoaderServlet


如果您的控制器在其自身的上下文中需要一个句柄,那么它应该实现
ApplicationContextAware
BeanFactoryAware
,或者如果您想使用自动连线,它可以使用
@Autowired ApplicationContext

Hi,我没有以正常方式连接bean的原因是,控制器有一个单例服务,它需要一个非单例处理器。因此,我每次都在控制器中获取处理器,并将其传递给服务。在XML上下文文件中有更好的配置方法吗?@Aos:是的,我在回答中描述了更好的方法-使用
ApplicationContextAware
etcOkay-感谢您的帮助。我现在让我的控制器工作。嗨,我没有以正常方式连接bean的原因是因为控制器有一个单例服务,它需要一个非单例处理器。因此,我每次都在控制器中获取处理器,并将其传递给服务。在XML上下文文件中有更好的配置方法吗?@Aos:是的,我在回答中描述了更好的方法-使用
ApplicationContextAware
etcOkay-感谢您的帮助。我的控制器正在工作。