尽管进行了所有扫描,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,这是为什么?看完以上分享之后,大家应该都知道原因和解决方法了吧。

上一篇:为什么会出现一段代码出于某种原因没有采用每个数组项并将它们加在一起?

下一篇:如何判断一个字符串是否自然地按字母顺序排序?

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载