我正在将我们的应用程序从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());
}