原理速读之spring,springMVC,mybatis基本原理启示

在说原理之前我们应该讨论的是其他的,就是spring,springMVC,mybatis为我们做了什么,或者说它们有什么用。
spring主要有两个作用,为我们提供了面向切面编程AOP的一种方式和改变了我们以来注入DI的方式。spingMVC简化了servlet开发。mybatis简化了dao开发。其中我们最直观接触的springMVC,mybatis,我们怎样使用springMVC的呢?@Controller注解,怎样使用mybatis的呢?@Mapper注解 mapper.xml或者注解。
偶然有一天我发现注解想要生效必须要使用反射。也就是直接写个注解是没有作用的,必定有个程序在注解的方法启动前就已经启动,利用反射获得到了这个注解。那么这就引导出来,在contoller生效之前有哪些东西就已经启动了呢?再往前推整个应用的启动是从哪里开始的?也就是整个应用的main方法在哪里?我们知道一个JAVA代码如果没有类似main方法的机制启动,是没有作用的。 但是我们通常写JAVA代码好像从没有写过类似的启动类!!!?
所以要解决这个问题就要从点下run application开始。这个run是整个应用的起点。当点下run,tomcat就启动了,tomcat启动后接下来要干什么呢?他会扫描web.xml这个文件,会一次启动里面配置的filter列表(调用其init方法),所有filter启动完以后,会启动servlet列表(调用其init方法),最后启动的是lisenter(调用其contextInitialized方法)。至此我们终于恍然大悟,如果我们想自己启动一个main方法我只需要配置一个filter/servlet/listener,然后将代码的启动源头放在init/contextInitialized里面,惊! 所以我们将的spring,springmvc这些框架的源头,比如反射读取注解等操作(通常我们称之为初始化)必定是在这里开始的,至此我们终于想起,配置springmvc我们需要配置一个很重要的servlet,dispatchedserlvet,这个servlet会在tomacat启动servlet时启动其init()方法,springmvc里的功能比如 requestmapping就在这时开始反射形成一个路径与对应方法的map,下次请求进入dispatchedservlet,就可以根据请求路径从这个map中取出要调用的方法等。spring的初始化就是在web.xml里面配置了一个ServletContextListener会在tomcat调用完servlet后启动这个listener的contextInitialized方法,这个方法就是spring框架的起点。里面会进行动态代理,生成bean,bean容器,beanfactory等操作。mybatis也是类似,但是mybatis的起点是整合在spring里面,也就是spring启动后某个位置再初始化mybatis(我也不知道是哪一步。。。)mybatis初始化主要是解析xml等生成一个方法名与sql的map。还有sqlsessionfactory等。
我在这里只是提供一个具体的学习思路,更加详细的原理大家可以去其他地方找,然后结合我这个启动的思路,肯定事半功倍。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值