gpt4 book ai didi

java - Spring:使用声明的多个调度程序访问正确的 WebApplicationContext

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:50 24 4
gpt4 key购买 nike

我在我的应用程序中声明了两个 Spring 上下文 - 一个用于 Spring-MVC 请求,另一个用于 Flex/BlazeDS messagebroker 请求,映射到不同的 url-patterns:

<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

声明了一个通用的上下文配置,(/WEB-INF/applicationContext.xml) 然后这两个上下文中的每一个都在 spring-mvc-servlet.xml 中声明了自己的配置flex-servlet.xml 分别。

flex-servlet.xml 中,我声明了特定于 flex 上下文的 bean。但是,当调用 http://localhost/messagebroker/* 时,我收到这些 bean 不可用的错误。

有问题的代码在自定义 Spring 组件中,因此直接引用 WebApplicationContext 以访问声明的 bean:

public ISerializer getSerializer(Object source,boolean useAggressiveSerialization)
{
ServletContext ctx = FlexContext.getServletContext();
WebApplicationContext springContext = WebApplicationContextUtils.getRequiredWebApplicationContext(ctx);
String serializerBeanName = springContext.getBeanNamesForType(ISerializer.class);
}

当我在单个上下文中运行时,这种方法很有效。但是,它还需要支持运行多个上下文的情况。

设置断点,我看到 springContext 的值是根上下文,只有一个 configLocation - /WEB-INF/applicationContext.xml

我假设这就是问题所在 - 因为上面代码需要的 ISerializer 是在 flex-servlet.xml 中声明的。

如何修改以上代码以支持这两种情况? (单上下文和多上下文)?

编辑:上面显示的代码位于 ManageableComponentFactoryBean 中。 ,它似乎作为自定义 bean 工厂运作。似乎 ApplicationContextAware 接口(interface)在生成的类上不受尊重。例如:

<bean id="dpHibernateRemotingAdapterComponentFactory"
class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg
value="org.dphibernate.adapters.RemotingAdapter" />
<property name="properties">
<value>
{"dpHibernate" :
{
"serializerFactory" : "org.dphibernate.serialization.SpringContextSerializerFactory"
}
}
</value>
</property>
</bean>

上面引用的代码位于 org.dphibernate.serialization.SpringContextSerializerFactory 中。使此 SpringContextSerializerFactory 实现 ApplicationContextAware 没有影响。

最佳答案

如果 flex 是一个 DispatcherServlet,并且出于某种原因您不能遵循 Tomás Narros 的建议,您可以获得与当前 DispatcherServlet< 关联的上下文 使用 RequestContextUtils.getWebApplicationContext(request)

还有一个方便的方法 RequestContextUtils.getWebApplicationContext(request, ctx),如果 DispatcherServlet 的上下文不可用,它会返回根上下文。

关于java - Spring:使用声明的多个调度程序访问正确的 WebApplicationContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com