尽管进行了所有扫描,Springboot仍找不到我的自动装配的bean,这是为什么?
来源:爱站网时间:2021-11-04编辑:网友分享
爱站技术小编最近遇到了一个难题:尽管进行了所有扫描,Springboot仍找不到我的自动装配的bean,这是为什么?为此小编找了很多资料。终于整合出了一篇实用性价值很高的文章供大家参考。
问题描述
所以我有一个名为ClientFactory
的类,我使用jar将其导入到项目中。看起来像这样:
@Component
public class ClientFactory {
@Autowired
private Client client;
public Factory() {
}
public Client get() {
return this.client;
}
}
和我使用此类的班级看起来像:
@SpringBootApplication(scanBasePackages = {"path.to.client.*"})
@EnableAutoConfiguration
public class ProjectClient {
@Autowired
public ClientFactory clientFactory;
public ProjectClient() {}
public String getSomething(String something){
Client client = (Client) clientFactory.get();
return "x";
}
}
并且我从测试类中调用这段代码:
@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Disabled
@TestPropertySource(properties = { //
"some.property=value", //
})
public class SomeTests {
@Autowired
ProjectClient p;
@Test
public void sampleTest() throws Exception {
p.getSomething("sample");
}
}
并且出现以下错误:
Field clientFactory in ProjectClient required a bean of type 'ClientFactory' that could not be found.
Action:
Consider defining a bean of type 'ClientFactory' in your configuration.
我已经尝试了实体,组件和程序包扫描的所有组合,但似乎没有任何效果。该应用程序根本找不到那个bean,我已经在谷歌上搜索了很多东西,而且似乎找不到找到使它工作的方法-我是Spring Boot的新手-请帮助:(
思路一:
我相信该类的编译不正确。
@Component
public class ClientFactory {
@Autowired
private Client client;
public Factory() {
}
public Client get() {
return this.client;
}
}
虽然类名是ClientFactory,但构造函数已定义为Factory,编译器无法编译它。
请您将工厂更改为ClientFactory (或删除默认构造函数,如果您没有特定用途),然后重试
思路二:
我花了太长时间,但我发现了。我对ProjectClient
进行了如下更改:
@SpringBootApplication()
@ComponentScan(basePackages = {"path.to.*"})
public class ProjectClient {
我猜测到客户端的路径不正确或无法检测到(我使用相同的路径导入该类)。
思路三:
好像您已经忘记在测试课上添加@RunWith(SpringRunner.class)
。
思路四:
由于您是通过从jar导入来引用clientfactory
,所以使用bean批注创建clientFactory
@Bean
public Clientfactory clientfactory () {
return new Clientfactory ();
}
以上内容就是爱站技术频道小编为大家分享的尽管进行了所有扫描,Springboot仍找不到我的自动装配的bean,这是为什么?看完以上分享之后,大家应该都知道原因和解决方法了吧。