面试题:33(完成)

5.1.Spring的两大核心是什么?并谈谈你对两大核心的理解;

Spring两大核心是IOC(控制反转)和AOP(面向切面编程) DI(依赖注入)
IOC是把创建对象的操作交给Spring容器去执行
AOP是在不修改源代码的基础上对功能进行增强,底层所运行的是动态代理的方式
DI是把创建的对象赋值给某个类的变量去使用

5.2.Spring的生命周期?

生命周期简单描述的四个阶段,实例化bean对象→给对象属性并给对象赋值→判断是否自定义init初始化方法,创建对象时候会运行该方法→判断是否自定义destroy销毁方法,销毁对象时候会运行该方法。
image.png

5.3.Spring支持bean的作用域有几种?每种作用域是什么样的?

Spring支持如下5种作用域:
(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。
(2)prototype:为每一个bean请求创建一个实例。
(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
(4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。
(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量

5.4.BeanFactory和ApplicationContext有什么区别?

BeanFactory是最顶层的接口,实现了Spring容器最基础的功能,调用起来比较麻烦,在启动时候不会去实例化bean,调用spring容器中的bean对象才会实例化。
ApplicationContext是BeanFactory的子接口,功能较为强大,且使用方便,在spring容器启动时就实例化了bean对象。

5.5.spring的对象默认是单例的还是多例的?单例bean存不存在线程安全问题呢?

默认是单例的,单例的会存在安全问题,可以使用prototype该更为多例模式。
单例存在安全问题:
1、尽量避免使用成员变量。
2、使用ThreadLocal定义成员变量。