当前位置: 首页 > 科技观察

春天随便问,我来答!

时间:2023-03-21 00:40:35 科技观察

你好,我是。话不多说,走吧!说说SpringBean的生命周期在说具体的生命周期之前,我们需要知道为什么Bean很容易添加一些属性,或者可以在运行时修改,因为在生成Bean的时候,Spring对外暴露了很多扩展点.基于这些点,我们可以设置一些逻辑,Spring会在Bean创建的某些阶段,根据这些扩展点对Bean进行改造。有了上面的认识,我们再来看看SpringBean的生命周期。我用一张图来总结一下:大概了解了生命周期之后,再来看详细的操作。我们可以看到有很多扩展点可以做的事情:注意细节,这张图的颜色对应上图。我再用文字描述一下:InstantiateBean。根据属性,注入需要的Bean。如果Bean实现了感知接口,例如BeanNameAware,则执行感知注入。如果有BeanPostProcessor,则执行BeanPostProcessor#postProcessBeforeInitialization方法。如果bean是InitializingBean,则执行afterPropertiesSet方法。如果有initMethod,则执行它。如果有BeanPostProcessor,则执行BeanPostProcessor#postProcessAfterInitialization方法。用豆子。如果bean是DisposableBean,则执行destroy方法。如果有destroy方法,则执行它。说说对SpringMVC的理解?SpringMVC是基于ServletAPI构建的。可以说核心就是DispatcherServlet,它是一个前端控制器。还有几个重要的组件:handlermapping、controller、viewresolver等,这些组件让我们可以和Servlets解耦。我们不需要一个一个写Servlet。基于Spring的管理可以很好的实现Web应用,简单方便。那么关于MVC的解释我就不提了,比如Model,View,Controller等等。SpringMVC的具体工作原理?当有请求到来时,会被DispatcherServlet接收,DispatcherServlet会根据处理程序映射(HandlerMapping)(其中包含很多定义好的HandlerInterceptors,拦截器)找到对应的HandlerExecutionChain。然后在HandlerAdapter适配器适配后(了解适配器模式),执行handler,即通过controller的调用返回ModelAndView。然后DispatcherServlet解析得到ViewName,传递给ViewResoler视图解析器,解析后获取View视图。然后DispatcherServlet将模型数据填充到视图中,并将最终的Response返回给用户。我们常用的视图有jsp、freemaker、velocity等,你知道什么是SpringMVC父子容器吗?官网上有一张图可以理解:可以看到services和repositories属于父容器,而Controllers等属于子容器。那为什么会有父子之分呢?其实在Spring容器启动的时候,是不会有SpringMVC这个概念的。它只会扫描文件并创建一个context,此时就是父容器。然后发现web服务需要生成DispatcherServlet。这时候会调用DispatcherServlet#init。该方法中会生成一个新的context,并将之前的context设置为自己的Parent。这样一来,就有了父子之别,让指责更加明确。子容器负责webpart,父容器是一些普通的bean。这也是父子之间的区别。如果有人不把controller扫描包的配置写在spring-servlet.xml中,而是写在service.xml中,那么controller就会被添加到父容器中。找不到,请求是404。当然,如果你在子容器中添加服务和存储库也无所谓,但不是必须的,分层是更好的方法。对了,子容器可以使用父容器的bean,但是父容器不能使用子容器的bean。您知道Spring使用哪些设计模式和工厂模式?BeanFacotry从名字就可以看出。模板方法,什么JdbcTemplate,RestTemplate。代理模式,AOP就是关于代理的。单例,这个就不用说了。责任链模式,例如拦截器。观察者模式,Spring中的监听者。适配器模式...SpringMVC提到的handlerApdaper。太多了...Spring事务有几个隔离级别。从源码定义可以看出一共有5个隔离级别,DEFAULT是数据库定义的隔离级别。其他的是:未提交读、提交读、可重复读和序列化。隔离级别的具体概念我就不介绍了,大家应该都很清楚了。如果不确定,请参阅我的MySQL文章:mysql总结。文章的后半部分写好了。Spring有哪些事务传播行为?从源码来看,一共有7种事务传播行为:PROPAGATION_REQUIRED(默认)如果有当前事务,则使用当前事务,如果没有事务,则开启新的事务。PROPAGATION_SUPPORTS支持当前事务,如果不存在则为非事务性。PROPAGATION_MANDATORY支持当前事务,不存在则抛出异常。PROPAGATION_REQUIRES_NEW创建一个新事务,或者暂停当前事务(如果存在)。PROPAGATION_NOT_SUPPORTED不支持当前事务,始终以非事务方式执行。PROPAGATION_NEVER不支持当前事务,如果当前存在事务则抛出异常。PROPAGATION_NESTED如果当前事务存在,将在嵌套事务中执行。内部事务依赖于外部事务。如果外部事务失败,则内部事务将回滚。内层交易失败不会影响外层交易。Spring事务传播行为有什么用?这道题是群里一个小伙伴遇到的一道面试题。其实答案就几个字:控制交易的边界。