1、SpringBoot、SpringMVC和Spring有什么区别
spring是一个使用IOC容器来统一管理Bean,使用依赖注入来实现控制反转的框架,并且提供了AOP面向切面编程的来弥补oop面向对象中重复代码的问题。日志,异常,缓存,事务
springMVC是spring提供处理web的一个框架,提供一个总的前端控制器Servlet,用于接收请求
springboot可以看为是spring+springmvc的一个快速开发工具
2、什么是spring?
3、Spring的优缺点?
1、IOC :集中管理对象,对象与对象之间的耦合度减低了,方便维护默认是单例的
2、AOP:在不修改代码的情况下,对业务代码进行增强,减少重复代码
3、声明事务:提高开发效率,只需要一个简单注解@Transactional就可以完成事务的声明
4、什么是Spirng IOC容器?有什么作用?优点是什么?
控制反转IOC,控制了对象的创建(之前是new 出一个新对象,现在只需要将对象的创建交给了Spring的IOC,使用就是要DI依赖注入@Autowired自动注入)
优点:集中管理对象,方便维护,默认都是单例模式
5、Spring IOC的实现机制是什么?
使用:简单工厂模式(通过一个方法 传入一个标识 生产对应对象) 和 反射机制(<bean class="类路径" 创建对象) 来完成的
6、IOC和DI的区别是什么
ioc是创建对象的理念 DI是IOC实现的理念的重要一环(依赖注入)
7、BeanFactory的作用
顶层接口,主要职责是生产Bean,(getBean() 来获取bean)
8、BeanDefinition的作用
主要就是存储Bean的定义信息,决定Bean的生产方式
9、BeanFactory和ApplicationContext有什么区别
区别:BeanFactory getBean 用于生产Bean
ApplicationContext 实现了FactoryBean接口。它不生产bean而是通知BeanFactory来进行生产。
它还会更多:1、自动帮我们把我们配置的bean注册进来 2、加载环境变量 3、支持多语言...
10、BeanFactory和FactoryBean有什么区别
beanFactory是一个生产bean的工厂,FactoryBean是一个特殊的bean,实现这个接口会实现getBean()返回的实例。FactoryBean会变成懒加载 @Lazy
11、Spring IOC容器的加载过程
new ApplicationContext() spring上下文开始
概念态:进行配置了bean的定义信息,还没有new spring上下文
定义态:读取bean的定义信息到BeanDifinition中去
纯净态:实例化,最开始存在的bean对象,里面还没有属性值的,循环依赖就体现了它的作用
成熟态:初始化,依赖注入,完成属性注入
概念态——(bean工厂后置处理器)——> 定义态——(实例化)——> 纯静态——(初始化)——> 成熟态
12、什么是Spring bean? JavaBean和SpringBean和对象的区别
spring bean 就是被spring IOC管理的对象就是bean
javaBean 就是 new 出来的,自己实例化出来的
13、配置Bean有哪几种方式
14、解释Spring支持的几种bean的作用域
@Scope 来配置
单例(默认),多例,request,session,application
15、单例bean的优势
对象只会创建一个,性能好
16、Spring 的 bean是线程安全的吗?
17、spring如何处理线程并发问题?
1、多例 2、将成员变量放在ThreadLocal中去,3、同步锁(在代码块中添加synchronized)
18、Spring实例化bean方式的几种方式
1、构造函数方式(反射):配置文件,或者注解将bean 的定义信息放到 Beandifinition
2、静态工厂方式
3、实例工厂方式(@Bean)
4、FactoryBean方式
19、什么是bean的装配?什么是bean的自动装配?
@Autowird @Resoure注解
通过bean的名字,类型进行装配
20、自动装配的方式有几种
1、none:默认不进行自动装配,手动设置ref来进行装配(先根据类型,再根据名字(set方法))
2、byName: 根据名字(set方法)
3、byType:根据类型
4、constructor: 构造函数
21、解释Spring框架中bean的生命周期
1、实例化:
a:通过反射去推断构造函数进行实例化 b:静态工厂,实例工厂
2、属性赋值
a:就是自动装配: DI的体现依赖注入 b:循环依赖
3、初始化
a:调用很多aware回调方法 b:调用初始化生命周期回调 c:如果bean实现了aop,创建动态代理
4、销毁
spring容器关闭进行销毁
22、Spring是如何解决Bean的循环依赖
三级缓存(三个map) 进行解决
一级缓存:缓存完整的bean
二级缓存:避免多重循环依赖的情况 重复创建动态代理
三级缓存:
a:函数接口 lambda 把方法传进去(把Bean的实例和Bean名字传进去)
b:不会立即调用
c:会在ABA(第二次getBean(A) 才会调用三级缓存(如何实现了aop会创建动态代理,如果没有依然返回bean的实例))
d:放到二级缓存中去(避免重复创建)
23、二级缓存能不能解决:
可以,但是如果出现多次出现循环依赖,会被多次创建动态代理
@Lazy 延迟加载可以解决循环依赖
24、Spring是如何帮我们在并发的情况下避免获取不完整的Bean?
双重检查锁:两个同步锁,两次检查一级缓存(在看到没有三级缓存,会再次检查一级缓存)
实例化加锁,二级三级缓存加锁
25、描述BeanDefinition的加载过程
26、Spring有哪几种配置方式
1、xml配置文件
2、基于注解的配置
3、基于java的配置,javaConfig
27、JavaConfig是如何代替spring.xml的?
28、@Component,@Controller,@Repository,@Service有什么区别
三层结构
@Primary
29、@Autowird注解自动装配的过程是怎么样的?
30、@Configuration的作用
1、代替xml配置文件
2、加了这个注解会创建cglib动态代理(保证@Bean方法调用Bean是单例的)
31、@Bean的方式如何保证单例的
加@Configuration注解
32、什么是AOP、能做什么?
33、spring Aop有哪些类型的通知
34、Spring AOP 和 AspectJ AOP有什么区别
答:spring AOP提供了AspectJ AOP的支持,只用到了它的切点解析和匹配。@Aspect @Before等注解是AspectJ发明的
35、JDK动态代理和CGLIB动态代理的区别
36、JavaConfig方式如何启用AOP?如何强制使用cglib
@EnableAspectJAutoProxy注解开启AOP
37、什么情况下AOP会失效,怎么解决?
内部调用方法会导致失效。解决方式:必须走代理,重新拿到代理对象再次执行方法才能进行增强。 1、在本类中自动注入当前的bean 2、设置暴露当前代理对象到本地线程,通过AopContext.cuttentProx()拿到当前正在调用的动态代理对象
38、Spring的AOP是在哪里创建的动态代理?
1、在bean的生命周期的初始化后,通过bean的后置处理器会创建aop动态代理
2、特殊,循环依赖的时候会对需要的bean进行aop动态代理
39、事务四大特性ACID
40、Spring支持的事务管理类型,Spring事务实现方式有哪些?
编程式事务,声明式事务(注解 @Transactional,xml配置)
接口,xml配置,注解@Transactional
41、Spring的事务传播行为?
42、spring 的事务隔离?
1、脏读(读已提交) 2、不可重复读(可重复读(一条数据)(加行锁)) 3、幻读(整一表)(序列化(加表锁)))
43、Spring事务实现原理
添加@EnableTransactionManagement注解才能使用 @Transactional 开启事务注解
AOP 同理
1、解析切面—— bean创建前的第一个bean的后置处理器进行解析advisor
2、创建动态代理—— bean的初始化后调用bean的后置处理器进行创建动态代理,创建动态代理之前会先根据advisor中的pointCut匹配@Transacational 注解是不是有,类上面,接口或者父类
3、调用——
44、Spring事务传播行为实现原理
spring的事务信息是存在ThreadLocal中的,所以一个线程永远只能有一个事务
融入:当传播行为为融入外部事务则拿到ThreadLocal中的Connection,共享一个数据库连接共同提交、回滚
创建事务:当传播行为是创建新事务,会将嵌套事务存入ThreadLocal,再将外部事务暂存起来;当嵌套事务提交、回滚后,会将暂存的事务信息恢复到ThreadLocal中
45、Spring多线程事务,能否保证事务的一致性(同时提交,同时回滚)
46、Spring事务的失效原因
47、Spring事件监听的核心机制是什么
观察者模式 MQ
48、Spring框架中都用到了哪些设计模式?
单例模式(bean),代理模式(AOP),简单工厂模式(BeanFactory),观察者模式(spring事件监听)