Spring之面试常问的知识点

Spirng框架是非常重要的,是我们学习其他框架的一个基础,Spring中有很多重要的知识点,例如IOC、DI、AOP等,Spring的相关知识也是面试官常问的一个模块,所以我们有必要去了解一下Spring底层的一些实现原理,以下整理了Spring在面试中经常被问到的一些问题:

1. Spring Bean 的作用域
①singleton:单例作用域,默认,用到了单例模式创建bean
②prototype:原型作用域,用到了原型模式创建bean
③request:同一个 Http Request 共享一个 Bean 对象,不同的 Request 拥有不同的 Bean 对象
④session:同一个 Http Session 共享一个 Bean 对象,不同的 Session 拥有不同的 Bean 对象
⑤application:全局的 Web 作用域,类似于 Servlet 中的 Application

2. Spring Bean 的注册方式
①XML 配置文件的注册方式
②Java 注解的注册方式(@Component注解和@Bean注解)
③Java API 的注册方式

3. 同名bean的问题
同一个 Spring 配置文件中 Bean 的 id 和 name 是不能够重复的,否则 Spring 容器启动时会报错。但如果 Spring 加载了多个配置文件的话,可能会出现同名 Bean 的问题。同名 Bean 指的是多个 Bean 有相同的 name 或者 id。Spring 对待同名 Bean 的处理规则是使用最后面的 Bean 覆盖前面的 Bean,所以我们在定义 Bean 时,尽量使用长命名非重复的方式来定义,避免产生同名 Bean 的问题。Bean 的 id 或 name 属性并非必须指定,如果留空的话,容器会为 Bean 自动生成一个唯一的名称,这样也不会出现同名 Bean 的问题。

4. Spring IOC
IOC-Inversion of Control,即控制反转,它不是什么技术,而是一种设计思想。IOC 让程序员不在关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建、初始化、销毁等工作交给spring容器来做

5.Spring IOC创建对象的三种方式
①利用默认的构造方法
②利用静态工厂方法
③利用实例工厂方法

具体可参考文章:https://www.cnblogs.com/ysocean/p/7466217.html#_label2

6.DI依赖注入
创建对象的时候,有可能依赖于其他的对象,即类的属性如何赋值,就用到DI的知识点,简单来说,依赖注入就是给属性赋值(包括基本数据类型和引用数据类型),依赖注入底层是通过反射实现的

依赖注入的两种方式:

  • 使用构造方法注入
  • 使用Setter方法注入

具体可参考文章:https://www.cnblogs.com/ysocean/p/7471451.html

7.Spring容器创建对象的时机
①默认情况,Spring容器启动的时候,就会去创建对象(读取Spring配置文件,遇到bean则创建)
②可以给bean配置一个属性 lazy-init=“true”,配置了这个属性后,Spring就会在context.getBean时才去创建对象

两种创建对象的时机各有优缺点:

  • 第一种情况下可以在启动spring容器的时候,检查spring容器配置文件的正确性,如果再结合tomcat,如果spring容器不能正常启动,整个tomcat就不能正常启动。但是这样的缺点是把一些bean过早的放在了内存中,如果有数据,则对内存来是一个消耗
  • 在第二种情况下,可以减少内存的消耗,但是不容易发现错误

8.Spring Bean的生命周期
①Bean的实例化:由前面可知bean对象的创建时机可能是Spring容器启动的时候,也可能是调用getBean方法的时候,当创建bean对象的时候就会触发Bean的实例化,其实也可以理解成new了一个对象,执行了类的构造方法;需要注意的是由于bean的作用域可能是默认的singleton单例作用域,那么只有在第一次调用getBean方法时会触发bean的实例化,接下来都是直接返回已存在的bean对象;
②调用 Bean 的初始化方法 initializeBean()
③初始化完成之后就可以正常的使用 Bean 对象了,可以调用Bean对象自身的方法等
④Bean对象的销毁:在 Spring 容器关闭时会执行Bean对象的销毁方法,但是 Spring 容器不会自动去调用销毁方法,而是需要我们主动的调用。

注意:Spring中有两种容器,一是BeanFactory容器,二是ApplicationContext容器;两种容器调用的的销毁Bean方法是不一样的

9.Spring AOP
AOP(Aspect Oriented Programming),通常称为面向切面编程,AOP的实现是基于动态代理实现的,它将公共代码模块抽取出来,在需要使用到这种公共代码去增强业务逻辑的时候利用一种“横切”的技术进行增强,不修改到原有代码,满足ocp原则;Spring AOP的好处是可以减少重复代码,提高开发效率,同时可以使业务模块专心的负责业务相关的代码,降低耦合度

具体可参考文章:https://www.cnblogs.com/ysocean/p/7476379.html

补充:Spring三大核心组件:Core、Context、Bean

猜你喜欢

转载自blog.csdn.net/can_chen/article/details/107850507
今日推荐