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 映射的注解,可用于类或方法上。
具有六个属性valuemethodconsumesproducesparamsheaders的作用
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
②配置异常处理器
③编写异常页面
④测试异常跳转
配置自定义异常处理器路径