spring bean 容器的生命周期是什么样的?
spring bean 容器的生命周期流程如下:
- Spring 容器根据配置中的bean 定义中实例化bean。
- Spring 使用依赖注入填充所有属性,如bean 中所定义的配置。
- 如果bean 实现BeanNameAware 接口,则工厂通过传递bean 的ID 来调用setBeanName()。
- 如果bean 实现BeanFactoryAware 接口,工厂通过传递自身的实例来调用setBeanFactory()。
- 如果存在与bean 关联的任何BeanPostProcessors,则调用preProcessBeforeInitialization() 方法。
- 如果为bean 指定了init 方法(
- 最后,如果存在与bean 关联的任何BeanPostProcessors,则将调用postProcessAfterInitialization() 方法。
- 如果bean 实现DisposableBean 接口,当spring 容器关闭时,会调用destory()。
- 如果为bean 指定了destroy 方法(
spring 事务实现方式有哪些
- 编程式事务管理,在代码中调用 commit()、rollback()等事务管理相关的方法
- 基于 TransactionProxyFactoryBean 的声明式事务管理
- 基于注解 @Transactional 的声明式事务管理
- 基于 Aspectj AOP 配置(注解)事务
spring mvc 运行流程
1、在 web 项目的 web.xml 文件配置 DispatcherServlet,启动 web 项目完成初始化动作
2、http 请求到 DispatcherServlet
3、根据 HttpServletRequest 查找 HandlerExecutionChain
4、根据 HandlerExecutionChain 获取 HandlerAdapter、执行 handler
5、Handler 执行完成返回 ModelAndView
6、DispatcherServlet 进行结合异常处理 ModelAndView
7、DispatcherServlet 进行视图渲染,将 Model 数据在 View 中填充
8、DispatcherServlet 返回结果
源码查看思路
web.xml 配置 DispatcherServlet 是入口
DispatcherServlet 继承 FrameworkServlet 继承 HttpServletBean 继承 HttpServlet,web项目启动时自动调用 HttpServletBean 的 init 方法完成初始化动作
当 http 请求过来,是 HttpServlet 根据请求类型(get、post、delete…) 执行 doGet、doPost、doDelete 等方法,被FrameworkServlet重写,统一调用 FrameworkServlet.processRequest 方法处理请求
在 FrameworkServlet.processRequest 方法中,调用了 DispatcherServlet.doService() 方法,顺着这个方法就可以理清楚 spring mvc 处理 http 请求的整体逻辑