Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为
J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
Spring因此Spring在面试中常被问到,特此对Spring的一些问题做出总结,一起学习和参考。
1、Spring的主要特性是依赖在入( DI )和面向切面编程(AOP)。
2、什么是依赖注入
依赖注入(DependencyInjection)和控制反转(Inversionof Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
3、什么是面向切面编程
针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
4、为了降低Java开发的复杂性, Spring采取了以下4 种关键策略
基于POJO的轻量级和最小侵入性编程,
通过依赖注入和面向接口实现松耦合,
基于切面和惯例进行声明式编程,
通过切面和模板减少样板式代码。
5、依赖注入有哪些方式
接口注入(interface injection) 接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入。
Set注入(setterinjection)Set注入指的就是在接受注入的类中定义一个Set方法,并在参数中定义需要注入的元素。
构造注入(constructor injection)构造注入指的就是在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素
6、Spring应用上下文的有哪些?
ClassPathXmlApplicationContext——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当作类资源。
FileSystemXmlApplicationcontext该取文件系统统下XML配置文件并加载上下文定义。
XmlWebApplicationContext——读取Web应用下的XML 配置文件并装载上下文定义。
使用FileSystemXmlapplicationcontext和使用ClassPathXmlApplicationContext的区别在于:
FileSystemXmlapplicationcontext在指定的文件系统路径下查找文件,
ClassPathXmlApplicationContext 是在所有的类路径(包括JAR 文件)下查找文件。
7、Bean的生命周期
下面是Spring3的Bean生命周期。
1) Spring对Bean 进行实例化.
2) Spring 将值和Bean的引用注入进Bean对应的属性中。
3) 如果Bean 实现了BeanNameAware 接口, Spring 将bean 的ID 传递给setBeanName() 接口方法.
4) 如果Bean实现了BeanFactoryAware 接口, Spring 将调用setBeanFactory()接口方法,将BeanFactory容器实例传入.
5) 如果Bean 实现了ApplicationcontextAware 接口 Spring 将调用setApplicationContext() 接口方法,将应用上下文的引用传入。
6) 如果Bean实现了BeanPostProcessor 接口Spring 将调用它们的postProcessBeforeInitialization 接口方法。
7) 如果Bean 实现了InitializingBean 接口,Spring 将调用它们的afterPropertiesSet()接口方法. 类似地,如果Bean 使用init-method 声明了初始化方法,该方法也会被调用。
8) 如果Bean 实现了BeanPostProcessor 接口, Spring 将调用它们的postPoressAfterInitilization方法.
9) 此时此刻Bean 已经准备就绪.可以被应用程序使用了. 它们将一直驻留在应用上下文中.直到该应用上下文补销毁。
10) 如果Bean实现了DisposableBean 接口,Spring 将调用它的destroy()接口方法。同样,如果Bean 使用destroy-method 声明了销毁方法,方法也会被调用。
8、Spring3.0总体模块框架:
-- 核心Spring容器:Spring框架最核心部分,负责Spring应用中Bean的创建,配置和管理。所有模块都构建于核心容器之上。
-- Spring 的AOP模块:在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统开发切面的基础。AOP可以帮助应用对象解耦。
-- 数据访问与集成:Spring的JDBC和DAO模块封装了这些模板式代码,使我们的数据库代码变得简单明了,还可以避免因为释放数据库资源失败而引起的问题。该模块在几种数据库服务的错误信息之上构建了一个语义且丰富异常层
-- Web 和远程调用:Spring不但集成了多种流行的MVC 框架,它的Web 和远程调用模块也自带了一个强大的MVC 框架,有助于应用提升Web 层技术的松散耦合。该框架提供了两种形式面向传统Web 应用的基于Servlet的框架和面向使用Java Portlet API基于Portlet 的应用。除了面向用户的Web 应用, 该模块还提供了构建与其他应用交互的几种远程调用的选择。Spring远程调用服务集成了RMI.
Hession、 Burlap、JAX-WS,同时Spring还自带了一个远程调用框架HTTP invoker。
-- l测试:Spring提供了调试模块来测试Spring应用。