欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 架构篇(spring、springMVC、springBoot、myBatis)

架构篇(spring、springMVC、springBoot、myBatis)

2025/3/12 23:13:35 来源:https://blog.csdn.net/qq_52524736/article/details/139926022  浏览:    关键词:架构篇(spring、springMVC、springBoot、myBatis)

spring中的bean是线程安全的吗?

不是线程安全的。若bean中有可以修改的成员变量,是要考虑线程安全问题的。若bean中没有可修改的成员变量(无状态bean),是不需要考虑线程安全问题的。

说一下spring?

spring是一个轻量级框架,主要分为IOC、AOP。IOC是spring提供帮助我们管理对象的,包含对象的整个生命周期。我们把创建对象的权利交给spring的IOC,当我们需要使用某个对象的时候,注入即可(控制反转)。AOP是面向切面编程,主要用来给主业务添加增强方法。比如记录日志、开启事务等。AOP底层是基于接口动态代理技术和基于父类动态代理技术。

spring事务的失效场景?

自己捕获了异常(try),并且没有抛出新异常。

抛出检查异常。(io异常)    解决配置rollbackFor属性。

非public方法导致事务失效。

数据库不支持事务。

Bean的生命周期?

spring扫描包,创建BeanDefinition;通过BeanDefinition获取bean的定义信息;调用构造函数实例化Bean;Bean的依赖注入(属性注入);处理各种Aware接口;Bean的前置处理器;Bean的初始化方法;Bean的后置处理器;Bean的销毁。

spring解决循环依赖?

循环依赖:beanA中注入了b,beanB中注入了a。a中有b,b中有a。

一级缓存:经历过完整生命周期的Bean

二级缓存:未经历完整生命周期的Bean

三级缓存:Bean工厂,创建bean对象

当A创建,会先执行其构造方法创建Abean,然后依赖注入B;Bean还没有创建,这时把A放入一级缓存,开始创建Bbean。执行B的构造方法创建Bbena,需要依赖注入A,从一级缓存获取A,注入B的bean中。B就可以正常初始化了,B被放入一级缓存。再去执行A,A把B注入。这样就解决循环依赖了。

三级缓存主要解决有代理对象循环依赖的,会在执行构造方法前执行,并把Bean工厂放入三级缓存,需要注入当前对象,需要在三级缓存中获取。

构造函数出现循环依赖,可以使用@Lazy解决(懒加载)。

springMVC执行流程?

前端发送请求给前端控制器(DispatcherServlet),根据路径再处理器映射器查询handler,处理器适配器执行具体的handler(controller中具体方法),返回ModelAndView。视图解析器进行解析,图像渲染。

springBoot自动装配原理?

在springBoot的启动类上有@SpringBootApplication注解。

@SpringBootApplication可以分为:@ComponentScan(扫描包)@SpringBootConfiguration(配置)@EnableAutoConfiguration(自动装配的核心类)

@EnableAutoConfiguration是import进来的,在其下面封装好了很多bean。会根据是否有指定的类,才会进行加载。

mybatis执行流程?

根据mybatis-config.xml获取数据库环境信息;创建会话工厂(sqlSessonFactory);创建会话(sqlSession);根据会话中的Executor执行sql,包括java类型转数据库类型,数据库类型转java类型。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词