mabatis启动流程:
- 伴随tomcat,在tomcat启动时候,cat扫描web.xml文件,找到mabatis配置文件路径,mabatis配置文件包括但不限于xml文件。
对于web.xml来说,只能引入其他xml文件。如果mabatis配置文件(或其他配置文件)是其他类型文件,非xml文件是由xml文件记录它的路径。
举例:
假设有一个文件a.properties,那么引入路径是:在web.xml中,引入自定义的b.xml,在b.xml中记录了a.properties的路径。
a.properties触发流程
首先在web.xml中注册启动类,在启动类被触发之后,启动类会在web.xml中找到b.xml,进一步解析b.xml,找到a.properties路径,读出a.properties的配置,
a.properties配置了什么?
dao层各包(包括实体包、xml包、mapper.java所在包(mapper接口所在包))路径;
- 读完配置文件后,自定义java文件扫描配置的包,首先扫描mapper.java,这个包下定义的接口均会被扫描到。之后通过反射拿到接口类信息,根据接口类信息生成实现类,以及在实现类中将接口类声明的方法(空方法,之后需要注入)也实现出来,连接数据库需要mapper.xml中的sql语句,接下来去扫描xml所在的包,扫描所有的xml文件,根据配置文件的声明,对应相应的mapper接口,例如,
对应的是com.stone.easy.ten.mapper.TenProductMapper接口
,sql语句通过id对应到相应的方法,填充进空方法。生成了完整的接口实现类,启动过程结束
代码生成均是通过cglib字节码注入生成。
调用:
调用哪个接口,cglib生成哪个实现类实例,形成单例模式,实现类直接执行。由于实现类实例是生成的无法直接执行,只能通过invoke()执行,需要动态代理。