私はJersey 2でSpring 4を使用しようとしていましたが、jersey-spring3拡張を使用すると、@Named
Springによって管理される注釈付きリソースを作成できません。これらは、Springが管理するために@Component
という注釈を付ける必要があります。Jersey 2 + SpringでのJSR-330アノテーションの使用
リソースに@Named
と注釈が付けられている場合、HK2はそのリソースを管理することを「引き継ぐ」ようです。次の春のApplicationContext起動
Oct 18, 2017 3:11:44 PM org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor <init>
INFO: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
Oct 18, 2017 3:11:44 PM com.example.jersey.webapp.Resource init
INFO: Creating -> [email protected] injected with -> [email protected]
Oct 18, 2017 3:11:45 PM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 249 ms
とのカップルの後に印刷され、次のログメッセージに
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-init-method="init">
<context:component-scan base-package="com.example.jersey.webapp"/>
<bean id="greeting" class="com.example.jersey.spring.Greeting"/>
</beans>
結果と
リソース
import com.example.jersey.spring.Greeting;
import java.util.logging.Logger;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Named
@Singleton
@Path("resource")
public class Resource {
private static final Logger logger = Logger.getLogger("Resource");
public void init() {
logger.info("Creating -> " + this + " injected with -> " + greeting);
}
@Inject
private Greeting greeting;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
logger.info("Working on " + this + " Greeting " + greeting);
return "Got it!";
}
}
GETコール。
Oct 18, 2017 3:11:56 PM com.example.jersey.webapp.Resource getIt
INFO: Working on [email protected] Greeting [email protected]
Oct 18, 2017 3:12:03 PM com.example.jersey.webapp.Resource getIt
INFO: Working on [email protected] Greeting [email protected]
だから、SpringはBeanを作成するように見えますが、これは要求を処理するために使用されたものではありません。ただし、Named
の代わりにComponent
を使用すると、ライフサイクル全体がSpringによって管理されます。
標準@Named
アノテーションを使用して、Springがリソースのライフサイクルを完全に管理する方法はありますか?