文档库 最新最全的文档下载
当前位置:文档库 › 三大框架面试题

三大框架面试题

三大框架面试题
三大框架面试题

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调用完后才会调用自己配置的BeanPostProcessor

4.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和Pol

4.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文件中 的形

式定义。

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方式),那个对象产生之后必须设定成为某个对象的属性等,在启动容器后,所有的对象都可以直接取用,不用编写任何一行代码来产生对象,或是建立对象与对象之间的依赖关系。

14.为何使用IoC

有效地组织中间层对象

有效的消除单例、工厂等模式的使用

将面向接口编程做到实处

使单元测试变得简单

消除了依赖环境的查找和特定服务器的代码

代码变得清晰,易于维护和扩展

代码依赖于接口,易于复用

便于看清组件之间的依赖关系

便于团队分模块开发

15.Bean是什么

具有唯一id的Simple Object

由IoC容器管理其生命周期及其依赖关系

简单地讲,bean就是由Spring容器初始化、装配及被管理的对象

bean定义以及bean相互之间的依赖关系将通过配置元数据来描述

一般在XML文件中定义

16.ApplicationContext与BeanFactory的区別

基本的BeanFactory总是延迟加载Bean,直到第一次调用getBean("BeanId")方法请求Bean实例时,BeanFactory才会创建这个Bean,而ApplicationContext在自身初始化时就一次性创建了所有的Bean,了解这一点是非常重要的,因为ApplicationContext在初始化时就能验证XML配置文件的正确性.而使用BeanFactory,直到调用getBean("BeanId")方法获取Bean实例时,才可能会发现配置错误而导致抛出异常.

17.获取ApplicationContext资源

ClassPathResource:

通过ClassPathResource 以类路径的方式进行访问;

FileSystemResource:

通过FileSystemResource 以文件系统绝对路径的方式进行访问;ServletContextResource:

通过ServletContextResource 以相对于Web应用根目录的方式进行访问;

UrlResource:

通过https://www.wendangku.net/doc/4d12903826.html,.URL来访问资源,当然它也支持File格式,如“file:”;

18.依赖注入的三种方式

设置属性注入

set注入指的就是在接受注入的类中定义一个set方法,并在参数中定义需要注入的元素。构造注入

构造注入指的就是在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。接口注入

接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入。

由于接口注入的繁琐与侵入性过高,Spring没有提供对接口注入的实现。

19.Bean的实例化

1、用构造器来实例化

当采用构造器来创建bean实例时,Spring对class并没有特殊的要求,我们通常使用的class都适用。也就是说,被创建的类并不需要实现任何特定的接口,或以特定的方式编码,只要指定bean的class属性即可。不过根据所采用的IoC类型,class可能需要一个默认的空构造器。

此外,IoC容器不仅限于管理JavaBean,它可以管理任意的类。不过大多数使用Spring 的人喜欢使用实际的JavaBean(具有默认的(无参)构造器及setter和getter方法),但在容器中使用非bean形式(non-bean style)的类也是可以的。比如遗留系统中的连接池,很显然它与JavaBean规范不符,但Spring也能管理它。

当使用基于XML的元数据配置文件,可以这样来指定bean类:

2、使用静态工厂方法实例化

当采用静态工厂方法创建bean时,除了需要指定class属性外,还需要通过factory-method属性来指定创建bean实例的工厂方法。Spring将调用此方法(其可选参数接下来介绍)返回实例对象,就此而言,跟通过普通构造器创建类实例没什么两样。

下面的bean定义展示了如何通过工厂方法来创建bean实例。注意,此定义并未指定返回对象的类型,仅指定该类包含的工厂方法。在此例中,createInstance()必须是一个static 方法。

3、使用实例工厂方法实例化

与使用静态工厂方法实例化类似,用来进行实例化的实例工厂方法位于另外一个已有的bean中,容器将调用该bean的工厂方法来创建一个新的bean实例为使用此机制,class属性必须为空,而factory-bean属性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必须通过factory-method属性来设定(参看以下的例子)。

...

虽然设置bean属性的机制仍然在这里被提及,但隐式的做法是由工厂bean自己来管理以及通过依赖注入(DI)来进行配置。

20.Prototype作用域:

prototype作用域的Bean会导致在每次对该Bean请求(将其注入到另一个Bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的Bean实例。根据经验,对有状态的Bean应该使用prototype作用域,而对无状态的Bean则应该使用singleton作用域。

21.为何使用AOP

高度模块化,使得我们的系统更易实现和更易维护

使每个模块承担的责任更清晰,提高代码的可追踪性

解决设计时两难的局面,在不需改动原先代码的情况下推迟不必要的需求的实现

提高代码的重用性

加速系统的开发和部署,提高程序员的开发效率

降低系统开发的成本

22.通知的配置

ProxyFactoryBean这个类会被BeanFactory或是ApplicationContext用来建立代理对象

1、proxyInterfaces属性:设定代理时可运行的接口,

2、target属性:设定Target对象,

3、interceptorNames属性:设定Advice实例,可能多个

neu.danny.IHello

logBeforeAdvice3

23.通知的正则表达式

Spring 提供的org.springframework.aop.support.RegexpMethodPointcutAdvisor

可以让你使用Perl 风格的Regular expression來定义Pointcuts,

它是Spring中静态Pointcut的实例,在符合Regular expression的情況下应用Advices,您可以使用以下的几个符号:

符号描述:

. 符合任何单一字元

+ 符合前一个字元一次或多次

* 符合前一个字元零次或多次

\ Escape 任何Regular expression 使用到的符号

RegexpMethodPointcutAdvisor的"pattern"属性让你指定所要符合的完整类别名称

(包括package名称)加方法名称,例如若要求符合neu.danny.IHello下的hello开始的方法名称,

则要如下撰写:

neu\.danny\.IHello\.hello.*

由于. 符号已经被Regular expression使用,所以如果表示式中要指定. 符号,

则要使用(Escape),也就是使用\. 的方式,如果只打算针对方法名称比对,

而不管package名称,则可以这么写:.*hello.*

24.切入点的类型

静态

NameMatchMethodPointcut

匹配方法名称

如果方法重载了, 则不能对其中特定的方法进行匹配,因为它仅对方法名进行匹配,不会考虑参数相关信息,而且也没有提供可以指定参数匹配信息的途径AbstractRegexpMethodPointcut

根据正则表达式计算切入点,要匹配完整的类名和方法名

对应的Advisor是RegexpMethodPointcutAdvisor,会根据当前JDK版本来决定使用JdkRegexpMethodPointcut ,还是Perl5RegexpMethodPointcut

动态

ControlFlowPointcut

25.为何使用Spring持久层

提供JDBC、Hibernate、iBATIS、JDO、OJB、Toplink等流行的持久层框架的DAO类的封装

将不同框架的异常转化为通用的异常处理

在DAO类不需要写任何异常相关的代码

强大的模板技术和回调方法

自动打开和释放资源

简化开发,极大的提高了开发效率

26.Spring事务

统一的事务编程模型

支持编程性事务和声明性事务

能够很好的支持JDBC、Hibernate、JDO等等事务

DataSourceTransactionManager

HibernateTransactionManager

JdoTransactionManager

JtaTransactionManager

相关文档