当前位置: 首页 > 知识库问答 >
问题:

NoSuchBeanDefinitionException[重复]

晏德佑
2023-03-14

我开发了一个从REST API获取访问令牌的简单类。它还没有完全实现,但它的想法是将令牌持久化到数据库中。我还有一个函数来检查是否有任何可用的令牌,如果没有,它就调用获取新令牌的函数。我还开发了一个单元测试来检查我是否获得了令牌。

我在运行测试时遇到了一个问题,NoSuchBeanDefinitionException问题。我不知道我做错了什么。我对Spring boot还很陌生,所以感谢所有的帮助。下面是我的测试和与RESTendpoint通信的类的代码。

package com.foo.receivable.domain.token;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

import java.time.LocalDateTime;
import java.util.Arrays;

public class TokenIntegration {

    static final String GET_TOKEN_URI = "";

    static final String API_CLIENT_ID = "";
    static final String API_CLIENT_SECRET = "";
    static final String API_AUDIENCE = "";
    static final String API_GRANT_TYPE = "";

    @Autowired
    private RestTemplate restTemplate;
    private TokenRepository repository;

    private Token API_RetrieveToken(){
        Token t = new Token();
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
            headers.set("client_id", API_CLIENT_ID);
            headers.set("client_secrect", API_CLIENT_SECRET);
            headers.set("audience", API_AUDIENCE);
            headers.set("grant_type", API_GRANT_TYPE);

            HttpEntity<String> entity = new HttpEntity<>(headers);
            ResponseEntity<String> response = restTemplate.exchange(GET_TOKEN_URI, HttpMethod.POST, entity, String.class);
//not implemented yet

        }catch(Exception e){
            e.printStackTrace();
        }
        return t;
    }

    public Token GetAccessToken(){
        Token token;
        try {
            token = repository.findByExpired(LocalDateTime.now());
            if(token == null){
                token = API_RetrieveToken();
            }
        }
        catch (Exception e){
            token = null;
            e.printStackTrace();
        }
        return token;
    }
}
package com.foo.receivable.domain.token;

import com.foo.receivable.infra.AbstractTest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TokenIntegrationTest  extends AbstractTest {

@Autowired
private TokenIntegration integration;

@Test
void ShouldReturnTokenObject(){
    final Token token = integration.GetAccessToken();
    if(token == null){
        //not implemented yet
    }
    assertEquals(Token.class, token.getClass());
}
}
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.foo.receivable.domain.token.TokenIntegrationTest': Unsatisfied dependency expressed through field 'integration'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.foo.receivable.domain.token.TokenIntegration' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

编辑:问题是@component注释丢失,因此spring无法将我的TokenIntegration类识别为bean。在我更改它之后,我得到了另一个关于RestTemplate bean的错误。在这方面有什么帮助吗?

***************************
APPLICATION FAILED TO START
***************************

Description:

Field restTemplate in com.foo.receivable.domain.token.TokenIntegration required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration.

2021-05-10 11:44:50.801 ERROR 19916 --- [           main] o.s.test.context.TestContextManager      : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@70ab2d48] to prepare test instance [com.foo.receivable.domain.token.TokenIntegrationTest@22a9170c]

java.lang.IllegalStateException: Failed to load ApplicationContext

共有1个答案

傅皓君
2023-03-14

您需要定义spring要注入的类。您既可以用xml也可以用Anotation来完成。PS:

@Service
public class TokenIntegration {
}
 类似资料:
  • 我还有bean,它与位于同一个包中,并扩展了相同的类,但它的注入没有问题 你知道为什么会出现这个例外吗?

  • 我正在尝试使用基于Java的配置而不是来自这篇博文的XML配置将配置引入Spring Boot:http://blog.novoj.net/2012/03/27/combining-custom-annotations-for-securing-methods-with-spring-security/ 我得到以下例外: org . spring framework . beans . facto

  • 我想在中测试我的restendpoint。我用编写了一个测试。 这是我在中的方法 现在,当我运行测试时,我得到一个错误 Spring Boot:v2.1.0.发行版 编辑:它起作用了。我怀念我的中的...我删除了这段代码,现在它起作用了

  • 你好,Iam在spring(IntelliJ IDEA终极版)中使用AspectJ风格的AOP时遇到了麻烦。不使用方面时,输出与预期相同。但是当我将方面类受众声明为Bean时,我得到了Macbeth类的NoSuchBeanDefinitionException。 2017年8月27日上午9:38:39 org.springframework.context.annotationconfigappl

  • 我之前在我的项目中使用了XML配置,一切都正常工作。 我们正在逐步转向java配置,所以现在我正处于一个混合使用java和XML配置的阶段。 我得到以下错误: UnsatisfiedDependencyException:创建名为“bean B”的bean时出错:通过字段“bean A”表示未满足的依赖关系; 嵌套异常是org.springframework.beans.factory.nosuc