2009-12-08 121 views
5

Estoy intentando conectar mi FooServlet que extiende HttpServlet con el ApplicationContext que está en el mismo proyecto. El contexto de aplicación ya está siendo utilizado por un servlet WicketCómo conectar HttpServlet con Spring Application Context en web.xml?

Funciona con

servletContext = this.getServletContext(); 
wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 
(IMyBean)wac().getBean("myServiceBean") 

Ahora intento necesario comunicar a utilizar explícitamente primavera Clases en mi código (WebApplicationContextUtils), ya que no es la manera COI.

la ventanilla servlet está conectado con el contexto de aplicación en el web.xml

<servlet> 
    <servlet-name>ExampleApplication</servlet-name> 
    <servlet-class>org.apache.wicket.protocol.http.WicketServlet</servlet-class> 
    <init-param> 
     <param-name>applicationFactoryClassName</param-name> 
     <param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

encontré la primavera clase HttpServletBean pero no sé si sirve para mi caso

+0

No estoy seguro de lo que está tratando de lograr: ¿desea conectar su servlet con el contexto de la aplicación, pero sin poner el código Spring en el servlet? – skaffman

+0

exactamente, supongo que hay una forma de conectar FooServlet con ApplicationContext en el web.xml. Sé cómo funciona para Wicket y Spring MVC pero no para Basic HttpServlet –

+1

Pero Spring MVC y Wicket contienen código Spring. ¿Cómo espera acceder al contexto Spring sin el código Spring en su servlet? – skaffman

Respuesta

13

he encontrado una manera de inyectar frijoles en mi HttpServlet (Nota: No necesito una presentación Ver, de lo contrario hay clases de primavera más avanzados)

Añadir un ContextLoaderListener a web.xml por lo que la primavera de WebApplicationContext raíz se carga

<listener> 
     <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

Configurar servlet utilizando resortes HttpRequestHandlerServlet Clase

<servlet> 
<servlet-name>FooServlet</servlet-name> 
<display-name>Foo Servlet</display-name> 
<servlet-class> 
     org.springframework.web.context.support.HttpRequestHandlerServlet 
    </servlet-class> 
</servlet> 

Deje que su servlet implemente la interfaz org.springframework.web.HttpRequestHandler

Defina su servlet como un frijol en ApplicationContext (beanID debe ser el mismo que "servlet-name"). Ahora es posible inyectar todos los beans Necassary en el modo Spring DependencyInjection sin búsqueda de dependencias.

+1

Martin, ¿conoce alguna forma de inyectar un HttpServlet (cuya fuente no puede cambiar) en una clase DAO de Spring Web App? ? ... Tengo un HttpServlet que necesito para inicializar los datos y necesito llamarlo cuando se implementa mi aplicación. Ha sido un gran problema para mí. ¿Alguna idea? – blong

+0

"beanID debe ser el mismo que" ¿qué? Como servlet-name? Como nombre de clase? ... –

+0

Gracias Paŭlo, el formateo se rompió de alguna manera, es lo mismo que el nombre-servlet –

2

te creo debería usar utilidades Spring como RequestContextUtils.getWebApplicationContext (solicitud, aplicación); para conectar el contexto de Spring dentro de su servlet. De acuerdo, esto no es DI/IoC, ¡pero el servlet tampoco es frijol!

Cuestiones relacionadas