[英]Spring 4 + jersey integration @Autowired
我尝试了很多事情,但球衣中的“ searchservice”资源似乎是随机实例化的。 SearchResource中的SearchService几乎始终为null。
如您所见,我添加了spring-jersey依赖项。
这是我的代码:SearchResource(球衣,尝试实例化searchService)
@Path("search")
@Component
public class SearchResource {
private static final Logger LOGGER = Logger.getLogger(SearchResource.class);
@Context
private UriInfo context;
@Autowired
private SearchService searchService;
/**
* Creates a new instance of SearchResource
*/
public SearchResource() {
}
/**
* Retrieves representation of an instance of com.gehc.mpse.backend.ws.SearchResource
* @param search
* @param <error>
* @param authors
* @return an instance of java.lang.String
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response search(@QueryParam("query") String search, @QueryParam("authors") List<String> authors) {
System.out.println("searchservice :" + searchService);
Response res = searchService.searchQuery(search);
return res;
}
public SearchService getSearchService() {
return searchService;
}
public void setSearchService(SearchService searchService) {
this.searchService = searchService;
}
我的课程searchService:
@Component
public class SearchService {
private static final Logger LOGGER = Logger.getLogger(SearchService.class);
@Autowired
private IPublicationRepository repository;
@Autowired
private Neo4jTemplate template;
private static final Integer PAGE_SIZE = 20;
public SearchService() {
LOGGER.debug("search service initialzed " + this);
}
public Response searchQuery(String query) {
PageRequest request
= new PageRequest(1, PAGE_SIZE);
LOGGER.debug("repo : " + repository);
Page<Publication> res = repository.findPublicationByTitle(query, request);
//repository.query(query, null);
return Response.ok().entity(res.getContent()).build();
}
public IPublicationRepository getRepository() {
return repository;
}
public void setRepository(IPublicationRepository repository) {
this.repository = repository;
}
public Neo4jTemplate getTemplate() {
return template;
}
public void setTemplate(Neo4jTemplate template) {
this.template = template;
}
}
我的pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>3.2.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher</artifactId>
</exclusion>
<exclusion>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring [End] -->
<!--neo4j -->
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>2.1.5</version>
</dependency>
<!-- end neo4j -->
<dependency>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-rt</artifactId>
<version>2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-java2wsdl</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-api</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-impl</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.13</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.13</version>
<scope>provided</scope>
</dependency>
</dependencies>
我的web.xml:
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>PMSE</display-name>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/context.xml</param-value>
</context-param>
</web-app>
这是我的代码:SearchResource(球衣,尝试实例化searchService)
请注意,泽西岛不会实例化您的SearchService。 因为您在资源上具有@Component
批注,所以Spring应该将SearchService连接到SearchResource中,并且Jersey应该从Spring中检索SearchResource实例。
您的Spring上下文是否被创建了两次(一次由Jersey创建,一次由Spring的ContextLoaderListener创建)? 在Jersey启动之前,Spring上下文是否已完全初始化 ? Jersey寻找Spring上下文,然后在找不到上下文的情况下尝试自行创建 (第98行)。
泽西岛(Jersey)的Spring整合有些困难。 最好的选择是在SpringComponentProvider和AutowiredInjectResolver中设置一些断点,然后在调试器中逐步进行。 调试时,可以设置suspend=y
以便在您实际连接调试器之前什么都不会发生。 有关调试设置的更多详细信息,请参见此答案 。
我还将检查Jersey Jira的春季相关问题,并查看是否有任何未解决的问题适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.