HTTP 用の RESTful API を公開するために、組み込みの Jetty サーバーを実行するスタンドアロンの Java アプリがあります。Hibernate から Jetty まで、Spring Bean を多用しています。DispatcherServlet を使用して Jetty を構成しました (今後、REST 以外の API を追加することは、新しいコントローラーを作成し、それをディスパッチャーに正しくマッピングするのと同じくらい簡単になると考えています)。
私のアプリには、私の appContext.xml から ClassPathXmlApplicationContext を作成してすべてを開始する main メソッドを持つクラスがあります。
ApplicationContext ac= new ClassPathXmlApplicationContext(new String[] { "appContext.xml" });
DispatcherServlet のコンテキスト構成ファイルで定義された Bean が、jetty が定義されている appContext.xml で定義された Bean にアクセスできるようにする方法がわかりません。私の Jetty 定義は次のようになります。
<bean id="JettyServer" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop">
<constructor-arg>
<bean id="threadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<property name="minThreads" value="2"/>
<property name="maxThreads" value="10"/>
</bean>
</constructor-arg>
<property name="connectors">
<list>
<bean id="Connector" class="org.eclipse.jetty.server.ServerConnector">
<constructor-arg ref="JettyServer"/>
<property name="port" value="8090"/>
</bean>
</list>
</property>
<property name="handler">
<bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<property name="handlers">
<list>
<bean class="org.eclipse.jetty.servlet.ServletContextHandler">
<property name="contextPath" value="/"/>
<property name="servletHandler">
<bean class="org.eclipse.jetty.servlet.ServletHandler">
<property name="servlets">
<list>
<bean class="org.eclipse.jetty.servlet.ServletHolder">
<property name="name" value="DefaultServlet"/>
<property name="servlet">
<bean class="org.springframework.web.servlet.DispatcherServlet"/>
</property>
<property name="initParameters">
<map>
<entry key="contextConfigLocation" value="classpath:./DefaultServlet.xml" />
</map>
</property>
</bean>
</list>
</property>
<property name="servletMappings">
<list>
<bean class="org.eclipse.jetty.servlet.ServletMapping">
<property name="pathSpecs">
<list><value>/</value></list>
</property>
<property name="servletName" value="DefaultServlet"/>
</bean>
</list>
</property>
</bean>
</property>
</bean>
<bean class="org.eclipse.jetty.server.handler.RequestLogHandler">
<property name="requestLog">
<bean class="org.eclipse.jetty.server.NCSARequestLog">
<constructor-arg value="/opt/impulse/logs/jetty-yyyy_mm_dd.log"/>
<property name="extended" value="false" />
</bean>
</property>
</bean>
</list>
</property>
</bean>
</property>
</bean>
次に、DefaultServlet.xml で、appContext.xml で定義された Bean を参照するプロパティを持つ Bean を定義しようとしましたが、これが壊れています。
<bean id="restApiController" class="com.mycompany.myapp.api.controllers.RESTfulController">
<property name="someBean" ref="someBean"/>
</bean>