目录一、Spring MVC的主要组件?二、SpringMVC工作流程三、SpringMVC中的控制器是不是单例模式如果是如何保证线程安全四、SpringBoot自动配置原理五、SpringBoot中配置文件的加载顺序是怎样的六、SpringBoot是如何启动Tomcat的七、ApplicationContext和BeanFactory有什么区别八、mybatis的优缺点一、Spring MVC的主要组件?Handler也就是处理器。它直接应对着MVc中的C也就是Controller层它的具体表现形式有很多可以是类也可以是方法。在Controller层中RequestMapping标注的所有方法都可以看成是一个Handler只要可以实际处理请求就可以是Handler1、HandlerMappinginitHandlerMappings(context),处理器映射器根据用户请求的资源uri来查找Handler的。在SpringMVC中会有很多请求每个请求都需要一个Handler处理具体接收到一个请求之后使用哪个Handler进行这就是HandlerMapping需要做的事。2、HandlerAdapterinitHandlerAdapters(context)适配器。因为SpringMVC中的Handler可以是任意的形式只要能处理请求就ok但是Servlet需要的处理方法的结构却是固定的都是以request和response为参数的方法。如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢这就是HandlerAdapter要做的事情。Handler是用来干活的工具HandlerMapping用于根据需要干的活找到相应的工具HandlerAdapter是使用工具干活的人。二、SpringMVC工作流程1用户发送请求至前端控制器DispatcherServlet。2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。3处理器映射器找到具体的处理器可以根据xml配置、注解进行查找生成处理器及处理器拦截器如果有则生成)一并返回给 DispatcherServlet。4) DispatcherServlet 调用 HandlerAdapter处理器适配器。5)HandlerAdapter经过适配调用具体的处理器Controller也叫后端控制器6)Controller执行完成返回ModelAndView。7) HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。8) DispatcherServlet将ModelAndView传给 ViewReslover 视图解析器。9)ViewReslover 解析后返回具体View。10)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。11) DispatcherServlet 响应用户。三、SpringMVC中的控制器是不是单例模式如果是如何保证线程安全控制器是单例模式。单例模式下就会有线程安全问题。Spring中保证线程安全的方法1、将scop设置成非singleton。prototype, request。2、最好的方式是将控制器设计成无状态模式。在控制器中不要携带数据。但是可以引用无状态的service和dao。四、SpringBoot自动配置原理Import Configuration Spring spi自动配置类由各个starter提供使用ConfigurationBean定义配置类放到META-INF/spring.factories下使用Spring spi扫描META-INF/spring.factories下的配置类使用lmport导入自动配置类五、SpringBoot中配置文件的加载顺序是怎样的优先级从高到低高优先级的配置覆盖低优先级的配置所有配置会形成互补配置。1.命令行参数。所有的配置都可以在命令行上进行指定2. Java系统属性(System.getProperties());3.操作系统环境变量4. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件5.jar包内部的application-{profile].properties或application.yml(带spring.profile)配置文件再来加载不带profile6. jar包外部的application.properties或application.yml(不带spring.profile)配置文件7.jar包内部的application.properties或application.yml(不带spring.profile)配置文件8.Configuration注解类上的PropertySource六、SpringBoot是如何启动Tomcat的1. 首先,SpringBoot在启动时会先创建一个Spring容器2. 在创建Spring容器过程中会利用ConditionalOnClass技术来判断当前classpath中是否存在Tomcat依赖如果存在则会生成一个启动Tomcat的Bean3. Spring容器创建完之后就会获取启动Tomcat的Bean,并创建Tomcat对象并绑定端口等然后启动Tomcat七、ApplicationContext和BeanFactory有什么区别BeanFactory是Spring中非常核心的组件表示Bean工厂可以生成Bean,维护Bean,而ApplicationContext继承了BeanFactory所以ApplicationContext拥有BeanFactory所有的特点,也是一个Bean工厂但是ApplicationContext除开继承了BeanFactory之外还继承了诸如EnvironmentCapable、MessageSource、ApplicationEventPublisher等接口,从而ApplicationContext还有获取系统环境变量、国际化、事件发布等功能这是BeanFactory所不具备的八、mybatis的优缺点优点1、基于SQL语句编程相当灵活不会对应用程序或者数据库的现有设计造成任何影响SQL写在XML里解除sqI与程序代码的耦合便于统一管理提供XML标签支持编写动态SQL语句并可重用。2、与JDBC相比减少了50%以上的代码量消除了JDBC大量冗余的代码不需要手动开关连接3、很好的与各种数据库兼容因为MyBatis使用JDBC来连接数据库所以只要/DBC支持的数据库MyBatis都支持。4、能够与Spring很好的集成5、提供映射标签支持对象与数据库的ORM字段关系映射提供对象关系映射标签支持对象关系组件维护。缺点1、SQL语句的编写工作量较大尤其当字段多、关联表多时对开发人员编写SQL语句的功底有一定要求。2、SQL语句依赖于数据库导致数据库移植性差不能随意更换数据库。