Spring MVC 原理
Spring 的模型-视图-控制器(MVC)框架是围绕一个 DispatcherServlet 来设计的,这个 Servlet 会把请
求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能
支持文件上传。
MVC 流程
Http 请求到DispatcherServlet
(1) 客户端请求提交到 DispatcherServlet。
HandlerMapping 寻找处理器
(2) 由 DispatcherServlet 控制器查询一个或多个 HandlerMapping,找到处理请求的
Controller。调用处理器Controller
(3) DispatcherServlet 将请求提交到 Controller。
Controller 调用业务逻辑处理后,返回ModelAndView
(4)(5)调用业务处理和返回结果:Controller 调用业务逻辑处理后,返回 ModelAndView。
DispatcherServlet 查询ModelAndView
(6)(7)处理视图映射并返回模型: DispatcherServlet 查询一个或多个 ViewResoler 视图解析器,找到
ModelAndView 指定的视图。
ModelAndView 反馈浏览器HTTP
(8) Http 响应:视图负责将结果显示到客户端。
MVC 常用注解
Spring AOP的实现原理和场景;
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一 些具有横切
性质的系统级服务。
一、场景
事务管理、安全检查、权限控制、数据校验、缓存、对象池管理等
二、实现技术
AOP(这里的AOP指的是面向切面编程思想,而不是Spring AOP)主要的的实现技术主要有 Spring
AOP和AspectJ。
1)AspectJ的底层技术。 AspectJ的底层技术是静态代理,即用一种AspectJ支持的特定语言编写切
面,通过一个命令来 编译,生成一个新的代理类,该代理类增强了业务类,这是在编译时增强,相对于
下面说的运行 时增强,编译时增强的性能更好。2)Spring AOP Spring AOP采用的是动态代理,在运行期间对业务方法进行增强,所以不会生成新
类,对于 动态代理技术,Spring AOP提供了对JDK动态代理的支持以及CGLib的支持。
JDK动态代理只能为接口创建动态代理实例,而不能对类创建动态代理。需要获得被目标类的 接口信息
(应用Java的反射技术),生成一个实现了代理接口的动态代理类(字节码),再通过 反射机制获得动
态代理类的构造函数,利用构造函数生成动态代理类的实例对象,在调用具体方 法前调用
invokeHandler方法来处理。
CGLib动态代理需要依赖asm包,把被代理对象类的class文件加载进来,修改其字节码生成 子类。 但
是Spring AOP基于注解配置的情况下,需要依赖于AspectJ包的标准注解。