我有一个独立的 Java 应用程序,它现在运行一个嵌入式 Jetty 服务器来为 HTTP 公开一个 RESTful API。从 Hibernate 到 Jetty,它确实大量使用了 Spring bean。我为 Jetty 配置了 DispatcherServlet(想法是将来添加非 REST API 就像制作新的控制器并为调度程序正确映射它一样简单)。
我的应用程序有一个带有 main 方法的类,它从我的 appContext.xml 创建一个 ClassPathXmlApplicationContext 来启动一切。
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 中,我尝试定义一个带有属性的 bean,它引用了 appContext.xml 中定义的一个 bean,这就是中断。
<bean id="restApiController" class="com.mycompany.myapp.api.controllers.RESTfulController">
<property name="someBean" ref="someBean"/>
</bean>