【面试】【Spring常见问题总结】【01】

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应用。

9、Spring常见命名空间:

10、Bean的作用域:

时间: 2024-07-30 20:28:05

【面试】【Spring常见问题总结】【01】的相关文章

Struts+Hibernate+Spring常见问题

http://wanglihu.iteye.com/blog/1897718 1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor缺少asm-3.3.jar2.java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor缺少asm-commons-3.3.jar3.java.lang.ClassNotFoundException: org.s

【面试】【Spring常见问题总结】【09】

81.SimpleJdbcTemplate SimpleJdbcTemplate类也是基于JdbcTemplate类,但利用Java5+的可变參数列表和自己主动装箱和拆箱从而获取更简洁的代码. SimpleJdbcTemplate主要提供两类方法:query及queryForXXX方法.update及batchUpdate方法. 82.集成Spring JDBC及最佳实践 大多数情况下Spring JDBC都是与IOC容器一起使用.通过配置方式使用Spring JDBC.   并且大部分时间都是

【面试】【Spring常见问题总结】【07】

61.Spring IoC容器的依赖有两层含义: Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean并管理Bean的生命周期,正是由于由容器来控制创建Bean并注入依赖,也就是控制权被反转了,这也正是IoC名字的由来,此处的有依赖是指Bean和容器之间的依赖关系. 容器注入Bean的依赖资源:容器负责注入Bean的依赖资源,依赖资源可以是Bean.外部文件.常量数据等,在Java中都反映为对象,并且由容器负责组装Bean之间的依赖关系,此处的依赖是指Bean之间的

【面试】【Spring常见问题总结】【08】

71.依赖检查 依赖检查:用于检查Bean定义的属性都注入数据了,不管是自动装配的还是配置方式注入的都能检查,如果没有注入数据将报错,从而提前发现注入错误,只检查具有setter方法的属性.Spring3+也不推荐配置方式依赖检查了,建议采用Java5+ @Required注解方式.在Spring2.5中配置方式的依赖检查有none.simple.object.all四种方式. 1.none:默认方式,表示不检查: 2.objects:检查除基本类型外的依赖对象,配置方式在bean中添加属性为:

【面试】【Spring常见问题总结】【04】

31.Spring切面可以应用5 种类型的通知 l Before--在方法调用之前调用通知. l After--在方法完成之后调用通知,无论方法执行是否成功. l After-returning-- 在生方法成功执行之后调用通知. l After-throwing--在方法抛出异常后调用通知. l Around--通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为. 32.织入的时机 l 编译期--切面在目标类编译时被织入. l 类加载期--切面在目标类加载到JVM时被织入

【面试】【Spring常见问题总结】【05】

41.声明式事务管理的事务属性有5种: 传播行为:传播行为定义了客户端与彼调用方法之间的事务边界. 隔离级别:隔离级别定义了一个事务可能受其他并发事务影响的程度. 只读:表明事务是否是只读的. 事务超时:指定事务运行的最长时间,超时就回滚. 回滚规则:定义了哪些异常会导致事务回滚而哪些不会. 42.脏读.不可重复读和幻读 脏读:一个事务读取了另一个事务改写但是未提交的数据时.如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的. 不可重复读:一个事物执行相同的查询两次或者两次以上,但是每次

【面试】【Spring常见问题总结】【06】

51.spring中的applicationContext.xml能不能改为其他名字 ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化.缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置. 你可以通过定义一个<context-param>元素名字为"contextConfigLocation"来改变Spring配置文件的位置.示例如下: &l

【面试】【Spring常见问题总结】【03】

21.自动检测Bean 为了配置自动检测,需要使用<context:component-scan>元素.默认情况下,<context:component-scan>使用构造型注所标注类.这些特殊的注解如下 @Component--通用构造型注解,标识该类为Spring组件 @Controller--标识将该类定义为SpringMVC controller @Respository--标识将该类定义为数据仓库 @Service--标识将该类定义为服务 22.过滤组件扫描 通过为<

【面试】【Spring常见问题总结】【02】

11.初始化和销毁Bean 为Bean定义初始化和销毁操作,只需要使用init-method 和destroy-method参数来配置<bean>元素.init-method属性指定了在初始化Bean时要使用的方法.类似地,destroy-method属性指定了Bean从容器移除之前要调用的方法. 12.Spring集合配置元素 13.装配Map集合 <map>中的<entry>元素由一个键和一个值组成,键和值可以是简单类型,也可以是其他Bean的引用.这些属性将帮助我