问答详情
源自:4-8 Spring Bean装配之基于Java的容器注解说明——基于泛型的自动装配

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

5878d0130001c36f05000047.jpg

5878d0140001daa305000342.jpg

有没有人能解答一下?

提问者:慕标7744821 2017-01-13 21:03

个回答

  • i瞎闹腾i
    2017-01-18 22:20:03
    已采纳

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

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

  • 小林家的mooc
    2017-12-19 17:51:12

    个人理解,因为老师取得名字是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://img2.mukewang.com/5a38e0ee0001434703420319.jpg

  • qq_不要说话_9
    2017-08-02 20:29:39

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


  • 纪墨
    2017-06-13 16:49:57

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

  • i瞎闹腾i
    2017-01-18 21:52:47

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