目录
一,SpringBean的生命周期
Bean 容器找到配置文件中 Spring Bean 的定义。
Bean 容器利用 Java Reflection API 创建一个 Bean 的实例。
如果涉及到一些属性值,利用 set()方法设置一些属性值。
如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入 Bean 的名字。
如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader 对象的实例。
如果 Bean 实现了 BeanFactoryAware 接口,调用 setBeanClassFacotory()方法,传入 ClassLoader 对象的实例。
与上面的类似,如果实现了其他*Aware 接口,就调用相应的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行 postProcessBeforeInitialization()方法。
如果 Bean 实现了 InitializingBean 接口,执行 afeterPropertiesSet()方法。
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcess 对象,执行 postProcessAfterInitialization()方法。
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy()方法。
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。
总结以上步骤,核心主干主要就是五部分构成:
构造 Bean 对象
设置 Bean 属性
初始化回调
Bean 调用
销毁 Bean
二,SpringMVC执行流程
MVC 是 Model — View — Controler 的简称,它是一种架构模式,它分离了表现与交互。它被分为三个核心部件:模型、视图、控制器。
具体流程如下所示:
1、用户发送出请求到前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter(处理器适配器)。
5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
6、Controller执行完成返回ModelAndView对象。
7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
9、ViewReslover解析后返回具体View(视图)。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。
三,SpringMVC的常用注解有哪些
我们常用的Springmvc注解主要分类下面几大类:
1、用于声明Bean到Springmvc容器:@Controller、@RestController
区别在于后者还可以将返回的集合或对象转换为JSON直接返回
2、设置请求路径:@RequestMapping、@GetMapping、@PostMapping 、@PutMapping、@DeleteMapping
第一个是通用的,可以接收各种类型的请求;后面四个只能直接对应类型的请求
3、接收请求参数:
@RequestBody: 接收请求体中的json数据
@PathViriable:接收请求路径中的参数
@RequestHeader:接收请求头中的参数
@RequestParam:一般用于给参数设置默认值或者完成请求参数和controller方法参数的映射
四,SpringMVC如何处理统一异常
SpringMVC的异常处理底层是通过AOP实现的,它的核心思想是将异常处理的代码和业务逻辑代码分离开来
使用它之后,我们在自己的业务代码中不需要在处理异常,有异常直接就上抛到框架中
框架就会将异常交给自定义的全局异常处理器中统一处理
自定义全局异常处理器,会用到两个注解:
@RestControllerAdvice 标注在类上,声明被标注的类是一个用于专门处理异常的类
@ExceptionHandler 标注在异常处理类中的方法上,声明被标注的方法可以处理哪些异常