创建名称为“*repository”的 bean 时出错

Mr.*_*iik -5 java jpa repository maven spring-data-jpa

我有一个 Maven 项目。pom.xml

\n
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\n    <modelVersion>4.0.0</modelVersion>\n\n    <groupId>root</groupId>\n    <artifactId>CourseWork5</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>jar</packaging>\n\n    <name>coursework</name>\n    <description></description>\n\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>1.4.0.RELEASE</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n\n    <properties>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-jpa</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-security</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-thymeleaf</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-devtools</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.security</groupId>\n            <artifactId>spring-security-config</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>org.thymeleaf.extras</groupId>\n            <artifactId>thymeleaf-extras-springsecurity4</artifactId>\n        </dependency>\n        <dependency>\n            <groupId>commons-io</groupId>\n            <artifactId>commons-io</artifactId>\n            <version>2.2</version>\n        </dependency>\n    </dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n    </build>\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n

另外,我有一个实体地址。

\n
package root.entity;\nimport javax.persistence.*;\n\n@Entity\n@Table(name = "Address")\npublic class Address {\n   ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我有这个条目的存储库。

\n
package root.repository;\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\nimport root.entity.Address;\n\n@Repository\npublic interface AddressRepository extends JpaRepository<Address, Integer> {\n   ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

以及带有实现的服务接口。

\n
package root.service.interfaces;\nimport root.entity.Address;\npublic interface AddressServiceInterface {\n    ...\n}\n\npackage root.service;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport root.entity.Address;\nimport root.repository.AddressRepository;\nimport root.service.interfaces.AddressServiceInterface;\n\n@Service\npublic class AddressService implements AddressServiceInterface{\n    ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的 application.properties 文件:

\n
#DB properties:\ndb.driver=com.mysql.jdbc.Driver\ndb.url=jdbc:mysql://localhost:3306/labsdb?useSSL=false\ndb.username=root\ndb.password=rootPassword\n\xc2\xa0\n#Hibernate Configuration:\ndb.hibernate.dialect=org.hibernate.dialect.MySQLDialect\ndb.hibernate.show_sql=true\ndb.entitymanager.packages.to.scan=root.entity\ndb.hibernate.hbm2ddl.auto = create\n\nspring.datasource.driverClassName=com.mysql.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/labsdb\nspring.datasource.username=root\nspring.datasource.password=rootPassword\n\nsecurity.require-ssl=false\n
Run Code Online (Sandbox Code Playgroud)\n

我的启动文件:

\n
package root;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n@SpringBootApplication\npublic class TestApp {\n    public static void main(String[] args) {\n        SpringApplication.run(TestApp.class, args);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,运行应用程序后出现错误:

\n
org.springframework.beans.factory.UnsatisfiedDependencyException:\nError creating bean with name 'addressController': Unsatisfied\ndependency expressed through field 'service'; nested exception is\norg.springframework.beans.factory.UnsatisfiedDependencyException:\nError creating bean with name 'addressService': Unsatisfied dependency\nexpressed through field 'repository'; nested exception is\norg.springframework.beans.factory.BeanCreationException: Error\ncreating bean with name 'addressRepository': Invocation of init method\nfailed; nested exception is java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n    at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:592)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:370)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:754)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)\n~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]   at\norg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)\n~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]   at\norg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)\n~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]  at\norg.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]   at\norg.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]   at\norg.springframework.boot.SpringApplication.run(SpringApplication.java:313)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]   at\norg.springframework.boot.SpringApplication.run(SpringApplication.java:1185)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]   at\norg.springframework.boot.SpringApplication.run(SpringApplication.java:1174)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]   at\nroot.TestApp.main(TestApp.java:10) [classes/:na]    at\nsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n~[na:1.8.0_65]  at\nsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n~[na:1.8.0_65]  at\nsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n~[na:1.8.0_65]  at java.lang.reflect.Method.invoke(Method.java:497)\n~[na:1.8.0_65]  at\norg.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)\n[spring-boot-devtools-1.4.0.RELEASE.jar:1.4.0.RELEASE] Caused by:\norg.springframework.beans.factory.UnsatisfiedDependencyException:\nError creating bean with name 'addressService': Unsatisfied dependency\nexpressed through field 'repository'; nested exception is\norg.springframework.beans.factory.BeanCreationException: Error\ncreating bean with name 'addressRepository': Invocation of init method\nfailed; nested exception is java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n    at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:592)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:370)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1131)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:589)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     ... 24 common frames\nomitted Caused by:\norg.springframework.beans.factory.BeanCreationException: Error\ncreating bean with name 'addressRepository': Invocation of init method\nfailed; nested exception is java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n    at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1131)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:589)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     ... 37 common frames\nomitted Caused by: java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n    at\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:199)\n~[spring-data-commons-1.12.2.RELEASE.jar:na]    at\norg.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266)\n~[spring-data-commons-1.12.2.RELEASE.jar:na]    at\norg.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252)\n~[spring-data-commons-1.12.2.RELEASE.jar:na]    at\norg.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:84)\n~[spring-data-jpa-1.3.3.jar:na]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]     ... 47 common frames\nomitted\n
Run Code Online (Sandbox Code Playgroud)\n

请帮助我。\n我有一个具有相同结构和逻辑的简单应用程序,但它运行良好。所以,我不知道如何解决这个问题。

\n

小智 7

添加@NoRepositoryBean到您的CrudRepository. 这将允许自动配置仍然发生,而无需手动设置组件扫描基础包。

该接口org.springframework.data.repository.Repository是实际 Spring 数据存储库的标记。由于您的CrudRepository扩展Repositoryspring 正在尝试初始化一个名为crudRepositoryfor T(本质上翻译为 Object)的 Spring 托管存储库。由于对象不受 Hibernate 管理,因此在启动时验证失败并崩溃。

@NoRepositoryBean将告诉 Spring 不要为实现Repository.