Spring Data Neo4j - @Autowired Repository == null

时间:2012-07-26 08:51:31

标签: spring neo4j annotations autowired spring-data-neo4j

我尝试使用Spring Data Neo4j编写一个webapp。

我有一个存储库:

public interface UserRepository extends GraphRepository<Neo4jUser> {} 

applicationcontext.xml:

...
<context:component-scan base-package="de.wilke.test.neo4j" >
    <context:exclude-filter type="annotation" 
          expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- REST Connection to Neo4j server --> 
<bean id="restGraphDatabase" 
    class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
    <constructor-arg value="http://localhost:7474/db/data/" />
</bean>

<bean id="myservice" class="de.wilke.test.neo4j.Neo4jResource">
</bean>

<!-- Neo4j configuration (template) -->
<neo4j:config graphDatabaseService="restGraphDatabase" />

<!-- Package w/ automagic repositories -->
<neo4j:repositories base-package="de.wilke.test.repository" /> 

我的Neo4jResource:

@Controller
public class Neo4jResource {

    @Autowired
    public static UserRepository repo;
    ...

现在不能在Controller中使用UserRepository,因为它是null ...

错误在哪里?

2 个答案:

答案 0 :(得分:0)

@Autowired不适用于static字段。

从设计的角度来看,创建此字段static也不是一个好主意。

答案 1 :(得分:0)

我能想到的几件事情:

  1. 您的<neo4j:repositories base-package=".."/> is not correct
  2. 您未正确加载applicationContextrepo无法正确实例化
  3. 先检查您的包裹。另外,您的主要应用程序中是否包含以下内容?

    ConfigurableApplicationContext context;
    context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
    
    Neo4jResource myBean = context.getBean(Neo4jResource.class);
    myBean.functionThatUsesTheRepo();
    

    希望这有助于......