Spring核心面试题
1.什么是Spring
Spring是个Java企业级应用的开源开发框架 Spring主要用来开发Java应用 但是有些扩展是针对构建J2EE平台的web应用 Spring框架目标是简化Java企业级应用开发 并通过POJO为基础的编程模型促进良好的编程习惯 是一个一站式轻量级框架
2.使用Spring框架好处是什么
1.轻量:Spring是轻量的 基本的版本约2MB
2.控制反转:Spring通过控制反转实现了松散耦合 对象们给出它们的依赖 而不是创建或查找依赖的对象们
3.面向切面编程(AOP):Spring支持面向切面编程 并且把应用业务逻辑和系统服务分开
4.容器:Spring包含并管理应用中对象的生命周期和配置
5.MVC框架:Spring的WEB框架是个精心设计的框架 是WEB框架的一个很好的替代品
6.事务管理:Spring提供一个持续的事务管理接口 可以扩展到上至本地事务下至全局事物(JTA)
7.异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked异常
Spring由哪些模块构成
以下是Spring框架的基本模块:
Core module
Bean module
Context module
Expression Language module
JDBC module
ORM module
OXM module
Java Messaging Service(JMS) module
Transaction module
Web module
Web-Servlet module
Web-Struts module
Web-Portlet module
4.核心容器(应用上下文)模块
这是基本的Spring模块 提供Spring框架的基础功能 BeanFactory是任何以Spring为基础的应用的核心 Spring框架建立在此模块之上 它使Spring成为一个容器
BeanFactory-BeanFactory实现举例
Bean工厂是工厂模式的一个实现 提供了控制反转功能 用来把应用的配置和依赖从真正的应用代码中分离
最常用的BeanFactory实现是XmlBeanFactory类
XmlBeanFactory
最常用的就是org.springframeword.beans.factory.xml.XmlBeanFactory 它根据XML文件中的定义加载beans 该容器从XMl文件读取配置元数据并用它去创建一个完全配置的系统或应用
解释AOP模块
AOP模块用于发给我们的Spring应用做面向切面的开发 很多支持由AOP联盟提供 这样就确保了Spring和其他AOP框架的共通性 这个模块将元数据编程引入Spring
解释JDBC抽象和DAO模块
通过使用JDBC抽象和DAO模块 保证数据库代码的简洁 并能避免数据库资源错误关闭导致的问题 它在不同的数据库错误信息之上 提供了一个统一的异常访问层 它还利用Spring的AOP模块给Spring应用中的对象提供事物管理服务
解释对象/关系映射集成模块
Spring通过提供ORM模块 支持我们在直接JDBC之上使用一个对象/关系映射(ORM)工具 Spring支持集成主流的ORM框架 如Hibernate,JDO和IBATIS SQL Maps 。Spring的事务管理同样支持以上所有ORM框架及JDBC
解释WEB模块
Spring的WEB模块是构建在application.context模块基础之上 提供一个适合web应用的上下文 这个模块也包括支持多种面向web的任务如透明地处理多个文件上传请求和程序级请求参数的绑定到你的业务对象 它也有对Jakarta Struts的支持
Spring配置文件
Spring配置文件是个xml文件 这个文件包含了类信息 描述了如何配置它们 以及如何相互调用
什么是Spring IOC容器
Spring IOC负责创建对象 管理对象(通过依赖注入(DI) 装配对象 配置对象 并且管理这些对象的整个生命周期)
IOC的优点是什么
IOC或依赖注入把应用的代码量降到最低 它使应用容易测试 单元测试不再需要单例和JNDI查找机制 最小的代价和最小的侵入性使松散耦合得以实现 IOC容器支持加载服务时的饿汉式初始化和懒加载
ApplicationContext通常的实现是什么
FileSystemXmlApplicationContext:此容器从一个XML文件中加载beans的定义
XMLBean配置文件的全路径名必须提供给它的构造函数
ClassPathXmlApplicationContext:此容器也从一个xml文件中加载beans的定义 这里 你需要正确设置classpath因为这个容器将在classpath里找bean配置
WebXmlApplicationContext:此容器加载一个XMl文件 此文件定义了一个WEB应用的所有bean
Bean工厂和Application contexts有什么区别
Application contexts提供一种方法处理文本消息 一个通常的做法是加载文件资源(比如镜像) 它们可以向注册为监听器的bean发布事件 另外 在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作 可以在Application contexts中以声明的方式处理
Application contexts实现了MessageSource接口 该接口的实现以可插拔的方式提供获取本地化消息的方法
什么是Spring的依赖注入
依赖注入 是IOC的一个方面 是个通常的概念 他有多种解释 这概念是说你不用创建对象 而只需要描述它如何被创建 你不在代码里直接组装你的组件和服务 但是要在配置文件里描述哪些组件需要哪些服务 之后一个容器(IOC容器)负责把他们组装起来
有哪些不同类型的IOC(依赖注入)方式
构造器依赖注入:构造器依赖注入通过容器出发一个累的构造器来实现的 该类有一系列参数 每个参数代表一个对其他类的依赖
Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后 调用该bean的setter方法 即实现了基于setter的依赖注入
哪种依赖注入方式你建议使用 构造器注入 还是Setter方法注入
你两种依赖方式都可以使用 构造器注入和Setter方法注入 最好的解决方案是用构造器参数实现强制依赖 setter方法实现可选依赖