面试题-Java基础(十)- Spring和Spring MVC

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的作用是啥?

 

下一节 Spring boot / Spring cloud

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值