1、为什么要使用Spring?
Spring是一个轻量级的面向切面和控制反转的容器框架,适用于任何Java应用。
- 轻量:从大小和开销方面来讲Spring都是轻量的。完整的Spring框架可以在一个1MB多的jar文件中发布,并且Spring所需要的处理开销可以忽略不计。此外Spring是非侵入式的,Spring应用中的对象可以不依赖于Spring特定的类。
- 控制反转:Spring通过控制反转(IOC)的技术进行松耦合。就是对象不会主动去请求依赖,而是在对象初始化的时候,容器就会主动将其所需的依赖传递给他。
- 面向切面:Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑和系统级服务进行内聚性开发。应用对象只负责实现它所需要完成的业务逻辑,无序关注系统级关注点,例如日志,事务,权限等。
- 容器:Spring包含并管理对象的配置和生命周期,从这个意义上来讲它是一个容器。
- 框架:Spring可以将简单的组件配置,组合成复杂的应用。在Spring中,应用对象被声明式的组合,典型的是XML配置文件,Spring提供了很多基础功能(事务管理,持久化框架集成等),开发人员只需要专注于应用逻辑。
2、解释一下什么是AOP?
AOP面向切面编程,是对于OOP的一个补充和完善;
OOP面向对象编程,通过引用封装,继承,多态等概念建立的一种对象的层次结构,用于模拟一类公共行为的集合。允许开发人员定义纵向的关系,而对于横向关系,及需要将某一个公共行为分散到所有对象中时候,就显得无能为力。这种需要散布到各处于业务逻辑无关的成为横切代码,如果在oop中实现,则会产生大量的重复性代码。
AOP将软件系统的关注点分为了两部分:核心关注点和横切关注点,及将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。
3、解释一下什么是IOC?
IOC:通过第三方(IOC容器)实现具有依赖关系的对象间进行解耦。
对象A依赖对象B的操作,通过IOC容器,从主动的请求编程了被动的接受,控制权颠倒过来了,从而得名控制反转。
4、Spring 有哪些模块?
Spring至今已经集成了20多个模块,分为核心容器,数据访问和集成,web,AOP,消息,工具和测试模块。如图:
5、Spring常用的注入方式有哪些?
Spring通过依赖注入实现了控制反转,主要的注入方式有:
- 构造方法注入
- setter注入
- 基于注解注入
Spring 注册bean的方式与区别?
- @Component 可以用于注册所有的bean,一般是无法用以下三种进行准确分类的。
- @Controller 用于注册控制层的bean
- @Repository 用于注册DAO层的bean
- @Service 用于注册服务层的bean
6、Spring的bean是线程安全的吗?
Spring容器中并没有对bean提供线程安全策略,因此bean可以说bean不是线程安全的。但如果bean不存在状态问题的时候就不存在线程安全问题。
7、Spring支持几种bean的作用域?
当Spring容器创建bean的时候,不仅可以完成bean实例的实例化,还可以指定bean的作用域。Spring支持以下五种作用域:
- singelton 单例模式:在整个SpringIOC容器中,使用singleton定义的bean只有一个实例。
- prototype 原型模式:每次通过容器的getBean方法获取prototype定义的bean时,都会产生一个新的bean实例。
- request:对于每次http请求,使用request定义的bean都会产生一个新实例,即每次产生的http将会产生不同的bean。只用在web应用中使用Spring的时候,该作用域才会生效。
- session:对于每次HTTP session,使用Session定义的bean都会产生一个新实例,只有在web应用中使用Spring时候,该作用域才生效。
- globalSession:每个全局的http session,使用session定义的bean都会产生一个新实例,只有在web应用中使用spring时候,该作用域才会生效。
singleton和prototype是常用的两种bean作用域,在不指定作用域的情况下,Spring默认使用singleton,对于singleton作用域的实例, 每次请求都返回相同的实例,有容器负责跟踪实例的状态,负责维护实例的生命周期行为。prototype对于每次请求都会创建新的实例,容器只负责进行new的操作,不会进行跟踪和维护,因而prototype作用域,会造成很大的创建和销毁的消耗。
8、Spring自动装配bean的方式有哪些?
Spring容器负责创建程序中的bean,并且通过id来协调这些对象的关系,作为开发人员我们需要告诉spring需要创建哪些bean并如何将他们装配到一起。
bean的装配方式有两种:
- 隐式的bean的发现机制和自动装配
- 在Java代码或者xml文件中做显示的配置
9、说一个Spring事务的隔离机制
事务隔离级别指的是一个事务在对一个数据进行修改的时候,与另一个并行事务的隔离级别。如果多个事务同时访问一个数据,如果没有相应的隔离级别就会产生一下问题:
脏读:事务B读取了事务A未提交的数据,如果事务A回滚则造成事务B读取数据的准确性。
不可重复读:事务B在事务A读取到数据后,对数据进行了修改,是得事务A再次读取时候,前后数据不一致
幻读:由于事务A对于数据的修改,导致事务B使用同样的检索条件所搜去到的数据集时不一致的。
10、Spring MVC的执行流程?
11、Spring MVC有哪些组件?
12、@RequestMapping的作用?
13、@Autowired的作用是啥?