spring容器使用接口注入

spring为何要注入接口,而注入实现类就会报错

如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术是通过动态代理实现的,而spring默认是JDK动态代理,对实现类对象做增强得到的增强类与实现类是兄弟关系,所以不能用实现类接收增强类对象,只能用接口接收。

spring怎么知道注入哪个实现?

如果Spring配置了component scan,并且要注入的接口只有一个实现的话,那么spring框架可以自动将interface于实现组装起来。如果没有配置component scan,那么你必须在application-config.xml(或等同的配置文件)定义这个bean。

需要@Qualifier和@Resource注解吗?

一旦一个接口有多个实现,那么就需要每个特殊化识别并且在自动装载过程中使用@Qualifier和@Autowired一起使用来标明。如果是使用@Resource注解,那么你应该使用resource中属性名称来标注@Autowired.

为什么@Autowired使用在interface上而不是实现类上?

首先,一般使用接口是很常用并且有益的变成技术。其次,在spring中,你可以在运行过程中注入各种实现。一个很经典的情况就是在测试阶段,注入模拟的实现类。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring中,接口注入有两种方式:byType和byName。 通过byType方式进行接口注入时,Spring容器根据bean定义的类来查找与依赖类型相同的bean,并将其注入到另一个bean中。这个过程需要借助setter注入来完成,因此被注入的bean必须存在相应的set方法。然而,当XML文件中存在多个相同类型但名称不同的实例bean时,byType模式可能导致注入失败,因为Spring容器无法确定应该注入哪个bean实例。在这种情况下,可以通过设置autowire-candidate属性为false来过滤不需要注入的实例bean,以帮助Spring容器确定注入哪个bean实例。\[1\] 另一种方式是byName方式。通过byName方式进行接口注入时,Spring容器根据bean的名称来查找与依赖类型相同的bean,并将其注入到另一个bean中。在XML文件中,可以使用@Autowired注解的@Qualifier("名称")来指定要注入的bean的名称,以帮助Spring容器确定注入哪个bean实例。\[3\] 需要注意的是,无论是使用byType还是byName方式进行接口注入,被注入的bean必须存在默认的空参构造方法,否则Spring无法实例化对象,导致报错。如果在类中定义了带有参数的构造方法,一定要同时提供一个空参构造方法。\[2\] #### 引用[.reference_title] - *1* *3* [spring注入方式](https://blog.csdn.net/shangliangren/article/details/123932809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Spring常用的三种注入方式](https://blog.csdn.net/weixin_30553777/article/details/99878397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值