Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让我的Spring Boot应用程序识别此服务?_Java_Spring_Spring Boot - Fatal编程技术网

Java 如何让我的Spring Boot应用程序识别此服务?

Java 如何让我的Spring Boot应用程序识别此服务?,java,spring,spring-boot,Java,Spring,Spring Boot,我正在开发一个基于SpringBoot2.3的应用程序。我有一个控制器,当前有一个自动连线依赖项: 公共类验证控制器{ 私有验证服务验证服务; @自动连线 公共验证控制器(验证服务验证服务){ this.validationService=validationService; } } 我有在这个服务上运行的测试并且通过了。我正在尝试将第二个服务添加到此控制器: 公共类验证控制器{ 私有验证服务验证服务; 专用令牌服务令牌服务; @自动连线 公共验证控制器(验证服务验证服务,令牌服务令牌服务){

我正在开发一个基于SpringBoot2.3的应用程序。我有一个控制器,当前有一个自动连线依赖项:

公共类验证控制器{
私有验证服务验证服务;
@自动连线
公共验证控制器(验证服务验证服务){
this.validationService=validationService;
}
}
我有在这个服务上运行的测试并且通过了。我正在尝试将第二个服务添加到此控制器:

公共类验证控制器{
私有验证服务验证服务;
专用令牌服务令牌服务;
@自动连线
公共验证控制器(验证服务验证服务,令牌服务令牌服务){
this.validationService=validationService;
this.tokenService=tokenService;
}
}
当我这样做时,我的所有
ValidationControllerTest
案例都开始失败。我在堆栈跟踪中发现此消息:

原因:org.springframework.beans.factory.NoSuchBean定义异常:没有可用的“com.example.auth.service.service.TokenService”类型的合格bean:至少需要1个符合autowire候选条件的bean。依赖项批注:{}

我的
TokenService
界面如下:

公共接口令牌服务{
JsonWebToken getToken(用户、帐户);
}
该实现使用
@Service
注释进行注释:

@服务
公共类TokenServiceImpl实现TokenService{
私有最终字符串url;
私有最终字符串用户名;
私有最终字符串密码;
公共令牌服务impl(
@值(“${service.url}”)字符串url,
@值(“${service.username}”)字符串用户名,
@值(“${service.password}”)字符串密码
) {
this.url=url;
this.username=用户名;
this.password=密码;
}
@凌驾
公共JsonWebToken getToken(用户、帐户){
...
返回jsonWebToken;
}
}
就注释而言,我的
ValidationService
与我的
TokenService
非常相似,但无论出于何种原因,Spring Boot都可以找到我的
ValidationService
很好,但我的
TokenService
却找不到,它位于同一个地方

如何确保Spring Boot可以找到我的
令牌服务


非常感谢您的评论

您是否可以在测试中再次检查spring应用程序上下文

据我所知,
@WebMvcTest
注释将加载我的应用程序上下文,这准确吗?我的
ValidationControllerTest
类上有以下注释:

@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers=ValidationController.class)
这足以在测试中加载应用程序上下文吗

您能否再次检查此上下文是否对
TokenServiceImpl
所在的包进行组件扫描

我是Spring Boot的新手,仍然在尝试组件扫描。在我的主
AuthServiceApplication
类上有一个
@SpringBootApplication
注释,它位于
com.example.auth.service
包中。一:

如果您的其他软件包层次结构位于带有
@SpringBootApplication
注释的主应用程序下方,则隐式组件扫描将覆盖您

我的
TokenServiceImpl
类位于
com.example.auth.service.service.impl
,我认为这意味着它在主应用程序的层次结构中,因此应该被隐式组件扫描覆盖。准确吗

您能否再次检查
ValidationService
是否未在测试套件中的某个位置进行模拟(通过@Mock注释或其他方式)

我的
validationservicempltest中确实包含以下内容:

@MockBean
专用令牌服务令牌服务;

看起来我现在没有用它。我将删除这个
@MockBean
,看看这是否奏效。

你能再次检查1-你在测试中打开了一个spring应用程序上下文2-这个上下文对
TokenServiceImpl
驻留的包进行组件扫描3-
ValidationService
没有被模拟吗(通过
@Mock
注释或其他方式)测试套件中的某个地方。此外:在堆栈跟踪之后,是否会出现进一步的错误,该堆栈跟踪表明无法创建
TokenServiceImpl
(可能是由于缺少注入的
@值或其他原因)。您可以发布您的测试类吗?您的项目中是否有@Configuration类。可能您需要更改组件扫描的范围。可能未扫描Service TokenServiceImpl包