2021-10-14

Java面试题之Spring、Spring MVC

1. 为什么要使用 spring?

1.方便解耦,便于开发(Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理)

2.spring支持aop编程(spring提供面向切面编程,可以很方便的实现对程序进行权限拦截和运行监控等功能)

3.声明式事务的支持(通过配置就完成对事务的支持,不需要手动编程)

4.方便程序的测试,spring 对junit4支持,可以通过注解方便的测试spring 程序

5.方便集成各种优秀的框架

6.降低javaEE API的使用难度(Spring 对javaEE开发中非常难用的一些API 例如JDBC,javaMail,远程调用等,都提供了封装,是这些API应用难度大大降低)

2.解释一下什么是AOP(面向切面编程)?

aop即面向切面编程,在原有功能的基础上通过aop添加新的功能,而原有的功能并不知道新添加的功能.
简单来说,就是在某个类或者方法执行前后打个标记,声明在执行到这里之前要先执行什么,之后执行什么,插入了新的执行方法.

3.解释一下什么是 IOC(控制反转)?

ioc控制反转.即把创建对象和维护对象之间关系的权利交给spring容器去做,程序自己不再维护.
传统:自己使用new 或者getInstance直接或者间接创建一个对象(高耦合,不易测试)
spring:容器使用工厂模式为了创建了所需要的对象,我们不用自己创建,直接调用即可.

4.spring 有哪些主要模块?

  1. Spring Core
    框架的最基础部分,提供 IoC 容器,对 bean 进行管理。

  2. Spring Context
    基于 bean,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化、校验和调度等功能。

  3. Spring DAO
    提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码,还提供了声明性事务管理方法。

  4. Spring ORM
    提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate、MyBatis 等。

  5. Spring AOP
    提供了符合AOP Alliance规范的面向方面的编程实现。

  6. Spring Web
    提供了基础的 Web 开发的上下文信息,可与其他 web 进行集成。

  7. Spring Web MVC
    提供了 Web 应用的 Model-View-Controller 全功能实现。

5.spring 常用的注入方式有哪些?

1.构造器注入:可以在xml中通过constructor-arg标签来注入一个对象到构造器中
2.setter方法注入:首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性。
例如:为UserBiz类注入UserDAO,同时为UserBiz注入基本数据类型String,那么这时,就要为UserDAO对象和String类型设置setter方法.,用于进行依赖注入。
3.注解注入:基于注解在xml文件中开启注解扫描以后,就可以在filed上使用注解@Autowired或者@Rsource来注入对象.

6.@Autowire和@Resource的区别

@Autowire默认按照对象类型来注入,如果想按照名称注入可以添加@Qualifier属性实现。在字段注入中,Autowire如果放在接口的位置上,那么如果此时只有一个实现这个接口的类,那么可以注入。
@Resource默认按照名称来匹配,若找不到合适名称的类才会按照类型来匹配。若注解的类上没有名称,那么就按照类名首字母小写来命名。

7.spring 中的 bean 是线程安全的吗?

不是的,spring并没有对单例bean做多线程的封装.

8.spring 支持几种 bean 的作用域?

1.singleton: 单例,默认作用域,在spring容器中此种类型的bean只有一个
2.prototype: 原型,每次调用getBean方法就会产生一个新的实例.
3.request: 每次HTTP请求都会产生不同的bean实例.
4.session: 每次会话产生一个实例
5.global-session: 所有会话共享一个实例

9.spring 自动装配 bean 有哪些方式?

1.xml配置方式
2.注解扫描方式

10.说一下 spring mvc 运行流程?

在这里插入图片描述

1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
5.执行处理器Handler(Controller,也叫页面控制器)。
6.Handler执行完成返回ModelAndView
7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
11.DispatcherServlet响应用户。

11.spring mvc 有哪些组件?

  1. DispatcherServlet 前端控制器
  2. HandlerMapping 请求派发,建立请求和处理器的映射
  3. Controller 处理器
  4. ModelAndView 封装模型和试图信息
  5. ViewResolver 视图处理器,定位页面

12.@RequestMapping 的作用是什么?

映射请求,指定哪些URL可以被该处理器处理.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值