spring面试题大全1.doc

上传人:11****ws 文档编号:2993891 上传时间:2019-05-16 格式:DOC 页数:24 大小:224KB
下载 相关 举报
spring面试题大全1.doc_第1页
第1页 / 共24页
spring面试题大全1.doc_第2页
第2页 / 共24页
spring面试题大全1.doc_第3页
第3页 / 共24页
spring面试题大全1.doc_第4页
第4页 / 共24页
spring面试题大全1.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、* Spring 的优点有什么?1. Spring 是分层的架构,你可以选择使用你需要的层而不用管不需要的部分2. Spring 是 POJO 编程,POJO 编程使得可持续构建和可测试能力提高3. 依赖注入和 IoC 使得 JDBC 操作简单化4. Spring 是开源的免费的5. Spring 使得对象管理集中化合简单化* 描述一下 spring 中实现 DI(dependency injection)的几种方式方式一:接口注入,在实际中得到了普遍应用,即使在 IOC 的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。方式二:Type2 IoC: Setter injection

2、对象创建之后,将被依赖对象通过 set 方法设置进去方式三:Type3 IoC: Constructor injection 对象创建时,被依赖对象以构造方法参数的方式注入Spring 的方式* 简单描述下 IOC(inversion of control)的理解一个类需要用到某个接口的方法,我们需要将类 A 和接口 B 的实现关联起来,最简单的方法是类 A 中创建一个对于接口 B 的实现 C 的实例,但这种方法显然两者的依赖(Dependency)太大了。而 IoC 的方法是只在类 A 中定义好用于关联接口 B 的实现的方法,将类 A,接口 B 和接口 B 的实现 C 放入 IoC 的 容器

3、(Container)中,通过一定的配置由容器(Container)来实现类 A 与接口 B 的实现 C 的关联。* Spring 对很多 ORM 框架提供了很好支持,描述下在 spring 使用 hibernate 的方法在 context 中定义 DataSource,创建 SessionFactoy,设置参数;DAO 类继承HibernateDaoSupport,实现具体接口,从中获得 HibernateTemplate 进行具体操作。在使用中如果遇到 OpenSessionInView 的问题,可以添加 OpenSessionInViewFilter 或OpenSessionInVie

4、wInterceptor* 请介绍下 spring 的事务管理spring 提供了几个关于事务处理的类:TransactionDefinition /事务属性定义TranscationStatus /代表了当前的事务,可以提交,回滚。PlatformTransactionManager 这个是 spring 提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如 DataSourceTransactionManager 等都是这个类的子类。一般事务定义步骤:TransactionDefinition t

5、d = new TransactionDefinition();TransactionStatus ts = transactionManager.getTransaction(td);try /do sthtransactionMmit(ts);catch(Exception e)transactionManager.rollback(ts);spring 提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。编程式主要使用 transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入

6、事务管理对象.void add()transactionTemplate.execute( new TransactionCallback()pulic Object doInTransaction(TransactionStatus ts) /do sth声明式:使用 TransactionProxyFactoryBean:PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly 围绕 Poxy 的动态代理 能够自动的提交和回滚事务org.springframework.transaction.interc

7、eptor.TransactionProxyFactoryBeanPROPAGATION_REQUIRED支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER以非事

8、务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED 类似的操作。* 如何在 spring 的 applicationContext.xml 使用 JNDI 而不是 DataSource可以使用”org.springframework.jndi.JndiObjectFactoryBean”来实现。示例如下:java:comp/env/jdbc/appfuse* 在 spring 中是如何配置数据库驱动的org.springframework.jdbc.dataso

9、urce.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:org.hsqldb.jdbcDriverjdbc:hsqldb:db/appfusesa* spring 中的 applicationContext.xml 能不能改为其他名字ContextLoaderListener 是一个 ServletContextListener, 它在你的 web 应用启动的时候初始化。缺省情况下, 它会在 WEB-INF/applicationContext.xml 文件找 Spring 的配置。 你可以通过定义一个元素名字为”contextConfigLocation”

10、来改变 Spring 配置文件的位置。示例如下:org.springframework.web.context.ContextLoaderListenercontextConfigLocation/WEB-INF/xyz.xml* 在 web 中如何配置 spring在 J2EE 的 web 应用里面配置 spring 非常简单,最简单的只需要把 spring 得 ContextLoaderListener 添加到你的 web.xml 文件里面就可以了,示例如下:org.springframework.web.context.ContextLoaderListener* 在 spring 中如

11、何定义 hibernate Mapping?添加 hibernate mapping 文件到 web/WEB-INF 目录下的 applicationContext.xml 文件里面。示例如下:org/appfuse/model/User.hbm.xml* 两种依赖注入的类型是什么?两种依赖注入的类型分别是 setter 注入和构造方法注入。setter 注入: 一般情况下所有的 java bean, 我们都会使用 setter 方法和 getter 方法去设置和获取属性的值,示例如下:public class namebean String name; public void setName

12、(String a) name = a; public String getName() return name; 我们会创建一个 bean 的实例然后设置属性的值,spring 的配置文件如下:tomSpring 会调用 setName 方法来只是 name 熟悉为 tom构造方法注入:构造方法注入中,我们使用带参数的构造方法如下:public class namebean String name;public namebean(String a) name = a; 我们会在创建 bean 实例的时候以 new namebean(”tom”)的方式来设置 name 属性, Spring 配

13、置文件如下:My Bean Value使用 constructor-arg 标签来设置构造方法的参数。* 解释一下 Dependency Injection(DI)和 IOC(inversion of control)?参考答案:依赖注入 DI 是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个 IOC 的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖应用控制反转,对象

14、在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转* Spring 中 BeanFactory 和 ApplicationContext 的作用和区别作用:1. BeanFactory 负责读取 bean 配置文档,管理 bean 的加载,实例化,维护 bean 之间的依赖关系,负责bean 的声明周期。2. ApplicationContext 除了提供上述 BeanFactory 所能提供的功能之外,还提供了更完整的框架功能:a. 国际化支持b. 资源

15、访问:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”c. 事件传递:通过实现 ApplicationContextAware 接口3. 常用的获取 ApplicationContext 的方法:FileSystemXmlApplicationContext:从文件系统或者 url 指定的 xml 配置文件创建,参数为配置文件名或文件名数组ClassPathXmlApplicationContext:从 classpath 的 xml 配置文件创建,可以从 jar

16、 包中读取配置文件WebApplicationContextUtils:从 web 应用的根目录读取配置文件,需要先在 web.xml 中配置,可以配置监听器或者 servlet 来实现org.springframework.web.context.ContextLoaderListenercontextorg.springframework.web.context.ContextLoaderServlet1这两种方式都默认配置文件为 web-inf/applicationContext.xml,也可使用 context-param 指定配置文件contextConfigLocation/WE

17、B-INF/myApplicationContext.xml* 在 web 环境下如何配置 applicationContext.xml 文件org.springframework.web.context.ContextLoaderListener或:contextorg.springframework.web.context.ContextLoaderServlet1通过如下方法取出 applicationContext 实例:ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getS

18、ervletContext);* 如何配置 spring + struts?在 struts-config.xml 加入一个插件,通过它加载 applicationContext.xml在 struts-config.xml 修改 action-mapping 标记,具体 action 交给了 DelegateActionProxy通过 DelegateActionProxy 进入一 spring 的环境。在 spring 的 applicationContext.xml 加入* Spring 和 hibernate 的配置文件中的主要类型有哪些?如何配置?在 myeclipse 中先加入 s

19、pring 环境再加入 hibernate 环境。如果 spring 与 hibernate 结合在一起可以不需要 hibernate.cfg.xml 文件是否正确?spring+hibernate 的配置文件中的主要类有那些?如何配置?dataSourcesessionFactory:hibernate.cfg.xmltransactionManageruserDao (extends HibernateDaoSupport) sessionFactoryfacadeproxysessionFactorytransactionManagerfacade* 在 spring 中如何配置容器的事

20、物管理,相关的类有哪些?DatasoucetransactionManageruserDao 要注入DatasouceProxy 代理Target:userDao:代理对象(目标对象)transactionAttributes(那些方法需要事务处理)transactionManager(事务处理服务)* 在 spring 中如何配代码的事务管理器DatasoucetransactionManageruserDao 要注入DatasoucetransactionManager通过如下类实现TransactionTemplateJdbcTemplate* Spring 中有几种事物管理,分别是什么

21、?代码管理的事务处理TransactonTemplate 的 execute 方法中的内部类 TransactionCallback 中的 doInTransaction 方法中使用。public void make() TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager();jtm.execute(new myClass1();public class myClass1 implements TransactionCallbackpublic Object doInTransaction(Tra

22、nsactionStatus trans)JdbcTemplate jdbc=new JdbcTemplate(dataSource);jdbc.execute(”insert into customer(customerName) values(b)”);jdbc.execute(”insert into customer(customerName) values(b)”);return null; 容器管理的事务处理* spring 中的 jdbc 与传统的 jdbc 有什么区别?Spring 的 jdbc:节省代码,不管连接(Connection),不管事务、不管异常、不管关闭(con.

23、close() ps.close )JdbcTemplate(dataSource):增、删、改、查TransactionTemplate(transactionManager):进行事务处理* Spring 配置的主要标签有什么?有什么作用?* 如何在 spring 中实现国际化?在 applicationContext.xml 加载一个 beanmessage在 src 目录下建多个 properties 文件对于非英文的要用 native2ascii -encoding gb2312 源 目转化文件相关内容其命名格式是 message_语言_国家。页面中的中显示提示信息,键名取键值。当给

24、定国家,系统会自动加载对应的国家的 properties 信息。通过 applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。* 在 spring 中如何实现事件处理事件Extends ApplicationEvent监听器Implements ApplicationListener事件源Implements ApplicationContextAware在 applicationContext.xml 中配置事件源、监听器先得到事件源,调用事件源的方法,通知监听器。* 如何将 spring 加入 web 容器中在 web.xml 中加入如下同容

25、,在启动 web 服务器时加载/WEB-INF/applicationContext.xml 中的内容。contextorg.springframework.web.context.ContextLoaderServlet1通过如下类得到 ApplicationContext 实例WebApplicationContextUtils.getWebApplicationContext* Spring 如何实现资源管理?使用applicationContext.getResource(“classpath:文件名”):在 src 根目录下,在类路径下applicationContext.getRe

26、source(“classpath:/chap01/文件名”): 以 src 根目录下的基准往下走。applicationContext.getResource(“file:c:/a.properties”):在系统文件目录下。* Spring 的 ApplicationContext 的作用?beanFactory国际化(getMesage)资源管理:可以直接读取一个文件的内容(getResource)加入 web 框架中(加入一个 servlet 或监听器)事件处理* spring 的核心是什么,各有什么作用?BeanFactory:产生一个新的实例,可以实现单例模式BeanWrapper

27、:提供统一的 get 及 set 方法ApplicationContext:提供框架的实现,包括 BeanFactory 的所有功能* Spring 中 aop 的关键名词有哪些?各有什么作用 ?拦截器: 代理装备(advice)目标对象关切点:条件连接点:方法、属性* Spring 与 struts 的区别?strusts:是一种基于 MVC 模式的一个 web 层的处理。Spring:提供了通用的服务,ioc/di aop,关心的不仅仅 web 层,应当 j2ee 整体的一个服务,可以很容易融合不同的技术 struts hibernate ibatis ejb remote springJ

28、DBC springMVC* spring 与 struts 的面试题1.strutsAction 是不是线程安全的?如果不是,有什么方式可以保证 Action 的线程安全?如果是,说明原因2.MVC,分析一下 struts 是如何实现 MVC 的3.struts 中的几个关键对象的作用(说说几个关键对象的作用)4.spring说说 AOP 和 IOC 的概念以及在 spring 中是如何应用的5.Hibernate 有哪几种查询数据的方式6.load()和 get()的区别回答:1.Struts1 Action 是单例模式并且必须是线程安全的,因为仅有 Action 的一个实例来处理所有的请

29、求。单例策略限制了 Struts1 Action 能作的事,并且要在开发时特别小心。Action 资源必须是线程安全的或同步的。Struts2 Action 对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet 容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)2.struts 是用一组类,servlet 和 jsp 规范实现 mvc 的3.ActionFrom ActionServlet Action struts-config.xml4.spring 的核心就是 IOC,通过指定对象的创建办法,描述对象与服务之间的关系,而不生成对象5.3 种,hql 条件查询() 原生 sql6.load()方法认为该数据一定存在,可以放心的使用代理来延时加载 ,如果使用过程中发现了问题,就抛出异常;get()方法一定要获取到真实的数据,否则返回 null* Spring, hibernate ,struts 面试题Hibernate 工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建 SessionFactory3. 打开 Sesssion4. 创建事务 Transation5. 持久化操作

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。