架构篇(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类型。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值