springMVC面试题

 

springMVC试题

 

一、spring工作原理:

1.spring mvc所有的求都提交DispatcherServlet,它会委托用系的其他模块负责负责对请行真正的理工作。 

2.DispatcherServlet查询一个或多个HandlerMapping,找到求的Controller.

3.DispatcherServlet请请求提交到目Controller

4.Controller业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView象指定的视图对 

6.视图对负责渲染返回端。 

 

 

 

二、为什么要用spring:

 

AOP 可以建非行性的关注点,称横切关注点,并将它插入到用程序代中。使用 AOP 后,公共服   (比 如日志、持久性、事等)就可以分解成方面并用到域象上,同不会增加域象的象模型的复性。 

 

IOC 许创建一个可以构造象的境,然后向传递象。正如单词 倒置 所表明的,IOC 就像反      来的 JNDI。没有使用一堆抽象工厂、服定位器、元素(singleton)和直接构造(straight construction),每一个象都是用     象构造的。因此是由容器管理象(collaborator)。 

 

Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依性(象)。然后可以很容易地在需要具有似接口的象。 

 

三、请你谈谈SSH整合: 

 

SSH:

Struts(表示+Spring业务层+Hibernate(持久 

Struts:

Struts是一个表示框架,主要作用是界面展示,接收求,分发请求。 

MVC框架中,Struts属于VC次,负责界面表负责MVC关系的分。(View:沿用JSPHTTPFormTagResourse ControllerActionServletstruts-config.xmlAction 

Hibernate:

Hibernate是一个持久框架,它只负责与关系数据的操作。 

Spring:

Spring是一个业务层框架,是一个整合的框架,能很好地黏合表示与持久 

 

四、介绍一下Spring的事务管理: 

 

就是一系列的数据操作(比如插入多条数据)一的提交或回操作,如果插入成功,那么一起成功,如果中有一条出异常,那么回之前的所有操作。 

这样可以防止出现脏数据,防止数据数据出现问题 

了避免种情况一般都会行事管理。Spring中也有自己的事管理机制,一般是使用TransactionMananger行管理,可以通Spring的注入来完成此功能。 

 

spring提供了几个关于事务处理的 

TransactionDefinition //属性定 

TranscationStatus //代表了当前的事,可以提交,回 

PlatformTransactionManager个是spring提供的用于管理事的基接口,其下有一个实现的抽象AbstractPlatformTransactionManager,使用的事管理例如DataSourceTransactionManager等都是的子 

 

一般事 

 

TransactionDefinition td = new TransactionDefinition();

TransactionStatus ts = transactionManager.getTransaction(td);

try

{ //do sth

transactionManager.commit(ts);

}

catch(Exception e){transactionManager.rollback(ts);}

 

spring提供的事管理可以分程式的和声明式的。程式的,比灵活,但是代量大,存在重复的代多;声明式的比程式的更灵活。 

 

程式主要使用transactionTemplate。省略了部分的提交,回,一系列的事务对象定,需注入事管理.

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.interceptor.TransactionProxyFactoryBean

 

PROPAGATION_REQUIRED–支持当前事,如果当前没有事,就新建一个事是最常选择 

 

PROPAGATION_SUPPORTS–支持当前事,如果当前没有事,就以非事方式行。 

 

PROPAGATION_MANDATORY–支持当前事,如果当前没有事,就抛出异常。 

 

PROPAGATION_REQUIRES_NEW–新建事,如果当前存在事,把当前事挂起。 

 

PROPAGATION_NOT_SUPPORTED–以非事方式行操作,如果当前存在事,就把当前事挂起。 

 

PROPAGATION_NEVER–以非事方式行,如果当前存在事抛出异常。 

 

PROPAGATION_NESTED–如果当前存在事在嵌套事行。如果当前没有事则进行与PROPAGATION_REQUIRED似的操作。 

 

五、Spring里面如何配置数据库驱动? 

 

使用”org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下: 

<bean id=”dataSource”>

    <property name=”driverClassName”>

        <value>org.hsqldb.jdbcDriver</value>

    </property>

    <property name=”url”>

        <value>jdbc:hsqldb:db/appfuse</value>

    </property>

    <property name=”username”><value>sa</value></property>

    <property name=”password”><value></value></property>

</bean>

 

六、Spring里面applicationContext.xml文件能不能改成其他文件名?

 

ContextLoaderListener是一个ServletContextListener, 它在你的web用启候初始化。缺省情况下, 它会在WEB-INF/applicationContext.xml文件找Spring的配置。 你可以通一个<context-param>元素名字”contextConfigLocation”来改Spring配置文件的位置。示例如下: 

 

<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/xyz.xml</param-value>

    </context-param>    </listener-class>

</listener>

 

七、如何在web应用里面配置spring?

 

web.xml中加入如下同容,在启web/WEB-INF/applicationContext.xml中的内容。 

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>

org.springframework.web.context.ContextLoaderServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

如下得到ApplicationContext 

    WebApplicationContextUtils.getWebApplicationContext

 

八、Spring里面如何定义hibernate mapping 

 

添加hibernate mapping 文件到web/WEB-INF下的applicationContext.xml文件里面。示例如下: 

<property name=”mappingResources”>

    <list>

        <value>org/appfuse/model/User.hbm.xml</value>

    </list>

</property>

 

九、解释一下Dependency injection(DI,依赖注入)IOC(Inversion of control,控制反转)?

 

注入DI是一个程序设计模式和架构模型, 一些候也称作控制反,尽管在技上来,依注入是一个IOC的特殊实现,依注入是指一个用另外一个象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式到一个象的构方法里面而不是在那个象内部自行建一个接。控制反和依注入的基本思想就是把的依内部化到外部以减少依 

用控制反象在被建的候,由一个控系内所有象的外界体,将其所依象的引用,传递给它。也可以,依被注入到象中。所以,控制反是,关于一个象如何取他所依象的引用,任的反 

 

十、spring中的BeanFactoryApplicationContext的作用有哪些? 

 

1. BeanFactory负责读bean配置文档,管理bean的加例化,维护bean的依关系,负责bean的声明周期。 

2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,提供了更完整的框架功能: 

 

a. 化支持 

b. 访问Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”

c. 事件传递:通过实现ApplicationContextAware接口 

3. 常用的ApplicationContext的方法: 

FileSystemXmlApplicationContext:从文件系或者url指定的xml配置文件建,参数配置文件名或文件名数 

ClassPathXmlApplicationContext:从classpathxml配置文件建,可以从jar包中取配置文件 

WebApplicationContextUtils:从web用的根目录读取配置文件,需要先在web.xml中配置,可以配置听器或者servlet实现 

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

两种方式都默配置文件web-inf/applicationContext.xml,也可使用context-param指定配置文件 

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/myApplicationContext.xml</param-value>

</context-param>

 

十一、如何在web环境中配置applicationContext.xml文件?

 

<listener>

   <listener-class>

    org.springframework.web.context.ContextLoaderListener

   </listener-class>

</listener>

或:

<servlet>

   <servlet-name>context</servlet-name>

    <servlet-class>

     org.springframework.web.context.ContextLoaderServlet

    </servlet-class>

   <load-on-startup>1</load-on-startup>

</servlet>

如下方法取出applicationContext:

ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);

 

十二、如何配置spring+struts?

 

struts-config.xml加入一个插件,通它加applicationContext.xml

? struts-config.xml修改action-mapping标记,具体actionDelegateActionProxy

? DelegateActionProxy入一spring境。 

? 在spring的applicationContext.xml加入<bean name=”/login” class=”" singleton=”false”/>

 

十三、spring+hibernate的配置文件中的主要类有那些?如何配置?

 

dataSource

   sessionFactory:hibernate.cfg.xml

   transactionManager

   userDao (extends HibernateDaoSupport)

   sessionFactory

   facade

   proxy

   sessionFactory

   transactionManager

   facade

 

myeclipse中先加入spring境再加入hibernate境。 

如果springhibernate合在一起可以不需要hibernate.cfg.xml文件是否正确 

 

十四、如何在spring中实现国际化?

 

applicationContext.xml一个bean

<bean id=”messageSource” class=”org.springframework.context.support.ResourceBundleMessageSource”>

   <property name=”basename”>

    <value>message</value>

   </property>

</bean>

? src下建多个properties文件 

? 于非英文的要用native2ascii -encoding gb2312  化文件相关内容 

? 其命名格式是message__国家。 

? 面中的中示提示信息,名取键值 

? 定国家,系会自载对应的国家的properties信息。 

? applictionContext.getMessage(“”,”参数”,”区域”)取出相关的信息。 

 

十五、spring中的核心类有那些,各有什么作用?

 

BeanFactory生一个新的例,可以实现单例模式 

BeanWrapper:提供一的getset方法 

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能 

 

十六、什么是aopaop的作用是什么?

 

面向切面程(AOP)提供另外一种角度来思考程序构,通过这种方式弥了面向程(OOP)的不足 

除了classes)以外,AOP提供了切面。切面关注点行模化,例如横切多个型和象的事管理 

Spring的一个关件就是AOP框架,可以自由选择是否使用AOP

提供声明式企,特了替代EJB声明式服。最重要的服是声明性事管理,个服建立在Spring的抽象事物管理之上 

户实现自定切面,用AOP来完善OOP的使用 

可以把Spring AOP看作是Spring的一种增 

 

十七、使用Spring有什么好处? 

 

◆Spring能有效地组织你的中间层对,你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIsframework,你会发现Spring关注了留下的问题,。 

 

◆Spring能消除在多工程上Singleton多使用。根据我的经验是一个主要的问题,它减少了系的可测试性和面向象特性。 

◆Spring能消除使用各种各格式的属性定制文件的需要,在整个用和工程中,可通一种 一致的方法来行配置。曾感到迷惑,一个特定找迷幻般的属性关字或系属性,此不得不Javadoc乃至源编码吗?有了Spring,你可 简单地看到JavaBean属性。倒置控制的使用(在下面讨论)帮助完成化。 

◆Spring能通接口而不是好的习惯,减少程代价到几乎零。 

◆Spring设计为让使用它建的用尽可能少的依于他的APIs。在Spring用中的大多数业务对象没有依Spring 

◆使用Spring构建的用程序易于测试 

◆Spring能使EJB的使用成一个实现选择,而不是用架构的必然选择。你能选择POJOslocal EJBs实现业务接口,却不会影响用代 

◆Spring帮助你解决问题而无需使用EJBSpring能提供一种EJB的替物,它适于web用。例如,Spring能使用AOP提供声明性事而不通使用EJB容器,如果你仅仅需要与个的数据打交道,甚至不需要JTA实现 

■Spring数据存取提供了一致的框架,是使用JDBCO/R mapping品(如Hibernate)。 

Spring使你能通简单可行的解决法解决你的问题些特性是有很大价的。 

总结起来,Spring有如下点: 

◆低侵入式设计,代码污染极低 

◆ 独立于各种用服器,可以真正实现Write Once,Run Anywhere的承 

◆SpringDI机制降低了业务对象替的复 

◆Spring并不完全依Spring,开者可自由Spring框架的部分或全部 

 

十八、什么是Spring, 它有什么特点? 

 

Spring是一个的控制反(IoC)和面向切面(AOP)的容器框架。 

 

——从大小与开两方面而言Spring都是量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里布。并 Spring所需的理开也是微不足道的。此外,Spring是非侵入式的:典型地,Spring用中的象不依Spring的特定 

 

◆控制反——Spring一种称作控制反IoC)的技了松耦 合。用了IoC,一个象依的其它象会通的方式传递进来,而不是象自己建或者找依赖对象。你可以认为IoCJNDI相反——不 象从容器中找依,而是容器在象初始化不等求就主将依赖传递给它。 

◆面向切面——Spring提供了面向切面程的丰富支持,允分离用的 业务逻辑与系统级(例如审计auditing)和事()管理)行内聚性的开象只实现们应该做的——完成业务逻辑——此而已。它 并不负责(甚至是意)其它的系统级关注点,例如日志或事支持。 

◆容器——Spring包含并管理象的配置和生命周期,在个意上它是 一种容器,你可以配置你的每个bean如何被——基于一个可配置原型(prototype),你的bean可以建一个独的例或者每次需要都生 成一个新的——以及它是如何相互关的。然而,Spring应该被混同于传统的重量EJB容器,它们经常是大与笨重的,以使用。 

◆框架——Spring可以将简单件配置、合成用。在Spring中,象被声明式地合,典型地是在一个XML文件里。Spring也提供了很多基功能(事管理、持久化框架集成等等),将逻辑的开了你。 

 

十九、请介绍一下Spring框架中Bean的生命周期 

 

一、Bean的定 

Spring通常通配置文件定Bean。如: 

 

<?xml version=”1.0″ encoding=”UTF-8″?>

<beans xmlns=”http://www.springframework.org/schema/beans”

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”>

<bean id=”HelloWorld” class=”com.pqf.beans.HelloWorld”>

<property name=”msg”>

<value>HelloWorld</value>

</property>

</bean>

</beans>

 

个配置文件就定了一个标识为 HelloWorld Bean。在一个配置文档中可以定多个Bean 

 

二、Bean的初始化

有两种方式初始化Bean 

1、在配置文档中通指定init-method 属性来完成 

Bean实现一个初始化Bean属性的方法,如init(),如: 

public class HelloWorld{

public String msg=null;

public Date date=null;

 

public void init() {

msg=”HelloWorld”;

date=new Date();

}

…… 

}

然后,在配置文件中init-mothod属性: 

<bean id=”HelloWorld” class=”com.pqf.beans.HelloWorld”init-mothod=”init” >

</bean>

 

2实现 org.springframwork.beans.factory.InitializingBean接口 

Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法: 

 

public class HelloWorld implement InitializingBean {

public String msg=null;

public Date date=null;

 

public void afterPropertiesSet() {

msg=”向全世界好!”;

date=new Date();

}

…… 

}

 

那么,当Bean的所有属性被SpringBeanFactory置完后,会自动调afterPropertiesSet()方法Bean行初始化,于是,配置文件就不用指定 init-method属性了。 

 

三、Bean 

有三种方式可以得到Bean用: 

1、使用BeanWrapper

HelloWorld hw=new HelloWorld();

BeanWrapper bw=new BeanWrapperImpl(hw);

bw.setPropertyvalue(”msg”,”HelloWorld”);

system.out.println(bw.getPropertyCalue(”msg”));

 

2、使用BeanFactory

InputStream is=new FileInputStream(”config.xml”);

XmlBeanFactory factory=new XmlBeanFactory(is);

HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);

system.out.println(hw.getMsg());

 

3、使用ApplicationConttext

ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);

HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);

System.out.println(hw.getMsg());

 

四、Bean销毁 

1、使用配置文件中的 destory-method 属性

与初始化属性 init-methods似,在Bean实现一个撤Bean的方法,然后在配置文件中通 destory-method指定,那么当bean销毁时Spring将自动调用指定的销毁方法。 

 

2实现 org.springframwork.bean.factory.DisposebleBean接口 

如果实现DisposebleBean接口,那么Spring将自动调bean中的Destory方法销毁,所以,Bean中必提供Destory方法。 

 

二十、AOP里面重要的几个名词概念解释: 

 

切面(Aspect): 一个关注点的模化,个关注点可能会横切多个象。事管理是J2EE用中一个关于横切关注点的很好的例子。 Spring AOP中,切面可以使用通用(基于模式的格) 或者在普通中以 @Aspect 注解(@AspectJ格)来实现 

 

接点(Joinpoint): 在程序程中某个特定的点,比如某方法用的候或者理异常的候。 Spring AOP中,一个接点  代表一个方法的行。 声明一个org.aspectj.lang.JoinPoint型的参数可以使通知(Advice)的主体部分接点信息。 

 

通知(Advice): 在切面的某个特定的接点(Joinpoint)上行的作。通知有各种型,其中包括“around”“before”“after”等通知。 通知的型将在后面部分讨论AOP框架,包括Spring,都是以截器做通知模型, 维护一个以接点中心的截器 

 

切入点(Pointcut): 匹配接点(Joinpoint)的断言。通知和一个切入点表达式关,并在个切入点的接点上运行(例如,当行某个特定名称的方法)。 切入点表达式如何和接点匹配是AOP的核心:Spring缺省使用AspectJ切入点法。 

 

引入(Introduction): (也被称内部型声明(inter-type declaration))。声明外的方法或者某个型的字段。 Spring引入新的接口(以及一个对应实现)到任何被代理的象。 例如,你可以使用一个引入来使bean实现 IsModified 接口,以便存机制。 

 

标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的象。也有人把它叫做 被通知(advised 象。 既然Spring AOP是通运行代理实现的,象永是一个 被代理(proxied 象。 

 

AOP代理(AOP Proxy): AOP框架象,用来实现切面契aspect contract)(包括通知方法行等功能)。 Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based格和@AspectJ注解格的切面声明,于使用格的用,代理的建是透明的。 

 

入(Weaving): 把切面(aspect接到其它的用程序型或者象上,并建一个被通知(advised)的象。 些可以在编译时(例如使用AspectJ编译器),载时和运行完成。 Spring和其他Java AOP框架一,在运行完成入。 

 

通知的型: 

 

前置通知(Before advice): 在某接点(join point)之前行的通知,但个通知不能阻止接点前的行(除非它抛出一个异常)。 

 

返回后通知(After returning advice): 在某接点(join point)正常完成后行的通知:例如,一个方法没有抛出任何异常,正常返回。 

 

抛出异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。 

 

后通知(After (finally) advice): 当某接点退出的行的通知(不是正常返回是异常退出)。 

 

环绕通知(Around Advice): 一个接点(join point)的通知,如方法用。是最大的一种通知型。 环绕通知可以在方法用前后完成自定的行。它也会选择是否继续执接点或直接返回它自己的返回或抛出异常来行。 

 

环绕通知是最常用的一种通知型。大部分基于截的AOP框架,例如NanningJBoss4,都只提供环绕通知。 

 

切入点(pointcut)和接点(join point)匹配的概念是AOP的关使得AOP不同于其它仅仅提供截功能的旧技 切入点使得定位通知(advice)可独立于OO次。 例如,一个提供声明式事管理的around通知可以被用到一横跨多个象中的方法上(例如服务层的所有业务操作)。

 

 

本文摘自网络,出处忘记补充了。文中如有错误的地方,还望见谅。

posted @ 2017-09-11 19:35  Angelye  阅读(50864)  评论(0编辑  收藏  举报