现在的位置: 首页 > 综合 > 正文

java web面试——Struts2、Hibernate、Spring 三大框架的认识

2014年09月05日 ⁄ 综合 ⁄ 共 2054字 ⁄ 字号 评论关闭

1、谈谈你对hibernate的理解

     hibernate 是一个持久层框架,又是一个ORM框架,通俗的来讲就是 一个对象关系映射框架。使应用程序的持久化类到数据库中的表之间的关系的映射;hibernate其实就是是对jdbc的封装,减轻了程序员使用jdbc操作数据库的繁琐工作。让程序员操作数据库关心的不再是数据库中的表而是我们的持久化对象javabean,比如:进行保存操作的时候仅仅使用一个save() 的方法,删除一条记录的时候仅仅调用delete()方法就能方便的完成对数据库中的数据的增加、删除操作。

       使用Hibernate 的基本的流程是 配置Configuration对象,产生SessionFactory 创建session对象,开启事务 完成增加 删除  修改 查询 的操作  提交事务 关闭 session

在使用hibernate的时候 要先配置hibernate.cfg.xml 文件 其中配置数据库连接信息和方言【不过这些固定的可以配置在hibernate.properties 属性配置文件中,在应用程序启动的时候,会先加载 src目录下的hibernate.properties 再加载 src目录下的hibernate.cfg.xml 再加载 对应的持久化配置映射文件*.hbm.xml  等加载完成后 开始创建sessionFactory  

2、对spring 的理解

      说起spring spring实现了工厂模式的工厂类--beanFactory这是一个轻量级框架,其中在spring中包含有三个重要的技术IOC DI AOP

IOC 控制反转  这个IOC是一种编程思想,也是一种架构的艺术,利用这个技术可以很好的实现模块与模块之间的解耦,耦合性降低 。如使用了SpringIOC技术,对自己想使用的对象进行实例化的时候 ,不需要你自己进行new 操作了 ,而是交给       Spring容器帮你实例化对象。

     那什么是DI呢? 其实IOC也成为DI
DI
 是英文的缩写 依赖注入这这个名词更能说明IOC的设计理念。就是将服务注入到使用它的地方中,组件之间的依赖关系由容器在应用系统运行前来决定。【依赖注入的方式一般分为4个: 通过gettter setter方法进行注入,和通过构造函数进行注入 通过对象工厂进行注入 和通过静态工厂进行注入】。

AOP  是面向切面编程,这解决了在整个系统中很多毫不相干的模块或者具体的类添加相同的功能,比如输出日志信息,权限设置, 和事务管理等。实现AOP功能就是实现了代理功能,对目标类进行代理  ,动态的代理可以分为两种: jdk的动态代理和CGLIB的动态代理,它们之间的区别是, 使用jdk的动态代理 代理对象必须实现一个接口 ,而cglib 没有必要,对字节码也可以动态代理了。 很强大 不过我们一般在做应用程序的开发的时候面向接口的编程,减少类与类之间的耦合,所以我们用jdk的动态代理。

3说说对Struts2的理解:

     说起Struts2 这个框架,我不得不说 struts1 struts1是世界上第一个mvc框架,现在的MVC框架很多 最著名的是Struts
springmvc
  Struts2的体系结构和struts1差别巨大,它明确的说它不是一个新的MVCweb框架,它不是从struts1级过来的,它是基于webworkxwork ,是xwork2的升级版, Struts2吸取了struts1xwork2 两者的优点 Strus2是以webwork为核心。所以struts2更加优秀的,更加整洁的MVC 框架 ,采用拦截器的机制处理用户的请求 这样的设计能够与原生的servletAPI完全脱离,在struts2中有一个核心类它就是StrutsPreparedAndExecuteFilter  struts2准备执行过滤器  我们要想使用Struts2 对用户的请求处理 我们必须在web.xml中进行配置这个核心过滤器。 基本上是过滤所有请求的。

一般的Struts2框架的处理流程:

       1、加载类    StrutsPrepareAndExecuteFilter  会执行准备操作执行操作

               准备操作: 使用AcionMapper 进行读取对URL进行映射,

               执行操作: 会交给actionproxy  调用配置管理器,来读取struts.xml 等读取完毕 actionproxy 交给第三者  actionInvocation 来递归调用一组拦截器, 基本上就是我们使用的拦截器栈进行预处理操作

2、等预处理操作完毕之后,第三种进行调用我们的action result   在依次递归反向调用我们的那组拦截器进行后处理操作 最后发出response  给浏览器

抱歉!评论已关闭.