一、Spring Bean的生命周期
1.核心元素
- BeanDefinition对象(Bean的类名、作用域、依赖关系等信息)
-
Aware系列接口
-
BeanNameAware
-
setBeanName()方法--->用于在Bean实例化后,将Bean的名称传递给Bean实例
-
-
BeanFactoryAware
-
setBeanFactory()方法--->用于在Bean实例化后,将BeanFactory(即Spring容器)传递给Bean实例
-
-
ApplicationContextAware
-
setApplicationContext()方法--->用于在Bean实例化后,将ApplicationContext(即Spring应用上下文)传递给Bean实例
-
-
-
BeanPostProcessor对象 --(初始化执行的方法-类比aop)
-
postProcessBeforeInitialization()方法
-
postProcessAfterInitialization()方法
-
-
InitializingBean接口
-
afterPropertiesSet()方法 -- (初始化方法)
-
-
init-method -- (自定义初始化方法)
-
DisposableBean接口
-
destroy()方法 -- (销毁方法)
-
-
destory-method -- (自定义销毁方法)
详细总图
2.调用流程
- Spring框架会自动读取配置文件中所定义的类的相关信息,然后将其封装到BeanDefinition对象中(Bean的类名、作用域、依赖关系等信息)
- 通过反射借助于无参构造方法创建对象
- 调用set方法进行依赖注入
- 如果bean实现了BeanNameAware接口,那么此时就会执行该接口中的setBeanName方法
- 如果bean实现了BeanFactoryAware接口,那么此时就会执行该接口中的setBeanFactory.方法
- 如果bean实现了ApplicationContextAware接口,那么此时就会执行该接口中的setApplicationContext方法
- 如果在spring容器中存在BeanPostProcessor对象,那么此时就会执行该对象的postProcessBeforeInitialization,方法
- 如果bean实现了InitializingBean接口,那么此时就会执行afterPropertiesSet方法
- 如果存在自定义初始化方法,那么此时就会执行该方法
- 如果在spring容器中存在BeanPostProcessor对象,那么此时就会执行该对象的postProcessAfterInitialization方法
- 如果bean实现了DisposableBean接口,那么此时就会执行该接口中的destroy方法
- 如果存在自定义销毁方法,那么此时就会执行自定义销毁方法
二、SpringMVC的调用流程
1.核心元素:
- DispatcherServlet(前端控制器)
- HandlerMapping(处理器映射器)
- HandlerAdapter(处理器适配器) ---> Handler(处理器)
- ViewResolver(视图解析器 )---> view(视图)
2.调用流程
- 用户发送请求到前端控制器
- 前端控制器接收用户请求并交由处理器映射器进行映射处理
- 处理器映射器找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给前端控制器
- 前端控制器调用处理器适配器,适配具体的处理器(controller/handler)
- 处理器执行后生成ModelAndView对象并返回给前端控制器
- 前端控制器将拿到的ModelAndView对象交由视图解析器进行解析
- 视图解析器将解析后的视图(view)返回给前端控制器
- 前端控制器根据拿到的视图进行渲染(数据模型填充视图)
- 前端控制器响应用户请求