一.三个注解注入区别
1.1@Autowired
1.1.1注入规则
优先按照类型byType注入
1.1.2可能遇到的情况
同类型存在多个Bean(比如同一个接口多个实现类),会报NoUniqueBeanDefinitionException冲突。
1.1.3具体例子
1. 顶层父接口(全类名:com.huibo.cloud.service.PayService)
package com.huibo.cloud.service; public interface PayService { void pay(Long orderId); }2. 实现类 1 支付宝支付(全类名:com.huibo.cloud.service.impl.AliPayServiceImpl)
package com.huibo.cloud.service.impl; import com.huibo.cloud.service.PayService; import org.springframework.stereotype.Service; @Service public class AliPayServiceImpl implements PayService { @Override public void pay(Long orderId) { System.out.println("支付宝支付"); } }3. 实现类 2 微信支付(全类名:com.huibo.cloud.service.impl.WxPayServiceImpl)
package com.huibo.cloud.service.impl; import com.huibo.cloud.service.PayService; import org.springframework.stereotype.Service; @Service public class WxPayServiceImpl implements PayService { @Override public void pay(Long orderId) { System.out.println("微信支付"); } }@Autowired
报错:
NoUniqueBeanDefinitionException: No qualifying bean of type 'com.huibo.cloud.service.PayService' available: expected single matching bean but found 2: aliPayServiceImpl,wxPayServiceImpl
1.1.4解决冲突的方法
配合@Qualifier使用。(可以配合MapperScan的nameGenerator属性使用)
1.2@Qualifier("Bean名称")
1.2.1注入规则
配合@Autowired检索类型,精准匹配名称对应的实现类
1.3Resource
1.3.1注入规则
(变量名和beanName一致)优先按照变量名去进行匹配,找不到才降级按类型做匹配