围绕这个问题有很多问题,但我仍然没有找到阻止我的bean自动装配的根本原因。
我有以下级别的包:
com.pack.amg.service
com.pack.amg.repository
com.pack.amg.beans
com.pack.amg.resources
applicationContext.xml (这是web.xml中 ContextLoaderListner 所必需的)
<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"
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/data/neo4j
http://www.springframework.org/schema/data/neo4j/spring-neo4j-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<context:component-scan base-package="com.pack.amg" />
<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
<constructor-arg value="http://localhost:7474/db/data/" index="0" />
</bean>
<neo4j:config graphDatabaseService="graphDatabaseService"
base-package="com.pack.amg.repository" />
<neo4j:repositories base-package="com.pack.amg.repository" />
<tx:annotation-driven mode="proxy" />
我期待在这里使用<context:component-scan base-package="com.pack.amg" />
自动扫描我的所有包和子包及其类,这可能是真的但根本不起作用..!以下是我的REST资源:
TestResource.java
@Path("/")
@Service
public class TestResource
{
@Autowired
private MyService myService;
@Path("/save")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getResponse(ParamBeans bean)
{
System.out.println(bean);
String str = myService.save(bean); // <-- here myService is evaluating as null !!
return Response.ok(str).build();
}
}
MyService.java
@Service
public class MyService
{
@Autowired
private MyRepository repository;
public String save(ParamBeans bean)
{
return "Saved";
}
}
我的战争是在没有任何异常的情况下正确部署,但在调用我的REST服务时,它将MyService评估为null。有谁知道为什么?感谢
答案 0 :(得分:2)
M.Deinum是对的。你必须让你的春天知道你的运动衫。我以前遇到过同样的问题,您需要在pom.xml中添加其他依赖项和配置,如下所示:
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.18.1</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.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
并从web.xml替换旧的Jersey servlet实现,其中包括以下内容:
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.your.package.resources</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern> <!-- depending upon your choice -->
</servlet-mapping>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
属于最新的依赖性,即jersey-spring。希望这有帮助
正如cronemberger所建议的那样,Jersey 2 lib似乎存在一些问题。因此,上面的实现可能不适用于Jersey 2,但我需要检查相同的内容。