-
查看一个接口的所有实现类:选中接口名,Ctrl+T 或者选中该接口名,按F4,即 Open Type Hierarchy IMessage imessage=sqlSession.getMapper(IMessage.class);//获取到的就是代理实例 messageList =imessage.queryMessageList(parameter);//代理实例执行接口方法时,就会触发调用处理程序,也就是第三个参数对象的invoke()方法,MapperProxy是实现了InvocationHandler接口的 MapperProxyFactory.newInstance(MapperProxy<T> mapperProxy){ --return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader()//通过接口获取类加载器,new Class[]{mapperInterface}//代理类实现的接口数组,mapperProxy//调用代理实例的处理程序) --} 解决了三个问题: 1、为什么只定义了一个接口,没有实现类的情况下,接口方法可以被调用,因为动态代理。 2、为什么sqlSession.getMapper(.class)可以根据传入的参数,返回一个对应的类型,因为泛型。 3、Mybatis加载文件时,利用namespace加载了一个class,然后把这个class与代码中传入接口的class进行匹配,方法执行所需要的信息就是来自于已经匹配成功的配置文件中,当结果与配置文件对应上后,调用接口的方法执行sql语句。查看全部
-
解决问题查看全部
-
如何实现接口也能调用:动态代理 MapperProxy 代理类查看全部
-
分析messageList=sqlSession.selectList("")这句代码 四处 namespace:使用接口全限定名 与sql相关的id:接口的方法 传入的参数:以前是Object类型的 容易出错 现在是在接口中指定类型 返回值:也是接口中指定的 这就是接口式编程规范查看全部
-
实现流程查看全部
-
作业查看全部
-
打印的结果查看全部
-
模拟代理类的 invoke 方法2查看全部
-
代理类的 invoke 方法查看全部
-
模拟 sqlSession 的getMapper方法查看全部
-
模拟接口编程动态代理的关键步骤查看全部
-
解决几个问题查看全部
-
加载配置文件查看全部
-
接口式编程实现原理-动态代理查看全部
-
分析的语句查看全部
举报
0/150
提交
取消