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