Dieser Artikel erläutert, wie man das Spring Framework zusammen mit dem JAX-RS-Provider Jersey einsetzen kann. Das Ziel soll sein, dass die Rest-Resourcen automatisch instantitiert werden und die benötigten Abhängigkeiten über Spring injiziert werden.
Dazu muss zuerst in der web.xml das Spring-Framework durch die Angabe zweier Listener und durch Festlegung der Spring-Konfigurationsdatei initialisiert werden. Außerdem muss ein spezielles SpringServlet eingebunden werden, dass die Rest-Anfragen an Jersey weiterleitet. Dieses Servlet liefert Jersey im Paket jersey-spring mit.
contextConfigLocation
/WEB-INF/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
Jersey Spring Web Application
com.sun.jersey.spi.spring.container.servlet.SpringServlet
Jersey Spring Web Application
/*
In der Spring-Konfigurationsdatei ist nur ein Eintrag nötig. Mittels Component-Scan werden alle Rest-Resourcen gefunden, die mit der Annotation @Component markiert sind. Danach werden alle Beans definiert, die in die Rest-Resourcen-Klassen injiziert werden sollen (im Beispiel: testObject).
Nachfolgend wir eine Rest-Resourcen-Klasse erstellt. Wie bereits erwähnt, muss diese mit der Annotation @Component ausgezeichnet werden, um vom Spring-Framework gefunden zu werden. Damit nicht bei jeder Anfrage ein neues Objekt erzeugt wird, wird der Scope auf Singleton gesetzt. Mit Hilfe der Annotation Path wird festgelegt unter welchen Pfad die Resource zu erreichen ist.
Schließlich wird eine Instanz von TestObject über die Annotation @Resource angefragt, die dann von Spring automatisch injiziert wird.
@Component
@Path("hello")
@Scope("singleton")
public class HelloWorld {
@Resource
private TestObject testObject;
@GET
public String sayHello( @QueryParam("name")String name){
return testObject.sayHello(name);
}
}