关于spring面试题
Posted mcahkf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于spring面试题相关的知识,希望对你有一定的参考价值。
1.spring框架有哪些主要模块?
- Spring Core,Spring的核心功能,用IOC容器,解决对象创建以及依赖关系,包含并管理应用对象的配置和生命周期
- Spring DAO,Spring对jdbc的支持,可使用JdbcTemplate来简化数据操作
- Spring ORM,Spring对ORM的支持,提供了对主流的对象映射关系框架的支持。提供了与多个第三方持久层框架的良好整合
- Spring AOP,切面编程,减少了非业务代码的重复,降低了模块之间的耦合。比如:事务管理,日志,权限验证
- Spring Web,Spring对Web模块的支持.
- Spring JEE,Spring对JavaEE其他模块的支持。如EJB,JMS等
2.spring框架用到了哪些设计模式?
- 单例模式:在Spring配置bean时,一般默认为单例
- 依赖注入模式:
- 工厂模式:BeanFactory用来创建对象实例
- 代理模式:Spring AOP
- 前端控制器模式:Spring提供了DispatcherServlet对请求进行处理
- 模板方式模式:减少代码重复性
3.解释IOC(控制反转)、DI(依赖注入)
IOC:把对象的创建、初始化、销毁交给spring来管理,而不是由程序控制,实现控制反转。
DI:依赖注入,在Spring创建对象的过程中,将对象依赖属性通过配置进行注入
DI可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现。
注意:
1. 使用构造器注入时,先实例化依赖的对象后,才实例化这个对象。而使用set方法时,Spring首先实例化对象,然后才实例化所有依赖的对象。
2. 当设值注入与构造注入同时存在时,先执行设值注入,再执行构造注入。
4.解释AOP(面向切面编程)
http://www.cnblogs.com/mcahkf/p/9065833.html
5.BeanFactory和ApplicationContext有什么区别?
- ApplicationContext是BeanFactory的子接口。
- BeanFactory是Spring中最底层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能。而ApplicationContext是Spring的一个更高级的容器,提供的额外的功能有:国际化的功能、消息发送、响应机制、统一加载资源的功能、强大的事件机制、对Web应用的支持等等。
- 加载方式的区别:BeanFactory采用的是延迟加载的形式来注入Bean;而ApplicationContext是在Ioc启动时就一次性创建所有的Bean,好处是可以马上发现Spring配置文件中的错误,坏处是造成浪费。
6.spring配置Bean的方式
- 基于XML的配置
- 基于注解的配置
- 基于Java的配置
6.Bean的作用域
- singleton:Spring IoC容器中只会存在一个共享的Bean实例。Singleton作用域是Spring中的缺省作用域
- prototype:每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态
- request:对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
- session:对不同的Session请求则会产生新的Bean,该bean实例仅在当前Session内有效。
- global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。
7.Spring Bean的生命周期
8.如何在Spring中注入一个Java Collection
Spring提供了以下四种集合类的配置元素:
- <list> : 该标签用来装配可重复的list值。
- <set> : 该标签用来装配没有重复的set值。
- <map>: 该标签可用来注入键和值可以为任何类型的键值对。
- <props> : 该标签支持注入键和值都是字符串类型的键值对。
8.Spring 事务传播属性以及隔离
事务传播属性:
- PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
- PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
- PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
- PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
- PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
事务隔离级别:
- DEFAULT:使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应
- READ_UNCOMMITTED:这是事务最低的隔离级别,充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
- READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
- REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
- SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。
· 代理模式:在AOP和remoting中被用的比较多。
· 单例模式:在spring配置文件中定义的bean默认为单例模式。
· 模板方法模式:用来解决代码重复的问题。
· 前端控制器模式:Spring提供了DispatcherServlet来对请求进行分发。
· 依赖注入模式:贯穿于BeanFactory / ApplicationContext接口的核心理念。
· 工厂模式:BeanFactory用来创建对象的实例。
以上是关于关于spring面试题的主要内容,如果未能解决你的问题,请参考以下文章