您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > spring面试题大全
*Spring的优点有什么?1.Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分2.Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高3.依赖注入和IoC使得JDBC操作简单化4.Spring是开源的免费的5.Spring使得对象管理集中化合简单化*描述一下spring中实现DI(dependencyinjection)的几种方式方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。方式二:Type2IoC:Setterinjection对象创建之后,将被依赖对象通过set方法设置进去方式三:Type3IoC:Constructorinjection对象创建时,被依赖对象以构造方法参数的方式注入Spring的方式*简单描述下IOC(inversionofcontrol)的理解一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。*Spring对很多ORM框架提供了很好支持,描述下在spring使用hibernate的方法在context中定义DataSource,创建SessionFactoy,设置参数;DAO类继承HibernateDaoSupport,实现具体接口,从中获得HibernateTemplate进行具体操作。在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor*请介绍下spring的事务管理spring提供了几个关于事务处理的类:TransactionDefinition//事务属性定义TranscationStatus//代表了当前的事务,可以提交,回滚。PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。一般事务定义步骤:TransactionDefinitiontd=newTransactionDefinition();TransactionStatusts=transactionManager.getTransaction(td);try{//dosthtransactionManager.commit(ts);}catch(Exceptione){transactionManager.rollback(ts);}spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.voidadd(){transactionTemplate.execute(newTransactionCallback(){pulicObjectdoInTransaction(TransactionStatusts){//dosth}}}声明式:使用TransactionProxyFactoryBean:PROPAGATION_REQUIREDPROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly围绕Poxy的动态代理能够自动的提交和回滚事务org.springframework.transaction.interceptor.TransactionProxyFactoryBeanPROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。*如何在spring的applicationContext.xml使用JNDI而不是DataSource可以使用”org.springframework.jndi.JndiObjectFactoryBean”来实现。示例如下:beanid=”dataSource”propertyname=”jndiName”valuejava:comp/env/jdbc/appfuse/value/property/bean*在spring中是如何配置数据库驱动的org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:beanid=”dataSource”propertyname=”driverClassName”valueorg.hsqldb.jdbcDriver/value/propertypropertyname=”url”valuejdbc:hsqldb:db/appfuse/value/propertypropertyname=”username”valuesa/value/propertypropertyname=”password”value/value/property/bean*spring中的applicationContext.xml能不能改为其他名字ContextLoaderListener是一个ServletContextListener,它在你的web应用启动的时候初始化。缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置。你可以通过定义一个context-param元素名字为”contextConfigLocation”来改变Spring配置文件的位置。示例如下:listenerlistener-classorg.springframework.web.context.ContextLoaderListenercontext-paramparam-namecontextConfigLocation/param-nameparam-value/WEB-INF/xyz.xml/param-value/context-param/listener-class/listener*在web中如何配置spring在J2EE的web应用里面配置spring非常简单,最简单的只需要把spring得ContextLoaderListener添加到你的web.xml文件里面就可以了,示例如下:listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener*在spring中如何定义hibernateMapping?添加hibernatemapping文件到web/WEB-INF目录下的applicationContext.xml文件里面。示例如下:propertyname=”mappingResources”listvalueorg/appfuse/model/User.hbm.xml/value/list/property*两种依赖注入的类型是什么?两种依赖注入的类型分别是setter注入和构造方法注入。setter注入:一般情况下所有的javabean,我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下:publicclassnamebean{Stringname;publicvoidsetName(Stringa){name=a;}publicStringgetName(){returnname;}}我们会创建一个bean的实例然后设置属性的值,spring的配置文件如下:beanid=”bean1″propertyname=”name”valuetom/value/property/beanSpring会调用setName方法来只是name熟悉为tom构造方法注入:构造方法注入中,我们使用带参数的构造方法如下:publicclassnamebean{Stringname;publicnamebean(Stringa){name=a;}}我们会在创建bean实例的时候以newnamebean(”tom”)的方式来设置name属性,Spring配置文件如下:beanid=”bean1″constructor-argvalueMyBeanValue/value/constructor-arg/bean使用constructor-arg标签来设置构造方法的参数。*解释一下DependencyInjection(DI)和IOC(inversionofcontrol)?参考答案:依赖注入DI是一个程序设计模式和架构模型,一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转*Spring中BeanFactory和ApplicationContext的作用和区别作用:1.BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。2.ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:a.国际化支持b.资源访问:Resourcers=ctx.getResource(”classpath:config.properties”),“file:c:/config.properties”c.事件传递:通过实现ApplicationContextAware接口3.常用的获取ApplicationContext的方法:FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件WebApplicationContext
本文标题:spring面试题大全
链接地址:https://www.777doc.com/doc-2850324 .html