做網(wǎng)站域名的成本廣州網(wǎng)站建設(shè)公司
前言
呵呵 同樣是 最近同事碰到的一個(gè)問題
他不太懂 英語, 看到的說明是 缺少一個(gè) RedisTemplate 的實(shí)例, 但是找到了一個(gè) RedisTemplate 的實(shí)例
呵呵 和我這里 spring 版本似乎是不太一樣, 錯(cuò)誤信息 有一些差異
?
以下環(huán)境基于 jdk8 + spring-5.0.4-RELEASE
?
?
測(cè)試用例
BeanConfig 的實(shí)例信息, 容器中提供了一個(gè) LinkedList<Object>
/*** BeanConfig** @author Jerry.X.He <970655147@qq.com>* @version 1.0* @date 2022-01-22 20:13*/
@Configuration
public class BeanConfig {@Beanpublic LinkedList<Object> list1() {return new LinkedList<>();}}
?
UserService 里面依賴了一個(gè) LinkedList<String>
@Service
public class UserService {@Resourceprivate LinkedList<String> list;}
?
啟動(dòng)項(xiàng)目, 錯(cuò)誤信息如下?
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.LinkedList<java.lang.String>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1509)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:506)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:484)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:618)at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:177)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)... 30 common frames omitted
?
?
根據(jù) 類型 注入
尋找 LinkedList 匹配的 bean, beanFactory??
?
校驗(yàn) list1 的類型, 發(fā)現(xiàn) 類型不兼容, 沒有放到 candidates 里面, 最終導(dǎo)致沒有注入成功?
?
?
根據(jù) beanName 注入
調(diào)整 BeanConfig 里面的 list1 的方法名為 list, 主要的目的是更新 這個(gè) bean 的名稱?
然后 UserService 里面的 list 字段, 然后 applicationContext 中存在 list 對(duì)應(yīng)的 bean, 然后 這里走的是 byName 注入, 沒有泛型類型的校驗(yàn), 因此能夠 注入成功?
?
?
完?
?
?
?