Spring与MVC面试题 1. Spring是什么,好处有哪些,为什么要使用? 2. 解释一下什么是 AOP? 3. 解释一下什么是 IOC? 4. Spring有几种IOC容器,区别是什么? 5. Spring 有哪些主要模块? 6. 什么是SpringBean,有几种类型Bean? 7. Spring Ioc的注入方式? 8. Spring可以注入null和属性值包含特殊符号么? 9. Spring 中的内部Bean和外部Bean是什么? 10. Spring 中如何注入java集合? 11. Spring 支持几种 Bean 的作用域? 12. Spring 中的 Bean 是线程安全的吗? 13. Spring Bean 的生命周期? 14. 什么是Spring自动装配,Spring 自动装配 Bean 有哪些方式,怎么使用? 15. Spring Bean的注解有哪些? 16. Spring Aop的专业术语 17. jdbc template是什么?怎么使用 18. Spring 支
Spring/Spring MVC
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 的事务隔离?
说几个读的问题,隔离级别,怎么解决