接口自动装配与实现时会发生什么

What happens when an interface is Autowired vs the implementation

我正在开发一个 spring 项目,该项目的服务层分为两个包:

在调用接口中声明的方法和实现中定义的方法时,两者中的哪一个应该@Autowired用于什么目的?

自动装配接口和实现有什么区别?

请记住,这种抽象的目的通常是隐藏实现中的声明

您始终可以自动装配接口,但如果您的接口有多个实现,那么您将需要告诉 spring 要考虑哪个实现,并且有多种方法可以做到这一点。

  1. 将其中之一标记为@Primary
  2. 在实现时定义 bean 的名称并在自动装配时使用 @Qualifier 注释

只要接口只有一个实现,并且该实现用@Component注解并启用Spring的组件扫描,Spring框架就可以找到(接口,实现)对。

一旦你有多个实现,那么你需要对它们中的每一个进行限定,并且在自动装配期间,你需要使用 @Qualifier 注释来注入正确的实现,以及 @Autowired 注释。如果您正在使用 @Resource (J2EE),那么您应该使用此注释的名称属性指定 bean 名称。

通常,两者都可以工作,您可以自动装配接口或类。