【问题标题】:Spring Data Neo4j 4.x and sdn-university: Neo4jTemplate no autowire'ingSpring Data Neo4j 4.x 和 sdn-university:Neo4jTemplate 没有自动装配
【发布时间】:2015-08-05 16:24:20
【问题描述】:

我正在升级我们的应用程序,它以sdn-university 为模型,从 Spring Data Neo4j 3.x 升级到 Spring Data Neo4j 4.0.0.BUILD-SNAPSHOT。添加自动装配的 Neo4jTemplate 实例时,启动时会引发以下异常:

... 原因: org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:私有 org.springframework.data.neo4j.template.Neo4jTemplate school.service.UserServiceImpl.template;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 [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 以包含一个自动装配'd Neo4jTemplate 的实例。发出mvn clean spring-boot:run -U 后,我们的应用程序中看到的错误就会重现。

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

【问题讨论】:

    标签: java spring spring-data-neo4j spring-data-neo4j-4


    【解决方案1】:

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

    最好的方法是针对Neo4jOperations 接口而不是Neo4jTemplate 类进行编码。在 SDN4 的最终版本中是否会出现这种情况尚未确定,尽管我个人总是倾向于针对接口进行编码。

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

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

    【讨论】:

    • 我已经在我们的应用程序和 sdn-university 中用 Neo4jOperations 替换了 Neo4jTemplate 的单个实例,但每个应用程序仍然无法以相同的错误和堆栈跟踪启动。如果我理解正确,声明一个“@Autowired private NeoOperations neoOperations”可以/应该/应该工作,对吗?
    • 是的,将自动装配字段类型更改为Neo4jOperations 应该可以解决问题。你的 @Bean 方法在你的配置类中是什么样子的?
    • 我错过了您在上面提供的上述@Bean 定义。一旦我补充说事情现在按预期工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多