| <?xml version="1.0" encoding="UTF-8"?> | |
| <!-- | |
| Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved. | |
| This program and the accompanying materials are made available under the | |
| terms of the Eclipse Public License v. 2.0, which is available at | |
| http://www.eclipse.org/legal/epl-2.0. | |
| This Source Code may also be made available under the following Secondary | |
| Licenses when the conditions for such availability set forth in the | |
| Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | |
| version 2 with the GNU Classpath Exception, which is available at | |
| https://www.gnu.org/software/classpath/license.html. | |
| SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | |
| --> | |
| <!DOCTYPE chapter [<!ENTITY % ents SYSTEM "jersey.ent" > %ents;]> | |
| <chapter xmlns="http://docbook.org/ns/docbook" | |
| version="5.0" | |
| xml:lang="en" | |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| xmlns:xi="http://www.w3.org/2001/XInclude" | |
| xmlns:xlink="http://www.w3.org/1999/xlink" | |
| xsi:schemaLocation="http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd | |
| http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd" | |
| xml:id="spring"> | |
| <title>Spring DI</title> | |
| <para> | |
| Jersey provides an extension to support Spring DI. | |
| This enables Jersey to use Spring beans as JAX-RS components (e.g. resources and providers) and also allows | |
| Spring to inject into Jersey managed components. | |
| </para> | |
| <para> | |
| The Spring extension module configuration is based on annotations. | |
| Spring beans are injected and JAX-RS classes are made Spring managed using annotations. | |
| Injected Spring beans can have further dependencies injected using Spring XML configuration. | |
| Spring singleton and request scopes are supported. | |
| </para> | |
| <para> | |
| To enable JAX-RS resources to work Spring functionality that requires proxying, such as Spring transaction management | |
| (with <literal>@Transactional</literal>), Spring Security and aspect oriented programming (such as <literal>@Aspect</literal>), the resources | |
| must themselves be managed by Spring, by annotating with <literal>@Component</literal>, <literal>@Service</literal>, | |
| <literal>@Controller</literal> or <literal>@Repository</literal>: | |
| <programlisting language="java" linenumbering="numbered">import jakarta.ws.rs.GET; | |
| import jakarta.ws.rs.Path; | |
| import org.springframework.stereotype.Component; | |
| @Component | |
| @Path("/") | |
| public class SomeResource { | |
| @Transactional | |
| @GET | |
| public void updateResource() { | |
| // ... | |
| } | |
| } | |
| </programlisting> | |
| </para> | |
| <para> | |
| Limitations: | |
| <itemizedlist> | |
| <listitem><para>Spring beans can't be injected directly into JAX-RS classes by using Spring XML configuration</para></listitem> | |
| </itemizedlist> | |
| </para> | |
| <section> | |
| <title>Dependencies</title> | |
| <para> | |
| If you want to use Jersey Spring DI support | |
| you will need to add the <literal>jersey-spring4</literal> module into the list of your dependencies: | |
| <programlisting language="xml"><dependency> | |
| <groupId>org.glassfish.jersey.ext</groupId> | |
| <artifactId>jersey-spring4</artifactId> | |
| <version>&version;</version> | |
| </dependency></programlisting> | |
| </para> | |
| <para> | |
| The above module adds transitive dependencies on Spring modules. | |
| See &jersey.ext.spring4.deps.link; module dependencies for more details about list and scope of dependencies. | |
| Please note the module depends on &hk2.spring-bridge.link; that is used to inject Spring services into HK2 services | |
| or inject HK2 services into Spring services. | |
| </para> | |
| </section> | |
| <section> | |
| <title>Registration and Configuration</title> | |
| <para> | |
| To use capabilities of Jersey Spring 3 DI support in your JAX-RS/Jersey application you need to have | |
| the above mentioned module on your class-path. | |
| </para> | |
| </section> | |
| <section> | |
| <title>Example</title> | |
| <para>To see an example of Spring DI support in Jersey refer to the | |
| <link xlink:href='&jersey.github.examples.uri;/helloworld-spring-webapp'>Spring DI Example</link>.</para> | |
| </section> | |
| </chapter> |