2009-12-08 16 views
5

Ich versuche, mein FooServlet, das HttpServlet erweitert, mit dem ApplicationContext zu verbinden, der sich im selben Projekt befindet. Der Anwendungskontext wird bereits von einem Wicket Servlets verwendetWie verbindet man HttpServlet mit Spring Application Context in web.xml?

Es arbeitet mit

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

Jetzt versuche ich Klassen in meinem Code (WebApplicationContextUtils) zu verwenden, um aviod ausdrücklich Frühling, da es nicht die Art und Weise IOCs.

Der Wicket Servlets mit dem Anwendungskontext in der web.xml verbunden

<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> 

ich die Klasse Frühling gefunden HttpServletBean aber ich weiß nicht, ob es für meinen Fall dient

+0

Ich bin unklar, was Sie erreichen möchten - Sie möchten Ihr Servlet mit dem App-Kontext verbinden, ohne Springcode in das Servlet zu setzen? – skaffman

+0

genau, ich denke, es gibt eine Möglichkeit, FooServlet mit ApplicationContext in der web.xml zu verbinden. Ich weiß, wie es für Wicket und Spring MVC funktioniert, aber nicht für ein Basic HttpServlet –

+1

Aber Spring MVC und Wicket enthalten beide Spring-Code. Wie können Sie in Ihrem Servlet auf den Spring-Kontext ohne Spring-Code zugreifen? – skaffman

Antwort

13

fand ich einen Weg Beans in meinem HttpServlet zu injizieren (Hinweis: Ich habe keine Vorstellung Ansicht benötigen, sonst gibt fortgeschritteneren Frühling Klassen sind)

einen Context zu web.xml hinzufügen, so dass Spring root WebApplicationContext geladen

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

Configure Servlet Federn HttpRequestHandlerServlet Klasse

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

Lassen Sie Ihr Servlet die org.springframework.web.HttpRequestHandler Schnittstelle implementieren

Definieren Sie Ihr Servlet als eine Bean in ApplicationContext (BeanID muss gleich sein wie "Servlet-Name"). Jetzt ist es möglich, alle notwendigen Bohnen in der Spring DependencyInjection Weg ohne Abhängigkeits-Lookup zu injizieren.

+1

Martin, wissen Sie von einer Möglichkeit, ein HttpServlet (dessen Quelle nicht ändern kann) in eine Spring Web App DAO-Klasse zu injizieren ? ... Ich habe ein HttpServlet, das ich Daten initialisieren muss, und ich muss es aufrufen, wenn meine App bereitgestellt wird. Es war ein ziemliches Problem für mich. Irgendwelche Gedanken? – blong

+0

"BeanID muss gleich sein wie" was? Als Servlet-Name? Als Klassenname? ... –

+0

Danke Paŭlo, die Formatierung war irgendwie kaputt, es ist das selbe wie Servlet-Name –

2

ich Sie denken, sollte Spring-Dienstprogramme wie RequestContextUtils.getWebApplicationContext (Anfrage, Anwendung) verwenden; , um den Spring-Kontext innerhalb Ihres Servlets zu verbinden. Vereinbar dies ist kein DI/IoC, aber das Servlet ist auch keine Bohne!

Verwandte Themen