有没有人能解答一下?
或者不改版本,添加@Qualifier("name")做限定
@Autowired
@Qualifier("stringStore")
private Store<String> s1;
@Autowired
@Qualifier("integerStore")
private Store<Integer> s2;
个人理解,因为老师取得名字是s1,s2 @Autowired
按照ByName找不到叫name为s1,s2的bean,改成ByType寻找,结果发现s1定义的是Store<String>有两个返回值都是StringStore所以就不知道该用哪一个,如果你把s1改成方法的名字(getStringStore
)就会发现不会出错,因为@Autowired找到了一个叫getStringStore
的bean(前面讲过,@Bean默认用方法名字作为bean的name)这里就用的ByName寻找。
总结,老师用s1,s2做名字使得@Autowired用ByName找不到,改为ByType结果有两个StringStore,导致出错。
老师改成Store没报错我是不理解的,老师改完后执行测试我发现有段被剪掉了,细心的同学应该发现了,老师也许做了别的操作,这我就不知道了。按照老师的代码照敲编译器都不让我通过。
为什么我导入的项目工程报错
确实是版本的事,貌似只有4.0.5版本可以
spring版本有问题,换成较低版本可以