[TOC]
Spring
IoC与AOP
AOP:面向切面编程
能够将与业务无关,却为业务模块所共同调用的逻辑或责任(如事务处理、日志管理、权限控制)封装起来,降低模块的耦合度。
SpringAOP 是基于动态代理的,如果要代理的对象实现了某个接口,那么SpringAOP会使用JDK Proxy 去创建代理对象,而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理。
什么原理???
SpringMVC
页面请求流程
客户端(浏览器)发起请求,直接请求到
DispatcherServletDispatcherServlet根据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 注解。