1、springmvc的运行流程
1. 用户向服务器发送请求,请求被SpringMVC 前端控制器DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter;(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,SpringMVC将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等。
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到SpringMVC容器中的ViewResolver)返回给DispatcherServlet;
7. ViewResolver 结合Model和View,来渲染视图;
8. 将渲染结果返回给客户端。
2、什么是ioc?
IOC控制反转,不是一种技术,而是一种思想,对象的生命周期不是由程序本身来决定,而是由容器来控制,所以称之为控制反转。
3、IOC和DI的区别?
依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;
而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
4、 什么是aop
aop是面向切面编程,aop是对oop(面向对象编程)的补充和完善,OOP引入封装、继承和多态性等概念建立一种对象的层次结构。当我们需要为不具备上下级关系的对象添加一系列公共的行为时,oop显得很无力。如日志,日志代码所在所有对象之间毫无关系。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统,提高代码的复用性。
1) Aspect :切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面;
2) Join point :连接点,也就是可以进行横向切入的位置;
3) Advice :通知,切面在某个连接点执行的操作(分为: Before advice , After returning advice , After throwing advice , After (finally) advice , Around advice );
4) Pointcut :切点,符合切点表达式的连接点,也就是真正被切入的地方;
Spring AOP的五个通知类型
通知类型 | 作用 |
before | 前置通知 |
around | 环绕通知---需要放行操作 |
after | 后置通知----不论拦截的方法是否有异常 |
after-returning | 后置成功通知---------拦截的方法没油抛出异常就会执行--拦截到的方法必须正确返回;</ |