当前位置:文档之家› 三大框架面试题

三大框架面试题

1.Spring中Bean的生命周期1.容器启动,实例化所有实现了BeanFactoyPostProcessor接口的类。

他会在任何普通Bean 实例化之前加载.2.实例化剩下的Bean,对这些Bean进行依赖注入。

3.如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用4.如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用5.如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用6.如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessBeforeInitialization 方法7.如果Bean有实现InitializingBean接口那么对这些Bean进行调用8.如果Bean配置有init属性,那么调用它属性中设置的方法9.如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessAfterInitialization方法10.Bean正常使用11.调用DisposableBean接口的destory方法12.调用Bean定义的destory方法如果从大体上区分值分只为四个阶段1.BeanFactoyPostProcessor实例化2.Bean实例化,然后通过某些BeanFactoyPostProcessor来进行依赖注入3.BeanPostProcessor的调用.Spring内置的BeanPostProcessor负责调用Bean实现的接口: BeanNameAware, BeanFactoryAware, ApplicationContextAware等等,等这些内置的BeanPostProcessor调用完后才会调用自己配置的BeanPostProcessor4.Bean销毁阶段2.你对spring的理解是什么?1)开源框架2)IoC(控制反转),将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合3)AOP 将安全,事务等于程序逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,实现了按照方面编程,提高了复用性或者答概念Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。

在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM 的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。

3.Spring框架有哪几部分组成?Spring 核心容器(Core):提供Spring框架的基本功能。

核心容器的主要组件是BeanFactory,她是工厂模式的实现。

BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。

Spring AOP:通过配置管理特性,Spring AOP模块直接面向方面的编程功能集成到了Spring 框架中,所以可以很容易的使Spring框架管理的任何对象支持AOP。

Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。

通过使用Spring AOP,不用依赖于EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring ORM:Spring框架集成了若干ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate、iBatis和TopLink。

所有这些都遵从Spring的通用事务和DAO异常层结构。

Spring DAO:JDBC DAO抽象层提供了有意义的异常层次的结构,可用该结构来管理异常处理和不同数据供应商抛出的异常错误信息。

异常层次结构简化了错误处理,并且大大的降低了需要编写的异常代码数量(例如,打开和关系连接)。

Spring DAO的面向JDBC的异常遵从通用的DAO异常层结构。

Spring WEB:Web上下文模块建立在上下文模块(Context)的基础之上,为基于Web服务的应用程序提供了上下文的服务。

所以Spring框架支持Jakarta Struts的集成。

Web模块还简化了处理多部分请求及将请求参数绑定到域对象的工作。

Spring上下文(Context):Spring上下文是一个配置文件,向Spring框架提供上下文信息。

Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化校验和调度功能。

Spring MVC:Spring的MVC框架是一个全功能的构建Web应用程序的MVC实现。

通过策略接口,MVC框架变成为高度可配置的,MVC容纳的大量视图技术,包括JSP、Velocity、Tiles、iText和Pol4.Struts2基本工作过程1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp 的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;4、如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2框架中继承的标签。

在这个过程中需要涉及到ActionMapper。

5.IOC的优点是什么?IOC 或依赖注入把应用的代码量降到最低。

它使应用容易测试,单元测试不再需要单例和JNDI查找机制。

最小的代价和最小的侵入性使松散耦合得以实现。

IOC容器支持加载服务时的饿汉式初始化和懒加载。

6.什么是Spring beans?Spring beans是那些形成Spring应用的主干的java对象。

它们被Spring IOC容器初始化,装配,和管理。

这些beans通过容器中配置的元数据创建。

比如,以XML文件中<bean/>的形式定义。

Spring框架定义的beans都是单件beans。

在bean tag中有个属性”singleton”,如果它被赋为TRUE,bean就是单件,否则就是一个prototype bean。

默认是TRUE,所以所有在Spring框架中的beans缺省都是单件。

7.什么是Spring的MVC框架Spring 配备构建Web 应用的全功能MVC框架。

Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。

它也允许以声明的方式把请求参数和业务对象绑定。

8.spring提供了几个关于事务处理的类TransactionDefinition //事务属性定义TranscationStatus //代表了当前的事务,可以提交,回滚。

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

9.谈谈 ValueStack①. ValueStack 贯穿整个Action 的生命周期,保存在request 域中,所以ValueStack 和request 的生命周期一样. 当Struts2 接受一个请求时,会迅速创建ActionContext,ValueStack,Action. 然后把Action 存放进ValueStack,所以Action 的实例变量可以被OGNL 访问。

请求来的时候,Action、ValueStack 的生命开始;请求结束,Action、ValueStack 的生命结束②. 值栈是多实例的,因为Action 是多例的(和Servlet 不一样,Servelt 是单例的),而每个Action 都有一个对应的值栈,Action 对象默认保存在栈顶;③. ValueStack 本质上就是一个ArrayList(查看源代码得到);④. 使用OGNL 访问值栈的内容时,不需要#号,而访问request、session、application、attr 时,需要加#号;⑤. Struts2 重写了request 的getAttribute 方法,所以可以使用EL 直接访问值栈中的内容10.拦截器的生命周期与工作过程每个拦截器都是需要实现Interceptor 接口> init():在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化;> intercept(ActionInvocation invocation):每拦截一个动作请求,该方法就会被调用一次;> destroy:该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次;11.拦截器必须是无状态的这是因为struts2对每一个Action的请求使用的是同一个拦截器实例来拦截调用,如果拦截器有状态,在多个线程(客户端的每个请求将由服务器端的一个线程来服务)同时访问一个拦截器实例的情况下,拦截器的状态将不可预测。

12.自定义拦截器的实现方法实现Interceptor接口继承AbstractInterceptor类继承MethodFilterInterceptor类13.Spring容器容器可以管理对象的生命周期,对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称,如何产生(Prototype方式或Singleton方式),那个对象产生之后必须设定成为某个对象的属性等,在启动容器后,所有的对象都可以直接取用,不用编写任何一行代码来产生对象,或是建立对象与对象之间的依赖关系。

相关主题