1. Bean 冲突 ConflictingBeanDefinitionException
错误信息:
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException
Create breakpoint Lingna →: Annotation-specified bean name 'httpClientUtil' for
beanclass [com.XXX console.utils.HttpClientUtil] conflicts with existing,
non-compatible bean definition of same name and class
[com.XXX.utils.HttpClientutil]
解决:
使用@Component注解的value属性,给Bean配置组件名称。
@Configuration("HttpClientUtil-bpms")
public class HttpClientUtil {}
参考:
https://blog.csdn.net/IZZDJ/article/details/135253180
https://blog.csdn.net/weixin_42313773/article/details/133718148
2. Bean引用报错 BeanNotOfRequiredTypeException
BeanNotOfRequiredTypeException: Bean named 'httpClientUtil' is expected to XXX
报错代码:
// 被引用类
// 起了别名 "HttpClientUtil-myUtil" 和类名不一致
@Configuration(value = "HttpClientUtil-myUtil")
public class HttpClientUtil {
public HttpClientUtil() {
}
public static String demo() {
return "demo";
}
}
// 调用方类
@Service
public class DemoServiceImpl implements DemoService {
@Autowired
private HttpClientUtil httpClientUtil;
}
改造方法1:
// 调用方类
@Service
public class DemoServiceImpl implements DemoService {
@Autowired
@Qualifier(value = "HttpClientUtil-myUtil")
private HttpClientUtil httpClientUtil;
}
改造方法2:
// 调用方类
@Service
public class DemoServiceImpl implements DemoService {
@Resource(name = "HttpClientUtil-myUtil")
private HttpClientUtil httpClientUtil;
}
解决方案
修改实例化对象的名称
将@Resource注解改为@Autowired注解,默认根据类型注入
指定Bean的名称,使用@Qualifier指定名称进行注入
总结
在Spring中,当使用@Resource注解进行依赖注入时,默认是根据Bean的名称进行匹配的。
如果存在多个同名的Bean,Spring会尝试根据类型来区分。
由于存在两个同名的Bean,Spring无法确定要注入哪个Bean。这可能导致注入错误类型的Bean,
从而引发类型不匹配的问题。
扩展知识点: @Autowired @Resource
https://blog.csdn.net/lijingjingchn/article/details/125404706
https://taojin.blog.csdn.net/article/details/135354723
https://download.csdn.net/blog/column/11976288/136868856
https://blog.csdn.net/FMC_WBL/article/details/136276389