У меня есть автономное приложение Java, которое теперь запускает встроенный сервер Jetty для предоставления RESTful API для HTTP. Он действительно использует весенние бобы для всего, начиная от Hibernate и Jetty. У меня Jetty настроен с DispatcherServlet (мысль, что добавление API без REST в будущем будет таким же простым, как создание нового контроллера и правильное отображение его для диспетчера).Как сделать встроенный Jetty использовать AppContext, он определен как родительский контекст для сервлетов.
У моего приложения есть класс с основным методом, который создает класс ClassPathXmlApplicationContext из моего appContext.xml, чтобы начать все.
ApplicationContext ac= new ClassPathXmlApplicationContext(new String[] { "appContext.xml" });
Я не знаю, как сделать фасоль, определенной в конфигурационном файле контекста для DispatcherServlet имеет доступ к фасоли, определенной в appContext.xml, где определяются мол. Мое определение 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 id="restApiController" class="com.mycompany.myapp.api.controllers.RESTfulController">
<property name="someBean" ref="someBean"/>
</bean>
Зачем вам это? Я не могу по-настоящему понять причину этого. Рассмотрите свой веб-сайт и пристань как две отдельные проблемы. Определите компоненты, которые вам нужны в webapp, и настройте причал независимо от нашего webapp. – NilsH
Это не webapp. Он не используется в Tomcat или что-то в этом роде. В конечном итоге он запускается с помощью «java $ CLASSPATH com.mycompany.myapp.Launcher». Серверу Jetty нужен доступ к компонентам, определенным для остальной части приложения, потому что он должен быть API. Контроллер должен иметь возможность касаться других частей системы для выполнения запрошенных действий. – tdimmig