接口的 Spring Boot 依赖注入

时间:2021-05-20 13:53:40

标签: java spring spring-boot dependency-injection

我有 2 个 spring boot 微服务,比如说核心和持久性。其中持久性依赖于核心。

我在核心中定义了一个接口,其实现在持久化内部,如下所示:

核心

package com.mine.service;
public interface MyDaoService {
}

坚持

package com.mine.service.impl;
@Service
public class MyDaoServiceImpl implements MyDaoService {
}

我正在尝试将 MyDaoService 注入另一个仅在核心中的服务:

核心

package com.mine.service;
@Service
public class MyService {

private final MyDaoService myDaoService;

    public MyService(MyDaoService myDaoService) {
        this.myDaoService = myDaoService;
    }
}

在执行此操作时,我收到了这个奇怪的错误:

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

Description:

Parameter 0 of constructor in com.mine.service.MyService required a bean of type 'com.mine.service.MyDaoService' that could not be found.


Action:

Consider defining a bean of type 'com.mine.service.MyDaoService' in your configuration.

谁能解释一下为什么?

注意:我已经在 springbootapplication 的组件扫描中包含了 com.mine.service 如下

package com.mine.restpi;
@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages = "com.mine")
public class MyRestApiApplication {
public static void main(String[] args) {
        SpringApplication.run(MyRestApiApplication.class, args);
    }
}

3 个答案:

答案 0 :(得分:0)

尝试将 @Service 注释添加到您的 impl 类,并将 @Autowired 注释添加到构造函数。

// Include the @Service annotation
@Service
public class MyServiceImpl implements MyService {

}

// Include the @Service annotation and @Autowired annotation on the constructor
@Service
public class MyDaoServiceImpl implements MyDaoService {

    private final MyService myService ;

    @Autowired
    public MyDaoServiceImpl(MyService myService){
       this.myService = myService;
    }
}

答案 1 :(得分:0)

如错误消息提示中所述:考虑在您的配置中定义一个“com.mine.service.MyDaoService”类型的 bean 来解决这个问题,您可以在您的包中定义 {{1}一个名为 com.mine 的配置类用 @Configuration 注释,包括一个名为 myDaoService 的 bean,如下所示:

MyConfiguration

答案 2 :(得分:0)

尝试以下操作,将 MyRestApiApplication 类移至 com.mine 包并删除 @ComponentScan 注释。

package com.mine;
@SpringBootApplication
@EnableScheduling
public class MyRestApiApplication {
public static void main(String[] args) {
        SpringApplication.run(MyRestApiApplication.class, args);
    }
}