为什么加入了spring事务管理机制的程序要直接使用接口的方法?

照书上步骤使用BeanNameAutoProxyCreator为项目添加了spring事务管理机制,可是在java代码中使用
StudentDAO stdao = (StudentDAO)ctx.getBean("StudentDAO");
Student st = new Student("张三");
stdao.save(st);
报错java.lang.ClassCastException: $Proxy0 cannot be cast to...
网上说需要将ctx.getBean()方法的返回值用接口类接收,改为
IStudentDAO stdao = (IStudentDAO)ctx.getBean("StudentDAO");
Student st = new Student("张三");
stdao.save(st);
其中IStudentDAO是接口类,StudentDAO是它的实现类,这里为什么申明一个接口类可以直接使用实现类定义的方法呢?ctx.getBean()的返回值明明被强制转换成了IStudentDAO啊,是不是因为Spring管理机制在捣鬼呢?
希望有高手能详细给我解释解释这样用接口类的理由,如果是Spring事务管理在捣鬼,希望也能解释一下为什么Spring事务管理要这么设计

阿晨1998
浏览 1123回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP