0

applicationContext.xmlルートアプリケーションコンテキスト( )とディスパッチャサーブレット()の両方が次のようdispatcher-servlet.xmlに定義されたWebアプリケーションがあります。web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

...

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

DispatcherServletアクセス制限のため、ルートの親コンテキストからBeanにアクセスすることはできません。

しかし、私たちができるようにしたいのは、兄弟Beanにアクセスすることです。たとえば、私たちdispatcher-servlet.xmlには次のようなものがあります。

<bean id="firstController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
    ...
</bean>

<bean id="secondController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
...
</bean>

コンストラクター引数として渡されたり、プロパティとして設定されたりすることなくsecondController、内部からアクセスするにはどうすればよいですか?firstController

WebApplicationContextUtils.getWebApplicationContext(...)ルート内の兄弟にアクセスするために使用していますapplicationContext.xmlが、子コンテキストでも同じことを実行したいと思います。(子供のうちの1人の中から。)

4

1 に答える 1

0

ApplicationContextを使用してオブジェクトを取得できます

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dispatcher-servlet.xml")

dispatcher-servlet.xmlこれは、がクラスパスにあることを前提としています。コンテキストオブジェクトをキャッシュする必要があります。次に、を使用context.getBean()してどこからでもBeanにアクセスします。

他のオプションは、コンテキスト属性名を渡すことができるオーバーロードされたメソッドを使用するようです。使ったことがありません。 WebApplicationContextUtils.getWebApplicationContext(ServletContext sc, String attrName)

于 2012-12-14T16:11:17.557 に答える