[TOC]
Spring
IoC与AOP
AOP:面向切面编程
能够将与业务无关,却为业务模块所共同调用的逻辑或责任(如事务处理、日志管理、权限控制)封装起来,降低模块的耦合度。
SpringAOP 是基于动态代理的,如果要代理的对象实现了某个接口,那么SpringAOP会使用JDK Proxy 去创建代理对象,而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理。
什么原理???
SpringMVC
页面请求流程
客户端(浏览器)发起请求,直接请求到
DispatcherServlet
DispatcherServlet
根据URL调用HandlerMapping
,解析请求对应的Handler
解析到对应的
Handler
(Controller控制器)后,开始由HandlerAdapter
进行处理HadnlerAdapter
会根据Handler
来调用真正的处理器开始处理请求对应的业务逻辑。Controller 处理完业务后,会返回一个
ModelAndView
对象,Model
是返回数据对象,View
是一个逻辑上的视图ViewResolver
会根据逻辑View
查找实际的视图层DispatcherServlet
把返回的Model
传给View
(视图渲染),进而返回给请求者。
页面跳转方式
1. 直接在页面输出
1 | public void handleRequest(HttpServletRequest req,HttpServletResponse resp){ |
2. 重定向
1 | public void handleRequest(HttpServletRequest req,HttpServletResponse resp){ |
3. 请求转发
1 | public void handleRequest(HttpServletRequest req,HttpServletResponse resp){ |
4. 直接返回jsp页面名
1 | { |
渲染器配置
dispatcher-servlet.xml
1 | <beans xmlns="http://www.springframework.org/schema/beans" |
web.xml
1 | <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> |
5. 有渲染器
1 | { |
6. 使用ModelAndView
1 | public ModelAndView test( |
@RestController和@ResponseBody的区别
这两个注解都会处理返回的数据格式,使用了该类型注解后,返回的不再是视图,不会进行跳转,而是返回 _json_ 或 _xml_ 数据格式,输出在页面上。
@ResponseBody
,使用在单独的方法上,需要哪个方法返回 json 数据格式,就在哪个方法上使用
@RestController
使用在类上,某个类下的所有方法都返回 json 数据格式,则在那个类上使用该注解就有统一性。本质上相当于所有的方法上都统一使用了 @ResponseBody 注解。