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

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

慕标7744821

2017-01-13 21:03

5878d0130001c36f05000047.jpg

5878d0140001daa305000342.jpg

有没有人能解答一下?

写回答 关注

5回答

  • i瞎闹腾i
    2017-01-18 22:20:03
    已采纳
    或者不改版本,添加@Qualifier("name")做限定

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

    慕标7744...

    非常感谢!

    2017-01-21 20:05:22

    共 1 条回复 >

  • 小林家的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

    慕村8951...

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

    2018-01-20 17:18:45

    共 2 条回复 >

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

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


    北海北极熊

    导入项目报错基本都是jar的问题,看下项目tomcat,jdk,编译版本。更改下

    2017-08-10 15:19:42

    共 1 条回复 >

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

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

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

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

Spring入门篇

为您带来IOC和AOP的基本概念及用法,为后续高级课程学习打下基础

268785 学习 · 963 问题

查看课程

相似问题