【问题标题】:org.springframework.beans.factory.UnsatisfiedDependencyException Springbootorg.springframework.beans.factory.UnsatisfiedDependencyException Springboot
【发布时间】:2021-07-27 22:54:46
【问题描述】:

Estou com o erro abaixo ao subir o projeto springboot: 4164 --- [restartedMain] ConditionEvaluationReportLoggingListener:

启动 ApplicationContext 时出错。要显示条件报告,请在启用“调试”的情况下重新运行您的应用程序。 2021-05-05 12:45:03.927 错误 14164 --- [restartedMain] os.boot.SpringApplication:应用程序运行失败

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“pessoaController”的bean时出错:通过字段“repositorioPessoa”表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在应用程序上声明的 @EnableJpaRepositories 中定义的 br.com.itss.pmrun.dominio.erp.pessoa.repositorio.RepositorioPessoa 中定义的名称为“repositorioPessoa”的 bean 创建时出错:调用初始化方法失败;嵌套异常是 java.lang.IllegalArgumentException:无法为方法 public abstract java.util.List br.com.itss.pmrun.dominio.erp.pessoa.repositorio.CustomRepositorioPessoa.listarPessoas(java.lang.String) 创建查询!没有找到类型 Pessoa 的属性 listarPessoas! 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[spring-context-5.3.4.jar:5.3.4] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) ~[spring-context-5.3.4.jar:5.3.4] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.3.jar:2.4.3] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.3.jar:2.4.3] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.3.jar:2.4.3] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.3.jar:2.4.3] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.3.jar:2.4.3] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.3.jar:2.4.3] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.3.jar:2.4.3] 在 br.com.itss.pmrun.apiweb.Application.main(Application.java:24) ~[classes/:na] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] 在 org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.3.jar:2.4.3] 引起:org.springframework.beans.factory.BeanCreationException:在应用程序上声明的@EnableJpaRepositories 中定义的br.com.itss.pmrun.dominio.erp.pessoa.repositorio.RepositorioPessoa 中定义的名称为“repositorioPessoa”的bean 创建错误:调用初始化方法失败;嵌套异常是 java.lang.IllegalArgumentException:无法为方法 public abstract java.util.List br.com.itss.pmrun.dominio.erp.pessoa.repositorio.CustomRepositorioPessoa.listarPessoas(java.lang.String) 创建查询!没有找到类型 Pessoa 的属性 listarPessoas! 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.4.jar:5.3.4] ...省略了26个常用框架 原因:java.lang.IllegalArgumentException:无法为方法 public abstract java.util.List br.com.itss.pmrun.dominio.erp.pessoa.repositorio.CustomRepositorioPessoa.listarPessoas(java.lang.String) 创建查询!没有找到类型 Pessoa 的属性 listarPessoas! 在 org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:96) ~[spring-data-jpa-2.4.5.jar:2.4.5] 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:107) ~[spring-data-jpa-2.4.5.jar:2.4.5] 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:218) ~[spring-data-jpa-2.4.5.jar:2.4.5] 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:81) ~[spring-data-jpa-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:100) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(QueryExecutorMethodInterceptor.java:93) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] 在 java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) ~[na:na] 在 java.base/java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Collections.java:1054) ~[na:na] 在 java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] 在 java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] 在 java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:95) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:85) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 java.base/java.util.Optional.map(Optional.java:265) ~[na:na] 在 org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.(QueryExecutorMethodInterceptor.java:85) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:303) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:323) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.util.Lazy.getNullable(Lazy.java:230) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.util.Lazy.get(Lazy.java:114) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:329) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:144) ~[spring-data-jpa-2.4.5.jar:2.4.5] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.4.jar:5.3.4] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.4.jar:5.3.4] ...省略了36个常用框架 原因:org.springframework.data.mapping.PropertyReferenceException:没有找到类型 Pessoa 的属性 listarPessoas! 在 org.springframework.data.mapping.PropertyPath.(PropertyPath.java:90) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:437) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:413) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.mapping.PropertyPath.lambda$0(PropertyPath.java:366) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na] 在 org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:348) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:331) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.query.parser.Part.(Part.java:81) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:249) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] 在 java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na] 在 java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] 在 java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] 在 java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na] 在 org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:250) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:383) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] 在 java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na] 在 java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] 在 java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na] 在 java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] 在 java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na] 在 org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:384) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.repository.query.parser.PartTree.(PartTree.java:92) ~[spring-data-commons-2.4.5.jar:2.4.5] 在 org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:89) ~[spring-data-jpa-2.4.5.jar:2.4.5] ...省略了62个常用帧

与目标VM断开连接,地址:'javadebug',传输:'shared memory'

进程以退出代码 0 结束

PessoaController:

@RestController
@RequiredArgsConstructor
@RequestMapping("/pessoa")
public class PessoaController implements ListagemController<PessoaDto> {

    @Autowired
    private RepositorioPessoa repositorioPessoa;

    @Override
    public List<PessoaDto> listarSelects(String filtro) {
        return repositorioPessoa.listarPessoas(filtro);
    }
}

RepositorioPessoa

@Repository
public interface RepositorioPessoa extends RepositorioBase<Pessoa>, CustomRepositorioPessoa {
}

CustomRepositorioPessoa

public interface CustomRepositorioPessoa {

    List<PessoaDto> listarPessoas(String filtro);
}

RepositorioPessoaImpl

@Repository
public class RespositorioPessoaImpl implements CustomRepositorioPessoa {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public List<PessoaDto> listarPessoas(String filtro) {

        var builder = this.entityManager.getCriteriaBuilder();
        var criteria = builder.createQuery(PessoaDto.class);
        var root = criteria.from(Pessoa.class);

        var selection = builder.construct(PessoaDto.class,
                root.get("id"),
                root.get("nome"),
                root.get("matricula"));

        criteria.select(selection);

        Specification specs = (root1, criteriaQuery, criteriaBuilder) -> {
            List<Predicate> filtros = new ArrayList<>();
            if(filtro != null && !filtro.isEmpty()) {
                criteriaBuilder.or(
                        criteriaBuilder.like(root1.get("nome"), "%" + filtro + "%"),
                        criteriaBuilder.like(root1.get("matricula"), "%" + filtro + "%")
                );
            }
            return criteriaBuilder.and(filtros.toArray(new Predicate[0]));
        };

        criteria.where(specs.toPredicate(root, criteria, builder));

        TypedQuery<PessoaDto> query = this.entityManager.createQuery(criteria);

        return query.getResultList();

    }
}

【问题讨论】:

标签: java spring-boot


【解决方案1】:

您的自定义存储库名称必须是

CustomRepositorioPessoaImpl

这是 Spring Data 要求的。

是接口名和后缀Impl

请查看文档https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference

【讨论】:

  • 您是否阅读了文档以及您现在收到什么错误消息?
【解决方案2】:

您已将 RepositorioPessoa 注释为 Spring 存储库并扩展了 CustomRepositorioPessoa 接口。带有@Repository 注释的接口不需要实现。这里 spring 正在尝试创建 RepositorioPessoa 的实例,并且由于它具有从 CustomRepositorioPessoa 继承的 listarPessoas 方法,因此 spring 将 listarPessoas 名称视为 Pessoa 实体的属性,因此发生错误。所以你需要了解@Repository注解是如何工作的。

br.com.itss.pmrun.dominio.erp.pessoa.repositorio.CustomRepositorioPessoa.listarPessoas(java.lang.String)!
No property listarPessoas found for type Pessoa!```

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 2016-04-16
    • 2019-03-02
    • 2015-02-24
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2018-10-24
    • 2020-06-01
    相关资源
    最近更新 更多