为了账号安全,请及时绑定邮箱和手机立即绑定

怎么回事 我按照老师的改了还是报错?

5878d0130001c36f05000047.jpg

5878d0140001daa305000342.jpg

有没有人能解答一下?

正在回答

5 回答

或者不改版本,添加@Qualifier("name")做限定

    @Autowired
    @Qualifier("stringStore")
    private Store<String> s1;
    
    @Autowired
    @Qualifier("integerStore")
    private Store<Integer> s2;

5 回复 有任何疑惑可以回复我~
#1

慕标7744821 提问者

非常感谢!
2017-01-21 回复 有任何疑惑可以回复我~

个人理解,因为老师取得名字是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没报错我是不理解的,老师改完后执行测试我发现有段被剪掉了,细心的同学应该发现了,老师也许做了别的操作,这我就不知道了。按照老师的代码照敲编译器都不让我通过。

http://img1.sycdn.imooc.com//5a38e0ee0001434703420319.jpg

2 回复 有任何疑惑可以回复我~
#1

慕村8951117

,如果你把s1改成方法的名字(getStringStore )就会发现不会出错,因为@Autowired找到了一个叫getStringStore 这几句话好像说的不对 你说@Autowired先按照byName s1改成方法的名字getStringStore 虽然不会报错 但是没有装配上 他是 null 我也不知道为什么 你后面说的话我赞同 @Autowired 和@Qualifier("stringStore") 配合使用就可以了
2018-01-20 回复 有任何疑惑可以回复我~
#2

慕村8951117

Autowire默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用; @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName 你这样写就对了 @Resource private Store<String> stringStore;
2018-01-20 回复 有任何疑惑可以回复我~

为什么我导入的项目工程报错


0 回复 有任何疑惑可以回复我~
#1

北海北极熊

导入项目报错基本都是jar的问题,看下项目tomcat,jdk,编译版本。更改下
2017-08-10 回复 有任何疑惑可以回复我~

确实是版本的事,貌似只有4.0.5版本可以

0 回复 有任何疑惑可以回复我~

spring版本有问题,换成较低版本可以

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

怎么回事 我按照老师的改了还是报错?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信