Spring与MVC面试题

Spring/Spring MVC

1. Spring是什么,好处有哪些,为什么要使用?

Spring是一个轻量级的开源的JAVAEE框架

好处:方便解耦简化开发,Aop编程支持,方便程序测试和进行事务操作,可以整合其他框架,降低Api开发难度

有以上的优点可以解决企业应用开发的复杂性

 

2. 解释一下什么是 AOP?

面向切面:在不改变原有方法的定义与使用,原程序的流程,开源改变原有方法的功能(增加功能)

底层原理:动态代理

 

 

3. 解释一下什么是 IOC?

控制反转(依赖注入):将创建对象的控制权交给Spring(容器)管理

实现:反射

IOC和di的区别:ioc可以理解为目的,di为手段。Ioc将对象创建权(new对象)反转给容器,di依赖ioc容器在对象创建的过程中,将对象依赖的属性通过配置进行注入。

底层原理:xml解析,工厂模式,反射

 

4. Spring有几种IOC容器,区别是什么?

BeanFactory:负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期

加载配置文件时候不对创建对象,在获取对象(使用)才会创建对象

ApplicationContext:是BeanFactory的子接口,除了上述功能外还提供了更完整的框架功能:国际化,资源访问,事件传递

加载配置文件时就会把配置文件对象进行创建

实现类

 

 

 

5. Spring 有哪些主要模块?

 

6. 什么是SpringBean,有几种类型Bean?

是spring Ioc容器管理的对象,由IOC容器管理来实例化、配置、装配和管理,基于用户提供给容器的配置元数据(注入方式)配置

有二种类型bean

普通bean:在配置文件中定义bean类型就是返回类型

工程bean:在配置文件中定义bean类型可以和返回类型不一样

 

7. Spring Ioc的注入方式?

基于xml配置:set注入,构造器注入

基于注解方式:注解方式注入

 

  

8. Spring可以注入null和属性值包含特殊符号么?

可以  

 

 

9. Spring 中的内部Bean和外部Bean是什么?

外部bean用ref属性放入bean标签的id值

 

内部bean:当有一个学生bean和班级bean的时候,班级bean是学生bean的一个属性,可以在学生bean标签内使用property标签嵌套班级bean标签

 

 

10. Spring 中如何注入java集合?

注入属性值如下图

 

 

 

注入对象时如下图

使用bean标签设置集合对象属性值,在注入集合中使用list标签内用ref标签获取对象bean

 

11. Spring 支持几种 Bean 的作用域?

五种

默认Singleto:单例模式 Prototype 多例 Request 每个请求 session 会话周期

Global-session 全局session 后面3个基于applicationcontext下有效

 

 

 

12. Spring 中的 Bean 是线程安全的吗?

不是

 

13. Spring Bean 的生命周期?

实例化bean对象-属性赋值-处理Aware接口(当有使用的时候)-初始化-销毁

 

14. 什么是Spring自动装配,Spring 自动装配 Bean 有哪些方式,怎么使用?

根据指定装配规则,Spring自动将匹配的属性值注入

常用 byName根据bean的名称 id属性 byType根据类型 bean的class属性

在bean标签里使用autowire属性 使用byName…

局限性:重写,不能装配简单数据类型,模糊特性

 

15. Spring Bean的注解有哪些?

@Component @Repository @Service @Controller

 

 

16. Spring Aop的专业术语

连接点:类里可以被增强的方法,这些方法称为连接点

关注点:在应用模块中实现以解决特定业务问题的方法

横切关注点:贯穿整个应用程序的关注点 像事务管理,权限,日志

切入点:实际被真正增强的方法,称为切入点

引入:引入允许在已存在类中增加的新的方法和属性

通知(增强):实际增强的逻辑部分称为通知(增强)

目标对象:被通知对象

通知类型:前置通知,后置通知,环绕通知,异常通知,最终通知

切面:动作,把通知应用到切入点的过程

代理:通知(增强后)后创建的对象

切点表达式:Aop切点表达式:execution(* com.dao.hibimpl.*.*(..))

  第一个*代表所有的返回值类型

     第二个*代表所有的类

     第三个*代表类所有方法

       最后一个..代表所有的参数。

 

AspectJ

 

 

 

17. jdbc template是什么?怎么使用

Spring框架对jdbc的封装,使用jdbctemplate方便对数据库操作

引入jar包,在spring配置文件配置数据库连接池,配置jdbctemplate对象注入DataSource

 

 

 

 

18. Spring 支持事务的管理方式?

   编程式事务管理(灵活,难维护)和声明式事务管理(业务和事务管理分离,通过注解或xml配置管理方便)

声明式事务管理底层使用aop原理

 

 

19. Spring 事务传播行为是什么,有几种?

多事务方法调用的时候对数据库进行变化操作的管理

有七种

 

 

20. Spring 事务的隔离级别?

与mysql事务一样

 

 

 

21. Spring 事务实现方式有哪些?

xml配置:用aop:config声明要进行事务增强的切面,用tx:advice声明具体方法的事务属性,及应用到的事务管理器,此方法的优势比较明显,使用比较方便,但是缺点是不容易理解,配置容易失误

注解:使用@transactional注解配置声明事务,配置比较方便,程序员只要在service层代码设置即可实现。缺点就是后期调整很烦

 

22. 说一下 Spring 的事务隔离?

说几个读的问题,隔离级别,怎么解决

 

23. 说一下 Spring MVC 运行流程?

发送请求到前端控制器,前端控制器请求处理器映射器寻找handler,处理器映射器找到后返回,前端控制器在调用处理器适配器执行handler,执行完后向前端控制器返回modelandview,前端控制器请求视图解析器进行视图解析,解析完成后返回view给前端控制器,前端控制器进行视图渲染并向用户响应结果

 

 

24. Spring MVC 有哪些组件?

前端控制器 DispatcherServlet

 

作用:接收请求、响应结果,相当于转发器

 

处理器映射器HandlerMapping

 

作用:根据请求的URL来查找Handler

 

处理器适配器HandlerAdapter

 

执行处理器

 

处理器Handler 

 

封装的controller

 

视图解析器 ViewResolver

 

根据视图逻辑名解析成真正的视图

 

视图View

 

View是一个接口, 它的实现类支持不同的视图类型

 

 

25. Spring MVC 常用注解?

 

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

 

@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

 

@RestController:相当于@controller+@ResponseBody

 

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。

 

具有六个属性value\method\consumes\produces\params\headers的作用

 

Value:指定请求的实际地址,指定的地址可以是URI Template 模式;

 

Method:指定请求的method类型,GET、POST、PUT、DELETE等;

 

Consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

 

produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

 

params:指定request中必须包含某些参数值是,才让该方法处理。

 

Headers:指定request中必须包含某些指定的header值,才能让该方法处理请求

 

 

26. SpringMvc中函数的返回值是什么?

返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

 

27. SpringMvc用什么对象从后台向前台传递数据的?

通过request、Model、Map、ModelAndView对象,把要传递的值添加到对象里面,前台就可以通过el表达式拿到。

 

28.如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

1、直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。

2、使用@RequestParam注解的方式获取,注意设置的别名需要与表单传值的名称一致。

3、使用POJO对象绑定请求参数值,注意对象中属性与表单元素的名称一致。

 

29.如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

 

30.SpringMVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加"forward:",比如"forward:user.go?name=1"

(2)重定向:在返回值前面加"redirect:",比如"redirect:user.go"

 

31.SpringMvc怎么和AJAX相互调用的?

导入jackon jar包,在控制器配置json映射,在方法上使用@ResponseBody注解

 

32.Spring mvc @PathVariable怎么用?

在@RequestMapping中请求路径,将需要传递的参数用{}括起来,传参用注解设置别名,别名需要和url中的参数名称一致

 

33.Spring MVC里面拦截器是怎么写的

实现HandlerInterceptor接口,

然后在Spring MVC的配置文件中配置拦截器

 

34.请说明filter(过滤器)和inteceptor(拦截器)的区别?

1、拦截器是基于java的反射,过滤器是基于java的函数回调

2、拦截器不依赖于servlet容器,而过滤器依赖于servlet容器

3、拦截器只对action请求起作用,过滤器对所有的请求起作用

4、拦截器可以访问action上下文,值栈里的对象,而过滤器不能访问

5、在action生命周期中,拦截器可以被多次调用,过滤器只能在servlet初始化时调用一次

6、拦截器可以获取IOC容器中的各个bean,过滤器不行,在拦截器中注入一个service可以调用逻辑业务

 

35. SpringMVC异常处理?

异常处理二种方式

使用MVC提供的简单异常处理器 SimpleMappingExceptionResolver

第一步:    value跳转页面    key 异常名

自定义异常设置

实现Spring的异常处理接口HanlerExceptionResolver自定义自己的异常处理器

①创建异常处理器实现HanlerExceptionResolver

②配置异常处理器

③编写异常页面

④测试异常跳转

配置自定义异常处理器路径

 

 

 

36.@Autowired 与@Resource的作用是什么有什么区别?

他们二个都是用来装配bean的,都可以写在字段上或者setter上

区别:

Autowired是Spring提供的,@Resource是java2EE提供的

@Autowired默认按照类型来注入,按照名称注入需要与修饰符连用

@Resource二种类型都支持,默认按照名称注入,找不到就按照类型找

 

37.MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?

是单例模式,多线程访问的时候有线程安全问题,不要用同步,会影响性能,解决方案是在控制器里面不能写字段。

 

38.SSM 三大框架各个原理,相互之间怎样的关系?

(1).Springmvc框架主要处理用户请求和响应处理后的结果,

如:提供处理用户提交的数据和数据类型转换以及在前台显示用户数据;

(2).Spring框架主要提供依赖注入,是的各层的对象之间关联关系解耦,

并且在Spring框架提供更大的事务支持。

(3).Mybatis框架提供对象的持久化操作,就是面向对象的方式往数据库里面进行增删改查。

通过MyBatis框架提供的适配包Mybatis-spring-1.3.0实现与spring的整合.

 

39. 说一说MVC模式

MVC (Model-View-Controller)模式,即模型-试图-控制器模式,

其核心思想是将整个程序代码分成相对独立而又能协同工作的3个组成部分,具体的功能如下:

模型(Model): 业务逻辑层。实现具体的业务逻辑、状态管理的功能。

视图(View):表示层。与用户实现交互的页面,通常实现数据的输入和输出功能。

控制器(Controller):控制层。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。

 

posted @ 2021-01-29 13:38  呆Finn  阅读(345)  评论(0编辑  收藏  举报