【发布时间】:2011-07-13 00:07:45
【问题描述】:
我正在尝试将服务注入到使用 Jersey 的 Rest 类中。
无论我尝试注入什么或如何尝试注入此类,在运行时似乎都显示为 null。查看日志文件显示在初始化 Web 应用程序时正在调用 setJsonTestService,并且此时它不为空。但是,稍后通过对此类的 PUT 请求访问它时,它为空。
我完全糊涂了。
类如下所示:
@Named
@Path("JsonTest")
public class JsonTest {
@Context
Request request;
@Context
UriInfo uriInfo;
protected final Logger log = Logger.getLogger(getClass());
private JsonTestService jsonTestService;
@Autowired
public void setJsonTestSerivce(JsonTestService jsonTestService) {
log.info("Setting JsonTestService.");
if (jsonTestService == null) {
log.info("JsonTestService is null at injection");
}
this.jsonTestService = jsonTestService;
}
@Inject
public ScrapIntermediate scrapIntermediate; // just a plain empty class with an is true method
@PUT
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public void putJson(@PathParam("id") String id) {
log.info("Putting some json at " + id);
if (scrapIntermediate == null) {
log.info("scrapIntermediate is null...");
}
if (jsonTestService != null) {
jsonTestService.sendUpdate();
} else {
log.info("jsonTestService is null...");
}
}
}
有什么想法吗?
更新:
web.xml(泽西岛)
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>EDAS</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
【问题讨论】:
-
Web 请求是如何映射到这个 Jersey 类的?听起来 Spring 实例化了此类的一个实例,但 Jersey 实例化了另一个实例以用于处理请求。
-
我已更新问题以显示我的 web.xml 的泽西岛部分。那是我唯一提到泽西岛的其他地方。
-
并解决了。 Maven 和我的 Jersey 导入的问题导致 spring-context 2.5.6 和 3.0.5 都被导入。这导致了注解冲突,并导致同一类的不同实例化。一旦它允许我将其发布为答案......谢谢你的洞察力马特。
标签: java spring dependency-injection annotations jersey