Spring常见面试题总结

学习Java Web不可避免地要学习Spring。那么什么是Spring呢? Spring是一个开源的轻量级的Java开发框架,主要是为了简化开发和提高可维护性。
今天总结一下面试中有关Spring的面试题,如有不当请多指教!

  • 列举一些重要的Spring模块
  • 谈谈Spring IOC
  • 谈谈Spring AOP
  • Spring中的bean的作用域有哪些?
  • @Component和@Bean的区别是什么?
  • 说说自己对于Spring MVC了解?
  • 谈谈SpringMVC工作原理
  • Spring框架中用到了哪些设计模式?

列举一些重要的Spring模块

下图对应的是 Spring4.x 版本

  • Spring Core:基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供IOC依赖注入功能。
  • Spring Aspects: 该模块为与AspectJ的集成提供支持。
  • Spring AOP:提供了面向切面的编程实现。
  • Spring JDBC: Java数据库连接。
  • Spring JMS:Java消息服务。
  • Spring ORM: 用于支持Hibernate等ORM工具。
  • Spring Web: 为创建Web应用程序提供支持。
  • Spring Test: 提供了对 JUnit 和 TestNG 测试的支持。

谈谈Spring IOC

IOC(Inverse of Control:控制反转)是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IOC容器实际上就是个Map(key,value),Map 中存放的是各种对象。

将对象之间的相互依赖关系交给 IOC 容器来管理,并由 IOC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

IOC源码解析:IOC源码解析

谈谈Spring AOP

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib

Spring中的bean的作用域有哪些?

  • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • prototype : 每次请求都会创建一个新的 bean 实例。
  • request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
  • session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
  • global-session: 该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

@Component和@Bean的区别是什么

@Component 注解作用于类,而@Bean注解作用于方法。

@Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。@Bean注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean告诉了Spring这是某个类的示例,当我需要用它的时候还给我。

说说自己对于Spring MVC了解?

MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。
Spring MVC 下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)。

谈谈SpringMVC工作原理(重点)

原理如下图所示:

流程说明(重要):

  1. 客户端(浏览器)发送请求,直接请求到DispatcherServlet
  2. DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler
  3. 解析到对应的Handler(也就是我们平常说的Controller控制器)后,开始由HandlerAdapter适配器处理。
  4. HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
  5. 处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View
  6. ViewResolver会根据逻辑View查找实际的View
  7. DispaterServlet把返回的Model传给View(视图渲染)。
  8. View返回给请求者(浏览器)

Spring框架中用到了哪些设计模式?

源码解析:Spring设计模式源码解析

  • 工厂模式: Spring使用工厂模式通过BeanFactoryApplicationContext创建 bean 对象。
  • 代理模式: Spring AOP 功能的实现。
  • 单例模式: Spring 中的 Bean 默认都是单例的。
  • 模板方法模式: Spring 中jdbcTemplatehibernateTemplate等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  • 装饰器模式: 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  • 观察者模式:Spring 事件驱动模型就是观察者模式很经典的一个应用。
  • 适配器模式:Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller
  • ......

参考

Spring面试总结

你可能感兴趣的:(spring)