接口自动装配与实现时会发生什么
What happens when an interface is Autowired vs the implementation
我正在开发一个 spring 项目,该项目的服务层分为两个包:
- 接口
- 实施
在调用接口中声明的方法和实现中定义的方法时,两者中的哪一个应该@Autowired
用于什么目的?
自动装配接口和实现有什么区别?
请记住,这种抽象的目的通常是隐藏实现中的声明
您始终可以自动装配接口,但如果您的接口有多个实现,那么您将需要告诉 spring 要考虑哪个实现,并且有多种方法可以做到这一点。
- 将其中之一标记为@Primary
- 在实现时定义 bean 的名称并在自动装配时使用 @Qualifier 注释
只要接口只有一个实现,并且该实现用@Component
注解并启用Spring的组件扫描,Spring框架就可以找到(接口,实现)对。
一旦你有多个实现,那么你需要对它们中的每一个进行限定,并且在自动装配期间,你需要使用 @Qualifier
注释来注入正确的实现,以及 @Autowired
注释。如果您正在使用 @Resource
(J2EE),那么您应该使用此注释的名称属性指定 bean 名称。
通常,两者都可以工作,您可以自动装配接口或类。
我正在开发一个 spring 项目,该项目的服务层分为两个包:
- 接口
- 实施
在调用接口中声明的方法和实现中定义的方法时,两者中的哪一个应该@Autowired
用于什么目的?
自动装配接口和实现有什么区别?
请记住,这种抽象的目的通常是隐藏实现中的声明
您始终可以自动装配接口,但如果您的接口有多个实现,那么您将需要告诉 spring 要考虑哪个实现,并且有多种方法可以做到这一点。
- 将其中之一标记为@Primary
- 在实现时定义 bean 的名称并在自动装配时使用 @Qualifier 注释
只要接口只有一个实现,并且该实现用@Component
注解并启用Spring的组件扫描,Spring框架就可以找到(接口,实现)对。
一旦你有多个实现,那么你需要对它们中的每一个进行限定,并且在自动装配期间,你需要使用 @Qualifier
注释来注入正确的实现,以及 @Autowired
注释。如果您正在使用 @Resource
(J2EE),那么您应该使用此注释的名称属性指定 bean 名称。
通常,两者都可以工作,您可以自动装配接口或类。