1. Spring 有哪些特点?
2. Spring 的核心模块有哪些? Spring 有七大核心模块:
3. 什么是 Spring ioc?
4. 说一说循环依赖怎么解决。 -循环依赖就是 A 对象有属性 b,B 对象有属性 A,这就是循环依赖。假如通过构造方法创建对象,创建 A 的时候要传入 B,B 又还没有,就得创建,创建 B 又得传入 A,这样就会无限套娃,所以 Spring 只能解决 setter 注入的循环依赖问题。它是用三级缓存解决的,其实也就是三个 map,一级缓存保存的是成品对象;二级缓存保存的是半成品对象,即实例化了但是属性还没赋值的对象;三级缓存保存的是 lambda 表达式。解决三级缓存的流程为:创建 A 对象之前,就会判断缓存中有没有 A,如果没有,就会创建 A 对象,在给 A 对象属性赋值之前,就会调用 addSingletonFactory 方法,该方法传入一个 lambda 表达式,与此同时会把这个 lambda 表达式放进三级缓存中;接着填充属性,发现属性 b 为空,就会实例化 B,实例化 B 和实例化 A 流程一样,在给 b 填充属性的时候,发现 a 为空,但是三级缓存中有 a 对象的 lambda 表达式,然后就会执行这段表达式,就得到了 a 对象,半成品 a 对象就会放到二级缓存中。赋值完的 b 对象,就是一个成品对象了,就会放到一级缓存中,回去再给 a 对象的 b 属性赋值时,就直接从一级缓存中取出 b 对象,赋值完的 a 对象也是一个成品对象了,也会放到一级缓存中。如果没有用到 aop,则用两级缓存,也可以解决循环依赖问题,如果用到了 aop,必须要三级,因为两级缓存无法区分对象的版本。
5. Spring bean 是安全的吗?如果不安全,要怎么解决?
6. 说一说 Spring bean 的生命周期。
7. 依赖注入有哪些方式?
8. 自动装配有哪些方式?@Autowired 和 @Resource 有什么区别?
9. 说说你对 Spring AOP 的理解。 AOP 就是面向切面编程,把与业务逻辑无关且同时影响多个对象的代码抽取出来形成切面,降低模块之间的耦合度,提高了代码的复用性。AOP 中的核心概念有:
10. Spring AOP 的原理是什么?
11. 说一说 Spring 的事务。 Spring 事务是通过对数据库事务的支持来实现的,分为编程式事务和声明式事务,我们常用的是声明式事务,用注解的方式,对代码没有侵入。Spring 事务的传播行为有七种:
12. 了解 SpringMVC 的工作流程吗?
13. BeanFactory 和 FactoryBean 有什么区别? BeanFactory 是 Spring IOC 最底层的基础组件,管理 bean 的,而 FactoryBean 是用来创建 bean 的,是创建 bean 的一种方式,实现 Factory Bean 重写其方法可以创建 bean。