现在位置:首页> 面试 > 面试试题 > java面试题spring框架

java面试题spring框架

时间:2020-03-31 07:01 面试试题

  Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Old Java Object)对象提供企业级的服务。下面是spring框架面试时的常见问题:

  1.什么是Spring?

  Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。

  2.Spring有哪些优点?

  · 轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。

  · 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。

  · 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。

  · 容器:Spring包含并管理应用程序对象的配置及生命周期。

  · MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。

  · 事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。

  · 异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常。

  3.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成为一个容器。

  5.BeanFactory – BeanFactory 实例

  BeanFactory是工厂模式的一种实现,它使用控制反转将应用的配置和依赖与实际的应用代码分离开来。

  最常用的BeanFactory实现是XmlBeanFactory类。

  6.XmlBeanFactory

  最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory,它根据XML文件中定义的内容加载beans。该容器从XML文件中读取配置元数据,并用它来创建一个完备的系统或应用。

  7.解释AOP模块

  AOP模块用来开发Spring应用程序中具有切面性质的部分。该模块的大部分服务由AOP Aliance提供,这就保证了Spring框架和其他AOP框架之间的互操作性。另外,该模块将元数据编程引入到了Spring。

  8.解释抽象JDBC和DAO模块

  通过使用抽象JDBC和DAO模块保证了与数据库连接代码的整洁与简单,同时避免了由于未能关闭数据库资源引起的问题。它在多种数据库服务器的错误信息之上提供了一个很重要的异常层。它还利用Spring的AOP模块为Spring应用程序中的对象提供事务管理服务。

  9.解释对象/关系映射集成模块

  Spring通过提供ORM模块在JDBC的基础上支持对象关系映射工具。这样的支持使得Spring可以集成主流的ORM框架,包括Hibernate, JDO, 及iBATIS SQL Maps。Spring的事务管理可以同时支持以上某种框架和JDBC。

  10.解释web模块

  Spring的web模块建立在应用上下文(application context)模块之上,提供了一个适合基于web应用程序的上下文环境。该模块还支持了几个面向web的任务,如透明的处理多文件上传请求及将请求参数同业务对象绑定起来。

  11.解释Spring MVC模块

  Spring提供MVC框架构建web应用程序。Spring可以很轻松的同其他MVC框架结合,但Spring的MVC是个更好的选择,因为它通过控制反转将控制逻辑和业务对象完全分离开来。

  12.Spring的配置文件

  Spring的配置文件是一个XML文件,文件包含了类信息并描述了这些类是如何配置和互相调用的。

  13.Spring IoC容器是什么?

  Spring IOC负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理这些对象的生命周期。

  14.IOC有什么优点?

  IOC或依赖注入减少了应用程序的代码量。它使得应用程序的测试很简单,因为在单元测试中不再需要单例或JNDI查找机制。简单的实现以及较少的干扰机制使得松耦合得以实现。IOC容器支持勤性单例及延迟加载服务。

  15.应用上下文是如何实现的?

  FileSystemXmlApplicationContext 容器加载XML文件中beans的定义。XML Bean配置文件的完整路径必须传递给构造器。

  FileSystemXmlApplicationContext 容器也加载XML文件中beans的定义。注意,你需要正确的设置CLASSPATH,因为该容器会在CLASSPATH中查看bean的XML配置文件。

  WebXmlApplicationContext:该容器加载xml文件,这些文件定义了web应用中所有的beans。

  16.Bean Factory和ApplicationContext有什么区别?

  ApplicationContext提供了一种解决文档信息的方法,一种加载文件资源的方式(如图片),他们可以向监听他们的beans发送消息。另外,容器或者容器中beans的操作,这些必须以bean工厂的编程方式处理的操作可以在应用上下文中以声明的方式处理。应用上下文实现了MessageSource,该接口用于获取本地消息,实际的实现是可选的。

  17.Spring应用程序看起来像什么?

  · 一个定义功能的接口

  · 实现包括属性,setter和getter方法,功能等

  · Spring AOP

  · Spring的XML配置文件

  · 使用该功能的客户端编程

  依赖注入

  18.Spring中的依赖注入是什么?

  依赖注入作为控制反转(IOC)的一个层面,可以有多种解释方式。在这个概念中,你不用创建对象而只需要描述如何创建它们。你不必通过代码直接的将组件和服务连接在一起,而是通过配置文件说明哪些组件需要什么服务。之后IOC容器负责衔接。

  19.有哪些不同类型的IOC(依赖注入)?

  · 构造器依赖注入:构造器依赖注入在容器触发构造器的时候完成,该构造器有一系列的参数,每个参数代表注入的对象。

  · Setter方法依赖注入:首先容器会触发一个无参构造函数或无参静态工厂方法实例化对象,之后容器调用bean中的setter方法完成Setter方法依赖注入。

  20.你推荐哪种依赖注入?构造器依赖注入还是Setter方法依赖注入?

  你可以同时使用两种方式的依赖注入,最好的选择是使用构造器参数实现强制依赖注入,使用setter方法实现可选的依赖关系。

  Spring Beans

  21.什么是Spring Beans?

  Spring Beans是构成Spring应用核心的Java对象。这些对象由Spring IOC容器实例化、组装、管理。这些对象通过容器中配置的元数据创建,例如,使用XML文件中定义的创建。

  在Spring中创建的beans都是单例的beans。在bean标签中有一个属性为”singleton”,如果设为true,该bean是单例的,如果设为false,该bean是原型bean。Singleton属性默认设置为true。因此,spring框架中所有的bean都默认为单例bean。

  22.Spring Bean中定义了什么内容?

  Spring Bean中定义了所有的配置元数据,这些配置信息告知容器如何创建它,它的生命周期是什么以及它的依赖关系。

  23.如何向Spring 容器提供配置元数据?

  有三种方式向Spring 容器提供元数据:

  · XML配置文件

  · 基于注解配置

  · 基于Java的配置

  24.你如何定义bean的作用域?

  在Spring中创建一个bean的时候,我们可以声明它的作用域。只需要在bean定义的时候通过’scope’属性定义即可。例如,当Spring需要产生每次一个新的bean实例时,应该声明bean的scope属性为prototype。如果每次你希望Spring返回一个实例,应该声明bean的scope属性为singleton。

  25.说一下Spring中支持的bean作用域

  Spring框架支持如下五种不同的作用域:

  · singleton:在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在。

  · prototype:一个bean可以定义多个实例。

  · request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。

  · session:一个HTTP Session定义一个Bean。该作用域仅适用于WebApplicationContext环境.

  · globalSession:同一个全局HTTP Session定义一个Bean。该作用域同样仅适用于WebApplicationContext环境.

  bean默认的scope属性是’singleton‘。

  26.Spring框架中单例beans是线程安全的吗?

  不是,Spring框架中的单例beans不是线程安全的。

  27.解释Spring框架中bean的生命周期

  · Spring容器读取XML文件中bean的定义并实例化bean。

  · Spring根据bean的定义设置属性值。

  · 如果该Bean实现了BeanNameAware接口,Spring将bean的id传递给setBeanName()方法。

  · 如果该Bean实现了BeanFactoryAware接口,Spring将beanfactory传递给setBeanFactory()方法。

  · 如果任何bean BeanPostProcessors 和该bean相关,Spring调用postProcessBeforeInitialization()方法。

  · 如果该Bean实现了InitializingBean接口,调用Bean中的afterPropertiesSet方法。如果bean有初始化函数声明,调用相应的初始化方法。

  · 如果任何bean BeanPostProcessors 和该bean相关,调用postProcessAfterInitialization()方法。

  · 如果该bean实现了DisposableBean,调用destroy()方法。

  28.哪些是最重要的bean生命周期方法?能重写它们吗?

  有两个重要的bean生命周期方法。第一个是setup方法,该方法在容器加载bean的时候被调用。第二个是teardown方法,该方法在bean从容器中移除的时候调用。

  bean标签有两个重要的属性(init-method 和 destroy-method),你可以通过这两个属性定义自己的初始化方法和析构方法。Spring也有相应的注解:@PostConstruct 和 @PreDestroy。

  29.什么是Spring的内部bean?

  当一个bean被用作另一个bean的属性时,这个bean可以被声明为内部bean。在基于XML的配置元数据中,可以通过把元素定义在 或元素内部实现定义内部bean。内部bean总是匿名的并且它们的scope总是prototype。

  30.如何在Spring中注入Java集合类?

  Spring提供如下几种类型的集合配置元素:

  · list元素用来注入一系列的值,允许有相同的值。

  · set元素用来注入一些列的值,不允许有相同的值。

  · map用来注入一组”键-值”对,键、值可以是任何类型的。

  · props也可以用来注入一组”键-值”对,这里的键、值都字符串类型