三大框架面试题_第1页
三大框架面试题_第2页
三大框架面试题_第3页
三大框架面试题_第4页
三大框架面试题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、I.Spring中Bean的生命周期1 .容器启动,实例化所有实现了BeanFactoyPostProcessor接口的类。他会在任何普通Bean实例化之前加载.2 .实例化剩下的Bean,对这些Bean进行依赖注入。3 .如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用4 .如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用5 .如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用6 .如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessBefor

2、eInitialization方法7 .如果Bean有实现InitializingBean接口那么对这些Bean进行调用8 .如果Bean配置有init属性,那么调用它属性中设置的方法9 .如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessAfterInitialization方10.Bean正常使用11.调用DisposableBean接口的destory方法12.调用Bean定义的destory方法如果从大体上区分值分只为四个阶段1.BeanFactoyPostProcessor实例化2.Bean实例化,然后通过某些BeanFactoyPostP

3、rocessor来进行依赖注入3.BeanPostProcessor的调用.Spring内置的BeanPostProcessor负责调用Bean实现的接口:BeanNameAware,BeanFactoryAware,ApplicationContextAware等等,等这些内置的BeanPostProcessor调用完后才会调用自己配置的BeanPostProcessor4.Bean销毁阶段2.你对spring的理解是什么?1)开源框架2)IoC(控制反转),将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合3)AOP将安全,事务等于程序逻辑相对独立的功能抽取出来,利用spri

4、ng的配置文件将这些功能插进去,实现了按照方面编程,提高了复用性或者答概念Spring是一个轻型容器(light-weightcontainer),其核心是Bean工厂(BeanFactory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-OrientedProgramming,面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;WebMVC和SpringWeb提供了JavaWeb应用的框架或

5、与其他流行的Web框架进行集成。3.Spring框架有哪几部分组成?Spring核心容器(Core):提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,她是工厂模式的实现。BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。SpringAOP:通过配置管理特性,SpringAOP模块直接面向方面的编程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何对象支持AOPSpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用SpringAOP,不用依赖于EJB组件,就可

6、以将声明性事务管理集成到应用程序中。SpringORM:Spring框架集成了若干ORM框架,从而提供了ORM的对象关系工具淇中包括JD。Hibernate、iBatis和TopLink。所有这些都遵从Spring的通用事务和DAO异常层结构。SpringDAQJDBCDA。由象层提供了有意义的异常层次的结构,可用该结构来管理异常处理和不同数据供应商抛出的异常错误信息。异常层次结构简化了错误处理,并且大大的降低了需要编写的异常代码数量(例如,打开和关系连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层结构。SpringWEB:Web上下文模块建立在上下文模块(Context)

7、的基础之上,为基于Web服务的应用程序提供了上下文的服务。所以Spring框架支持JakartaStruts的集成。Web模块还简化了处理多部分请求及将请求参数绑定到域对象的工作。Spring上下文(Context):Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJR电子邮件、国际化校验和调度功能。SpringMVC:Spring的MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳的大量视图技术,包才JSRVelocity、Tiles、iText和Pol4.Stru

8、ts2基本工作过程1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMeshPlugin);3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;4、如果ActionMapper决定需要调用某个Action,StrutsPrepareAnd

9、ExecuteFilter把请求的处理交给ActionProxy;5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;6、ActionProxy创建一个ActionInvocation的实例。7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP

10、或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。5.IOC的优点是什么?ioc或依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的俄汉式初始化和懒加载。6 .什么是Springbeans?Springbeans是那些形成Spring应用的主干的java对象。它们被SpringIOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中bean/的形式定义。Spring

11、框架定义的beans都是单件beans。在beantag中有个属性"singleton,如果它被赋为TRUE,bean就是单件,否则就是一个prototypebean。默认是TRUE所以所有在Spring框架中的beans缺省都是单件。7,什么是Spring的MVC匡架Spring配备构建Web应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。7 .spring提供了几个关于事务处理的类TransactionDefinition/事务属性

12、定义TranscationStatus代表了当前的事务,可以提交,回滚。PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。9.谈谈ValueStack.ValueStack贯穿整个Action的生命周期,保存在request域中,所以ValueStack和request的生命周期一样,当Struts2接受一个请求时,会迅速创建ActionContext,V

13、alueStack,Action.然后把Action存放进ValueStack,所以Action的实例变量可以被OGNL访问。请求来的时候,Action>ValueStack的生命开始;请求结束,Action>ValueStack的生命结束,值栈是多实仞的,因为Action是多例的(和Servlet不一样,Servelt是单例的),而每个Action都有一个对应的值栈,Action对象默认保存在栈顶;.ValueStack本质上就是一个ArrayList(查看源代码得到);,使用OGNL访问值栈的内容时,不需要#号,而访问request>session>applicat

14、ion>attr时,需要加#号;.Struts2重写了request的getAttribute方法,所以可以使用EL直接访问值栈中的内容10 .拦截器的生命周期与工作过程每个拦截器都是需要实现Interceptor接口> init():在拦截器被创建后立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相关资源进行必要的初始化;> intercept(ActionInvocationinvocation):每拦截一个动作请求,该方法就会被调用一次;> destroy:该方法将在拦截器被销毁之前被调用,它在拦截器的生命周期内也只被调用一次;11 .拦截器必须是

15、无状态的这是因为struts2对每一个Action的请求使用的是同一个拦截器实例来拦截调用,如果拦截器有状态,在多个线程(客户端的每个请求将由服务器端的一个线程来服务)同时访问一个拦截器实例的情况下,拦截器的状态将不可预测。12 .自定义拦截器的实现方法实现Interceptor接口承Abstractinterceptor类继承MethodFilterinterceptor类13 .Spring容器容器可以管理对象的生命周期,对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称,如何产生(Prototype方式或Singleton方式),那个对象产生之后必须

16、设定成为某个对象的属性等,在启动容器后,所有的对象都可以直接取用,不用编写任何一行代码来产生对象,或是建立对象与对象之间的依赖关系。14 .为何使用IoC有效地组织中间层对象有效的消除单例、工厂等模式的使用将面向接口编程做到实处使单元测试变得简单消除了依赖环境的查找和特定服务器的代码代码变得清晰,易于维护和扩展代码依赖于接口,易于复用便于看清组件之间的依赖关系便于团队分模块开发15 .Bean是什么具有唯一id的SimpleObject由IoC容器管理其生命周期及其依赖关系简单地讲,bean就是由Spring容器初始化、装配及被管理的对象bean定义以及bean相互之间的依赖关系将通过配置元数

17、据来描述一般在XML文件中定义一16 .ApplicationContext与BeanFactory的区别基本的BeanFactory总是延迟加载Bean,直到第一次调用getBean("Beanid")方法请求Bean实例时,BeanFactory才会创建这个Bean,而Applicationcontext在自身初始化时就一次性创建了所有的Bean,了解这一点是非常重要的,因为Applicationcontext在初始化时就能验证XML配置文件的正确性.而使用BeanFactory,直到调用getBean("Beanid")方法获取Bean实例时,才可

18、能会发现配置错误而导致抛出异常17 .获取Applicationcontext资源ClassPathResource:通过ClassPathResource以类路径的方式进行访问;FileSystemResource:通过FileSystemResource以文件系统绝对路径的方式进行访问;ServletContextResource:通过ServletContextResource以相对于Web应用根目录的方式进行访问;UrlResource通过.URL来访问资源,当然它也支持File格式,如“巾le:18 .依赖注入的三种方式设置属性注入set注入指的就是在接受注入的类中定义一个set方法

19、,并在参数中定义需要注入的元素。构造注入构造注入指的就是在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。接口注入接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入。由于接口注入的繁琐与侵入性过高,Spring没有提供对接口注入的实现。19 .Bean的实例化1、用构造器来实例化当采用构造器来创建bean实例时,Spring对class并没有特殊的要求,我们通常使用的class都适用。也就是说,被创建的类并不需要实现任何特定的接口,或以特定的方式编码,只要指定bean的class属性即可。不过根据所采用的IoC类型,class可能需要一个默认的空构造器。此外,IoC容器

20、不仅限于管理JavaBean,它可以管理任意的类。不过大多数使用Spring的人喜欢使用实际的JavaBean具有默认的(无参)构造器及setter和getter方法),但在容器中使用非bean形式(non-beanstyle)的类也是可以的。比如遗留系统中的连接池,很显然它与JavaBean规范不符,但Spring也能管理它。当使用基于XML的元数据配置文件,可以这样来指定bean类:<beanid="exampleBean"class="examples.ExampleBean"/><beanname="anotherEx

21、ample"class="examples.ExampleBeanTwo"/>2、使用静态工厂方法实例化当采用静态工厂方法创建bean时,除了需要指定class属性外,还需要通过factory-method属性来指定创建bean实例的工厂方法。Spring将调用此方法(其可选参数接下来介绍)返回实例对象,就此而言,跟通过普通构造器创建类实例没什么两样。下面的bean定义展示了如何通过工厂方法来创建bean实例。注意,此定义并未指定返回对象的类型,仅指定该类包含的工厂方法。在此例中,createInstance()必须是一个static方法。<beani

22、d="exampleBean"class="examples.ExampleBean2"factory-method="createInstance"/>3、使用实例工厂方法实例化与使用静态工厂方法实例化类似,用来进行实例化的实例工厂方法位于另外一个已有的bean中,容器将调用该bean的工厂方法来创建一个新的bean实例为使用此机制,class属性必须为空,而factory-bean属性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必须通过factory-method属性来设定(参

23、看以下的例子)。<!-thefactorybean,whichcontainsamethodcalledcreateInstance()-><beanid="myFactoryBean"class=".">.</bean><!-thebeantobecreatedviathefactorybean-><beanid="exampleBean"factory-bean="myFactoryBean"factory-method="createInstan

24、ce"/>虽然设置bean属性的机制仍然在这里被提及,但隐式的做法是由工厂bean自己来管理以及通过依赖注入(DI)来进行配置。20 .Prototype作用域:prototype作用域的Bean会导致在每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的Bean实例。根据经验,对有状态的Bean应该使用prototype作用域,而对无状态的Bean则应该使用singleton作用域。21 .为何使用AOP高度模块化,使得我们的系统更易实现和更易维护使每个模块承担的责任更清晰,提高代码的可追踪性解决设计时两难的局

25、面,在不需改动原先代码的情况下推迟不必要的需求的实现提高代码的重用性加速系统的开发和部署,提高程序员的开发效率降低系统开发的成本22 .通知的配置ProxyFactoryBean这个类会被BeanFactory或是ApplicationContext用来建立代理对象1、proxyInterfaces属性:设定代理时可运行的接口,2、target属性:设定Target对象,3、interceptorNames属性:设定Advice实例,可能多个<beanid="helloProxy"class="org.springframework.aop.framewor

26、k.ProxyFactoryBean"><propertyname="proxyInterfaces"><value>neu.danny.IHello</value></property><propertyname="target"><refbean="helloSpeaker"/></property><propertyname="interceptorNames"><list><va

27、lue>logBeforeAdvice3</value></list></property></bean>23 .通知的正则表达式Spring提供的org.springframework.aop.support.RegexpMethodPointcutAdvisor可以让你使用Perl风格的Regularexpression来定义Pointcuts,它是Spring中静态Pointcut的实例,在符合Regularexpression的情况下应用Advices,您可以使用以下的几个符号:符号描述:,符合任何单一字元+符合前一个字元一次或多次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论