我正在将我们的应用程序从Spring Data Neo4j 3.x升级到Spring Data Neo4j 4.0.0.BUILD-SNAPSHOT,该应用程序在sdn-university之后进行了建模。当添加自动装配的Neo4jTemplate实例时,在启动时会引发以下异常:


  造成原因:
  org.springframework.beans.factory.BeanCreationException:无法
  自动连线栏位:私人
  org.springframework.data.neo4j.template.Neo4jTemplate
  school.service.UserServiceImpl.template;嵌套异常为
  org.springframework.beans.factory.NoSuchBeanDefinitionException:否
  类型的合格豆
  找到了[org.springframework.data.neo4j.template.Neo4jTemplate]
  依赖关系:至少需要1个符合自动装配条件的bean
  此依赖项的候选者。依赖注释:
  {@ org.springframework.beans.factory.annotation.Autowired(required = true)}
    在
  org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:571)
    在
  org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    在
  org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ...另外21个...


为了验证结果,我采用了最新的sdn-university-现在也使用了来自https://github.com/neo4j-examples/sdn4-university的SDN4.x 4.0.0.BUILD-SNAPSHOT-,并修改了StudentServiceImpl以包含自动装配的实例Neo4jTemplate。发出mvn clean spring-boot:run -U后,将再现在我们的应用程序中看到的错误。

要成功使用Neo4jTemplate,需要将什么更改为sdn-university

最佳答案

这在SDN4中不起作用的原因是Neo4jTemplate及其接口Neo4jOperations都用@Repository注释。因此,Spring会创建Neo4jTemplate类的代理,该类由于类型不匹配而无法正确自动连接。

最好的方法是针对Neo4jOperations接口而不是Neo4jTemplate类进行编码。尽管最终我还是会个人支持针对接口进行编码,但仍不确定是否可以在SDN4的最终版本中实现。

您可能还需要声明Neo4jOperations作为bean工厂方法的返回类型:

@Bean
public Neo4jOperations neo4jTemplate() throws Exception {
    return new Neo4jTemplate(getSession());
}

10-05 22:21