话不多少,发车!
创新互联建站主要从事成都网站建设、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务道外,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
在说具体的生命周期前,我们需要先知晓之所以 Bean 容易被添加一些属性,或者能在运行时被改造就是因为在生成 Bean 的时候,Spring对外暴露出很多扩展点。
基于这些点我们可以设置一些逻辑,Spring 会在 Bean 创建的某些阶段根据这些扩展点,基于此进行 Bean 的改造。
有了上面的认识,我们再来看 Spring Bean 的生命周期,我用一幅图先总结一下:
大致了解生命周期之后,我们再来看详细的操作,可以看到有好多扩展点可以搞事情:
注意细节,这幅图的颜色和上面那副有对应关系的。
我再用文字描述一下:
Spring MVC 是基于 Servlet API 构建的,可以说核心就是 DispatcherServlet,即一个前端控制器。
还有几个重要的组件:处理器映射、控制器、视图解析器等。
由这几个组件让我们与 Servlet 解耦,不需要写一个个 Servlet ,基于 Spring 的管理就可以很好的实现 web 应用,简单,方便。
然后关于 MVC 的解释,我就不提了,什么 Model,View,Controller 啥的。
当一个请求过来的时候,由 DispatcherServlet 接待,它会根据处理器映射(HandlerMapping)找到对应的 HandlerExecutionChain(这里面包含了很多定义的 HandlerInterceptor,拦截器)。
然后通过 HandlerAdapter 适配器的适配(适配器模式了解一下)后,执行 handler,即通过 controller 的调用,返回 ModelAndView。
然后 DispatcherServlet 解析得到 ViewName,将其传给 ViewResoler 视图解析器,解析后获得 View 视图。
然后 DispatcherServlet 将 model 数据填充到 view ,得到最终的 Responose 返回给用户。
我们常用的视图有 jsp、freemaker、velocity 等。
官网上有幅图可以了解下:
可以看到,services 和 repositories 是属于父容器的,而 Controllers 等是属于子容器的。
那为什么会有父子之分?
其实 Spring 容器在启动的时候,不会有 SpringMVC 这个概念,只会扫描文件然后创建一个 context ,此时就是父容器。
然后发现是 web 服务需要生成 DispatcherServlet ,此时就会调用 DispatcherServlet#init,这个方法里面最会生成一个新的 context,并把之前的 context 置为自己的 Parent。
这样就有了父子之分,这样指责就更加清晰,子容器就负责 web 部分,父容器则是通用的一些 bean。
也正是有了父子之分,如果有些人没把 controller 扫包的配置写在 spring-servlet.xml ,而写到了 service.xml 里,那就会把 controller 添加到父容器里,这样子容器里面就找不到了,请求就 404 了。
当然,如果你把 services 和 repositories 添加到子容器是没影响的,不过没必要,分层还是比较好的方式。
对了,子容器可以用父容器的 Bean,父容器不能用子容器的 Bean。
工厂模式,从名字就看出来了 BeanFacotry。
模板方法,什么 JdbcTemplate、RestTemplate 。
代理模式,AOP 整的都是代理。
单例,这都不需要说了。
责任链模式,比如拦截器。
观察者模式,Spring里的监听器。
适配器模式...SpringMVC 提到的 handlerApdaper。
太多啦...
从源码定义我们可以看到,一共有 5 种隔离级别,而 DEFAULT 就是使用数据库定义的隔离级别。
其他几种分别是:读未提交、读已提交、可重复读、序列化。
具体几个隔离级别的概念我就不介绍了,应该都很清楚。
不清楚的看我这篇 MySQL 的文章:mysql总结。
文章的后半段有写。
从源码来看,一共有 7 种事务传播行为:
Spring 事务传播行为有什么用?这题是群里有位小伙伴遇到的面试题。
其实答案就几个字:控制事务的边界。
本文题目:Spring随便问,我来答!
新闻来源:http://www.mswzjz.cn/qtweb/news14/72164.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能