学习网址 www.cnblogs.com/hopeofthevi…
dao层两种实现方式
1.不用动态代理
直接通过dao层接口调用接口实现类方法,实现类的具体方法,需要我们自己手动调用SqlSession里面的方法,执行sql语句
2.通过mapper动态代理
1.通过Factory获取sqlsession对象
2.通过sqlsession 获取dao层的代理对象(通过动态代理根据dao层接口,session.getMapper-->Configuration.getMapper-->MapperRegistry.getmapper-->MapperProxyFactory.newInstance-->通过将MapperProxy代理对象传入newInstance方法,解析mapper.xml并创建代理接口)
1.DeaultSqlSession中的getMapper方法,
UserDao mapper = session.getMapper(UserDao.class)获取dao层代理对象,
2.Configuration类的getMapper方法,这里也是将工作继续交到MapperRegistry的getMapper的方法
3.MapperRegistry的getMapper的方法下,通过MapperProxyFactory的newInstance方法中
4.newInstance方法并将MapperProxy对象传入进去,根据该对象创建代理类并返回,在MapperProxy类中通过JDK动态代理必须实现的接口InvocationHandler
3.执行代理类的方法并返回相应结果。
动态代理中最重要的类:SqlSession、MapperProxy、MapperMethod