Trying to autowire an interface. Error: Consider defining a bean of type "interface"

Trying to autowire an interface. Error: Consider defining a bean of type "interface"

所以我正在尝试自动装配接口。

我的应用程序:

@SpringBootApplication(scanBasePackages={"com.B","com.C"})
public class MyApp {
...
}

MyController(在包 com.B 中):

@RestController
@RequestMapping("/users")
public class UserController
{
    @Autowired
    MyInterface myInterface;
}

MyInterface(在包 com.C 中):

@Service
public interface MyInterface
{
...
}

但是我收到这个错误:

Consider defining a bean of type 'C.MyInterface' in your configuration.

尽管我有:

  1. 这里包含的包:@SpringBootApplication(scanBasePackages={"com.B","com.C"})
  2. @Service界面中

甚至可以自动装配接口吗?

是的,您可以注入接口。但是至少应该有一个被声明为 bean 的实现,所以 Spring 管理它并且知道要注入什么。如果您有不止一种实现方式,则需要指定您想要的实现方式。阅读注释 @Resource 和它的 属性 “名称”。一篇关于它的好文章是 Wiring in Spring: @Autowired, @Resource and @Inject。另外,如果你有很多相同接口的实现并且想注入它们,你可以这样做:

@Autowired
private List<DataSource> dataSources;

如果 DataSource 是一个接口,列表将包含它的所有实现。你可以阅读它here and here