前言
项目中用到的spring框架,知道它是起管理作用的,特点是IOC,AOP。其实它也是一个容器,除了spring还有好多容器。另外,一个程序用到了dubbo服务,用到了mybatis,他们是怎么联系起来的?从页面到controller,从本服务到别的服务,他们是怎么找到彼此的?现在我们就来谈谈容器和配置的那些事。
容器
web容器
程序运行在哪里?其实是在一个个的容器里。最外面那层就是web容器。
servlet容器
servlet容器是负责处理客户请求的。当客户请求某个资源时,serlet把请求封装到一个servletRequest对象的中,然后调用servlet API中的某个servlet(class),得到数据后再封装到servletResponse对象中传给界面。
ioc容器
IOC容器是一个抽象容器,它的实现有spring容器及springmvc容器等;其中spring容器是springmvc容器的父容器。
什么是控制翻转?
控制是指对对象的生命周期的管理和配置;翻转是指之前都是对象管理自己的创建,应用和消亡等生命周期,先在应用ioc就是把对象的生命周期的管理和配置都交给了ioc容器。
程序一运行,ioc容器把标有注解的类都实例化到ioc容器中。各个模块需要用到的对象的时候不用自己去实例化,而是ioc容器直接提供给你;这点也是ioc和di的区别,ioc是ioc容器直接把对象推给程序而di是程序需要用到对象的时候自己去容器里找。(个人理解)
调用逻辑
这次项目中用了springmvc, spring-mybatis, dubbo等这些架构,他们是怎么合作的?
1.程序一启动先去找web.xml,启动web容器,web容器中除了配置了过滤,监听等这些基本的还配置了spring-context。因此,从web找到spring。
2.spring中管理好多东西,本服务的其他层,如facade, service, dao; 除此之外配置了dubbo, mybatis, mq, redis 还有和数据相关的一些设置。
到这里我们也都看出来了,spring配置的主要是后台的,facade往后的;那前台界面是怎么传了一个url就找到对应的controller的?controller查出数据又是如何传给界面的?以什么形式? 这个就需要springmvc来配置了。
springmvc也是继承mvc框架的。其中的c指的是前端控制器dispatcherServlet; v指的是视图解析器viewResolver和视图渲染的view; m是指适配器处理器HandlerAdapter,其实是后台的controller;前端控制器是根据一个叫映射处理器HandlerMapping来找到对应的controller的。
小结
好多框架组合在一起,一开始感觉好神奇,就这么配啊配,我们的代码量就少了好多,方便了好多,尤其是用到一些注解,不用再写某些类的 实例化的规程性的代码了。通过这么梳理,不觉佩服发明这些框架,架构的人。好好学习吧,向伟人致敬。