@Autowired装配问题的完整代码

@Autowired装配问题的完整代码

接口

public interface IUserDao {
}

UserDao类

@Repository
public class UserDao implements IUserDao{
    public UserDao(){
        System.out.println("正在创建UserDao:" + this);
    }
}

UserOracleDao类

@Repository
public class UserOracleDao implements IUserDao {
    public UserOracleDao(){
        System.out.println("正在创建UserOracleDao:" + this);
    }
}

UserService类

@Service
public class UserService {

    @Autowired
    private IUserDao userDao ;
    
    public IUserDao getUdao() {
        return userDao;
    }

}

SpringApplication类

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        UserService userService = context.getBean("userService", UserService.class);
        System.out.println(userService.getUdao());
    }
}

我这个可以正常运行   和视频中讲的不太一样   这个是什么原因

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,你的理解是正确的。@AutoWired注解匹配规则如下:

http://img1.sycdn.imooc.com//climg/5f62db10099bd9a406330145.jpg

所以变量名为userDao是不会报错的。

祝学习愉快~

  • rock221 #1

    老师,我变量名写userDao就报错了啊。 为什么他说的这个不会报错啊。我的userDao也会默认生成的id名啊。

    错误代码:​ No bean named 'userSerivce' available

    http://img1.sycdn.imooc.com//climg/60a4b4f1094e3e0812460246.jpg



    http://img1.sycdn.imooc.com//climg/60a4b4cc09b79d5b10340238.jpg

    2021-05-19 14:51:20
  • rock221 #2

    老师,我变量名写userDao就报错了啊。 为什么他说的这个不会报错啊。我的userDao也会默认生成的id名啊。

    错误代码: No bean named 'userSerivce' available

    http://img1.sycdn.imooc.com//climg/60a4b4f1094e3e0812460246.jpg



    http://img1.sycdn.imooc.com//climg/60a4b4cc09b79d5b10340238.jpg


    2021-05-19 14:51:37
  • rock221 #3

    研究好了。谢谢老师。没问题了 

    2021-05-19 14:57:28
好帮手慕阿慧 2020-09-17 09:44:55

同学你好,同学说的只要是userDao就不会是什么意思呢?

老师这边测试,如果不加@Primary注解,如下三种注入都会报同样的错误。如下:

http://img1.sycdn.imooc.com//climg/5f62bf910944aa2813090669.jpg

祝学习愉快~

  • 提问者 mahsiaoko #1
    就是感觉有点像@Resource在没有设置属性name的时候一样,以属性名作为bean name在IoC容器中匹配bean。而且我试了一下,老师您写的这三种,我这都可以,而且今天我换了一个电脑,还是这样的 。
    2020-09-17 10:11:01
  • 提问者 mahsiaoko #2
    老师,我在网上看到一篇文章写到 “@Autowired默认使用byType来装配属性,如果匹配到类型的多个实例,再通过byName来确定Bean。” https://juejin.im/post/6844903793637720071 您看一下
    2020-09-17 10:25:49
好帮手慕阿慧 2020-09-16 15:18:41

同学你好,可能是jdk版本的问题。同一台电脑上可以按照多个jdk版本。如下:

http://img1.sycdn.imooc.com//climg/5f61bc4909c0fbb505350208.jpg

建议同学安装jdk8版本,再试试。

祝学习愉快~

  • 提问者 mahsiaoko #1
    换成jdk8之后还是一样的,我发现不管是jdk11还是jdk8,我写成 @Autowired private IUserDao udao ; 这种类型的,都会报错,但是只要是userDao就不会。
    2020-09-16 19:36:30
mahsiaoko 提问者 2020-09-16 14:52:27

jdk版本是11,缓存也清理过了,还是没有报错,可以正常运行

  • ____xyz #1

    http://img1.sycdn.imooc.com//climg/60fbc867095c04fc06160448.jpg你这get方法名错了。。。。。。

    2021-07-24 16:00:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师