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.
尽管我有:
- 这里包含的包:
@SpringBootApplication(scanBasePackages={"com.B","com.C"})
@Service
界面中
甚至可以自动装配接口吗?
是的,您可以注入接口。但是至少应该有一个被声明为 bean 的实现,所以 Spring 管理它并且知道要注入什么。如果您有不止一种实现方式,则需要指定您想要的实现方式。阅读注释 @Resource
和它的 属性 “名称”。一篇关于它的好文章是 Wiring in Spring: @Autowired, @Resource and @Inject。另外,如果你有很多相同接口的实现并且想注入它们,你可以这样做:
@Autowired
private List<DataSource> dataSources;
如果 DataSource
是一个接口,列表将包含它的所有实现。你可以阅读它here and here
所以我正在尝试自动装配接口。
我的应用程序:
@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.
尽管我有:
- 这里包含的包:
@SpringBootApplication(scanBasePackages={"com.B","com.C"})
@Service
界面中
甚至可以自动装配接口吗?
是的,您可以注入接口。但是至少应该有一个被声明为 bean 的实现,所以 Spring 管理它并且知道要注入什么。如果您有不止一种实现方式,则需要指定您想要的实现方式。阅读注释 @Resource
和它的 属性 “名称”。一篇关于它的好文章是 Wiring in Spring: @Autowired, @Resource and @Inject。另外,如果你有很多相同接口的实现并且想注入它们,你可以这样做:
@Autowired
private List<DataSource> dataSources;
如果 DataSource
是一个接口,列表将包含它的所有实现。你可以阅读它here and here