找不到接口类型的Bean

时间:2020-02-13 01:04:16

标签: java spring spring-boot model-view-controller

首先,我想说我已经阅读了类似的问题并实现了自己的答案,但似乎没有任何效果。 TL; DR我正在从“ Spring”这本书中实现一个示例,这是我的问题。 入门班:

package com.example.demo;
@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.example.demo.dao", "com.example.demo.model", "com.example.demo.service"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

控制器类:

package com.example.demo.api;
@Controller
@RequestMapping("/spittles")
public class SpittleController {
    private SpittleRepository a;
    @Autowired
    public SpittleController(@Qualifier("abc") SpittleRepository a){
        this.a = a;
    }
}

接口:

package com.example.demo.dao;
@Repository("abc")
public interface SpittleRepository {
    List<Spittle> findSpittles(long max, int count);
}

我的输出:

Description:
Parameter 0 of constructor in com.example.demo.api.SpittleController required a bean of type 'com.example.demo.dao.SpittleRepository' that could not be found.
The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Qualifier(value="abc")

正如我之前说过的,该示例是从书中照搬过来的(出于问题的考虑,我将其简化了)。该程序不会引发错误的唯一情况是当我向DemoApplication类添加注释:@ComponentScan("com.example.demo.dao")(但仅在dao内有一个文件时有效)。另外,当我用class关键字替换interface关键字时,它也可以工作。

有什么方法可以使类(DemoApplication)查找此接口吗?

3 个答案:

答案 0 :(得分:0)

package com.example.demo.dao;
@Repository
public interface SpittleRepository {
    List<Spittle> findSpittles(long max, int count);
}

package com.example.demo.api;
@Controller
@RequestMapping("/spittles")
public class SpittleController {
    private SpittleRepository a;
    @Autowired
    public SpittleController(@Qualifier("spittleRepository ") SpittleRepository a){
        this.a = a;
    }
}

答案 1 :(得分:0)

  1. @SpringBootApplication将对com.example.demo下的所有软件包进行组件扫描,因此不需要明确提及基本软件包。
  2. 创建一个存储库类并实现接口SpittleRepository,并用@Component注释新类。这里需要接口的实现。

答案 2 :(得分:-1)

注释@Repository应该用于类,而不是接口。只要看看这个@Repository