【问题标题】:Accessing beans in portlet specific context programmatically以编程方式访问特定于 portlet 的上下文中的 bean
【发布时间】:2010-03-23 14:44:58
【问题描述】:

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

我有一个根级别的应用程序上下文 (applicationContext.xml) 和一个特定于 portlet 的上下文 (MyPortlet-portlet.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?

谢谢

【问题讨论】:

    标签: java spring spring-mvc portlet


    【解决方案1】:

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

    如果做不到这一点,您应该意识到 getWebApplicationContext() 获取对根 webapp 上下文的引用,而不是 servlet 应用程序上下文:

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

    如果您的控制器需要在自己的上下文中使用句柄,那么它应该实现ApplicationContextAwareBeanFactoryAware,或者如果您想使用自动装配,它可以使用@Autowired ApplicationContext

    【讨论】:

    • 嗨,我没有以正常方式连接我的 bean 的原因是控制器有一个单例服务,它需要一个不是单例的处理器。所以我每次都在控制器中获取处理器并将其传递给服务。有没有更好的方法在 XML 上下文文件中配置它?
    • @Aos:是的,我在答案中描述了更好的方法-使用ApplicationContextAware
    • 好的 - 谢谢你的帮助。我的控制器现在可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2010-11-08
    • 2011-05-31
    相关资源
    最近更新 更多