5大框架简单总结 运行原理

来源:互联网 发布:青云软件 编辑:程序博客网 时间:2024/06/15 06:46
现在最流行的框架:SSM(Spring + Springmvc + Mybatis)和 SSH(Spring + Struts2 + Hibernate)

Dao层(持久层)框架:Hibernate框架。Mybatis框架
    JPA是orm框架标准,主流的orm框架都实现了这个标准
Hibernate框架(全自动ORM框架):Hibernate是对JDBC进一步封装,
   工作原理:
(1)hibernate如何连接数据库?
              配置文件Hibernate.cfg.xml文件中定义了和数据库进行连接的信息,包括数据库方言.jdbc驱动.用户名.密码和URL等。
             Configuration 类借助dom4j的xml解析器进行xml的解析设置环境,然后使用这些环境属性来生成sessionfactory。这样
             sessionfactory生成的session 就能够成功获得数据库的连接。
         (2)hibernate如何进行数据库写操作?
              当保存一个pojo持久化对象时,触发Hibernate保存事件监听器进行处理。Hibernate通过映射文件获得对象对应的数据库
             表名以及属性对应的数据库列名,然后通过反射机制获得持久化对象的各个属性,最终组织向数据库插入新对象的SQL的
             insert语句。调用session.save()保存数据后这个对象会被标识为持久化状态放在session,当事物进行提交时才真正执行
             insert语句。
         (3)hibernate如何从数据中载入对象?
            当需要读取读取文件时,Hibernate先尝试从session缓存中读取,如果session缓存数据不存在或是脏数据并且配置了二级
            缓存,Hibernate尝试从二级缓存中检索数据;否则Hibernate会根据对象类型·主键等信息组织select语句到数据库中读取,
            再把select结果组织成对象返回。
         (4)hibernate如何进行数据库查询操作?
              Hibernate提供SQL  HQL  Criteria查询方式。HQL是其中运用最广泛的查询方式。用户使用session.createQuery()函数以
              一条HQL语句为参数创建Query查询对象后,Hibernate会使用Anltr库把HQL语句解析成jdbc可以识别的sql语句。如果设置了
              查询缓存,那么执行Query.list()时,Hibernate会先对查询缓存进行查询,如果查询缓存不存在,在使用select语句查询数
             据库。
Mybatis框架(半自动ORM框架):MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
MyBatis的主要成员 :
Configuration  MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
SqlSession    作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
Executor    MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
ParameterHandler  负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
ResultSetHandler   负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler   负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
MappedStatement  MappedStatement维护一条<select|update|delete|insert>节点的封装
SqlSource   负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql     表示动态生成的SQL语句以及相应的参数信息
Spring框架(横跨三层的框架:可以理解成容器框架):
1.IOC控制反转
概念:控制权由对象本身转向容器,由容器根据配置文件创建对象实例并实现各个对象的依赖关系。
核心:bean工厂
2.AOP面向切面编程
a.静态代理
根据每个具体类分别编写代理类
根据一个接口编写一个代理类
b.动态代理
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
总结 :
1.使用spring ,没有new对象,我们把创建对象的任务交给spring框架
2.spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),
  并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,使用注解 @Autowired自动映射即可。

WEB层(表现层)框架:Struts2 、 SpringMVC(个人认为逆天的框架)
Struts2框架:
一、工作原理:
一个请求在Struts2框架中的处理大概分为以下几个步骤 
    1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求
    2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,
       这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
    3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
       FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。
       下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter
    4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
    5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
    6、ActionProxy创建一个ActionInvocation的实例。
    7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
    8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
       返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。
       在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
    9、响应的返回是通过我们在 web.xml 中配置的过滤器
    10、如果 ActionContextCleanUp 是当前使用的,则 FilterDispatecher 将不会清理 sreadlocal ActionContext;
      如果 ActionContextCleanUp 不使用,则将会去清理 sreadlocals。


二 工作流程
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器


SpringMVC框架:Spring的MVC框架主要由:  DispatcherServlet(前端控制器)、
HandlerMapping 处理器映射器、
HandlerAdapter 处理器适配器、
ViewReslover 视图解析器、 View视图组成。
 SpringMVC运行原理 :
1、用户发送请求至前端控制器 DispatcherServlet
2、DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)
  一并返回给 DispatcherServlet。
4、DispatcherServlet 调用 HandlerAdapter 处理器适配器
5、HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller 执行完成返回 ModelAndView
7、HandlerAdapter 将 controller 执行结果 ModelAndView 返回给
DispatcherServlet
8、DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器
9、ViewReslover 解析后返回具体 View
10、DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet 响应用户