JerseyとSpringの連携方法

前回作成したJerseyのサービスにSpringの対応を追加してみたいと思います。
前回の内容は、下のリンクを参照して下さい。
JerseyでのJSONサービス - クロノスの技術系ブログ
それと、Springの基本設定は、下のリンクを参照して下さい。
Spring Frameworkの初期設定に関して - クロノスの技術系ブログ
それで、Apache Mavenのpom.xmlにSpringとJerseyとSpring連携用ライブラリを追加します。

<dependency>
	<groupId>com.sun.jersey.contribs</groupId>
	<artifactId>jersey-spring</artifactId>
	<version>1.18</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-asm</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
		</exclusion>
		<exclusion>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-server</artifactId>
		</exclusion>
		<exclusion>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-server</artifactId>
		</exclusion>
	</exclusions>
</dependency>

次に、アプリケーションの web.xml ファイルに
Springの設定とSpring連携用のコンテナを定義します。

<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
		/WEB-INF/config/spring/applicationContext.xml
	</param-value>
</context-param>
<servlet>
	<servlet-name>Jersey Spring Web Application</servlet-name>
	<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>Jersey Spring Web Application</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

これで、JerseyのサービスとSpringが連動します。
あとは、いつも通り、
下のようにSpringのDI機能を利用したサービスの実装が可能です。

@Path("/service")
@Service("jsonService")
public class JsonService {
   @Autowired
   @Qualifier("logic")
   private Logic logic;
   @GET
   @Path("/get")
   public JSONWithPadding get(
      @QueryParam("callback") @DefaultValue("callback") String callback,
      @Context HttpServletResponse response)  {
      response.addHeader(Access-Control-Allow-Origin, "*");
      .....
   }
}