文章图片
【spring|【Java面试题】大厂面试必问的Spring 问题你来问,我来答!】
文章图片
话不多少 , 发车!
说下 Spring Bean 的生命周期在说具体的生命周期前 , 我们需要先知晓之所以 Bean 容易被添加一些属性 , 或者能在运行时被改造就是因为在生成 Bean 的时候 , Spring对外暴露出很多扩展点 。
基于这些点我们可以设置一些逻辑 , Spring 会在 Bean 创建的某些阶段根据这些扩展点 , 基于此进行 Bean 的改造 。
有了上面的认识 , 我们再来看 Spring Bean 的生命周期 , 我用一幅图先总结一下:
大致了解生命周期之后 , 我们再来看详细的操作 , 可以看到有好多扩展点可以搞事情:
注意细节 , 这幅图的颜色和上面那副有对应关系的 。
我再用文字描述一下:
- 实例化Bean 。
- 根据属性 , 注入需要的 Bean 。
- 如果 Bean 实现了 BeanNameAware 等 aware 接口 , 则执行 aware 注入 。
- 如果有 BeanPostProcessor , 则执行BeanPostProcessor#postProcessBeforeInitialization 方法 。
- 如果 Bean 是 InitializingBean , 则执行 afterPropertiesSet 方法 。
- 如果有 initMethod, 则执行 。
- 如果有 BeanPostProcessor , 执行BeanPostProcessor#postProcessAfterInitialization 方法 。
- 使用 Bean 。
- 如果 Bean 是 DisposableBean , 则执行 destroy 方法 。
- 如果有 destroy 方法 , 则执行 。
还有几个重要的组件:处理器映射、控制器、视图解析器等 。
由这几个组件让我们与 Servlet 解耦 , 不需要写一个个 Servlet, 基于 Spring 的管理就可以很好的实现 web 应用 , 简单 , 方便 。
然后关于 MVC 的解释 , 我就不提了 , 什么 Model , View , Controller 啥的 。
Spring MVC 具体的工作原理?当一个请求过来的时候 , 由 DispatcherServlet 接待 , 它会根据处理器映射(HandlerMapping)找到对应的 HandlerExecutionChain(这里面包含了很多定义的 HandlerInterceptor , 拦截器) 。
然后通过 HandlerAdapter 适配器的适配(适配器模式了解一下)后 , 执行 handler , 即通过 controller 的调用 , 返回 ModelAndView 。
然后 DispatcherServlet 解析得到 ViewName , 将其传给 ViewResoler 视图解析器 , 解析后获得 View 视图 。
然后 DispatcherServlet 将 model 数据填充到 view, 得到最终的 Responose 返回给用户 。
我们常用的视图有 jsp、freemaker、velocity 等 。
SpringMVC 父子容器是什么知道吗?官网上有幅图可以了解下:
可以看到 , services 和 repositories 是属于父容器的 , 而 Controllers 等是属于子容器的 。
那为什么会有父子之分?
其实 Spring 容器在启动的时候 , 不会有 SpringMVC 这个概念 , 只会扫描文件然后创建一个 context, 此时就是父容器 。
然后发现是 web 服务需要生成 DispatcherServlet, 此时就会调用 DispatcherServlet#init , 这个方法里面最会生成一个新的 context , 并把之前的 context 置为自己的 Parent 。
- Java|当下最强的拍照旗舰盘点:顶级硬件+自研芯片,选这三款错不了
- 小米科技|2022年,小米最好的三款产品,强烈推荐
- 定级|首份电子“国家标准物质定级证书”出炉
- spring|这次是真的了!微软发布电脑管家,国内用户专供
- 公平竞争环境|规范网络直播营利行为
- 非法金融|根治虚拟货币“挖矿”
- 浏览器|美企动作可真快,鸿蒙刚越“生死线”,华为又被谷歌盯上了
- 【反邪】“传教”“练功”“治病”......所谓的邪教到底长什么样?
- javascript|软件不更新就不让登录不让用,这算不算是流氓软件?
- docker|电猴网【4月2日快报】电商资讯/干货,网罗天下电商新鲜事儿