我正在嘗試將服務注入到正在使用Jersey的Rest類中。澤西島和彈簧集成 - 在運行時注入bean爲空
無論我嘗試向該類中注入什麼或如何注入,似乎都會在運行時顯示爲null。查看日誌文件顯示,當Web應用程序初始化時setJsonTestService被調用,並且此時它不爲null。但是,稍後通過對此類的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的Jersey部分。那是我提到澤西島的唯一其他地方。 – zclark
並解決。 Maven和我的Jersey導入導致問題導致2.5.6和3.0.5的spring-context被導入。這導致註釋衝突並導致同一類的不同實例化。將它作爲一個答案,一旦它讓我...感謝您的見解馬特。 – zclark