Struts2、Hibernate、Spring框架工作原理介绍



Struts2工作原理

struts2工作原理图

客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
这个请求经过一系列的过滤器( Filter (这些过滤器中有一个叫做 ActionContextCleanUp 的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
接着 FilterDispatche r 被调用,FilterDispatcher询问 ActionMapper 来决定这个请是否需要调用某个Action 
如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给 ActionProxy 
5 ActionProxy通过 Configuration Manager 询问框架的配置文件,找到需要调用的Action类 
6 ActionProxy创建一个 ActionInvocation 的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用 Action 的过程前后,涉及到相关拦截器( Intercepter )的调用。 
一旦Action执行完毕,ActionInvocation负责根据 struts.xml 中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 

在上述过程中所有的对象( Action Results Interceptors ,等)都是通过 ObjectFactory 来创建的
Struts2 优缺点(即为什么要用 struts2
Struts2 就会自动的进行验证。还有很多,比如国际化资源文件等。 
Struts2 的开发中来,如果你重来没有用过任何框架,你也可以通过快速的学习,加入到 Struts2 的应用开发中来,因为它足够的简单。 
大量的拦截器:
Struts2 本身提供了大量的可重用的拦截器,比如类型转换拦截器,很多时候我们从页面取得参数,这个时候它是 String 类型的,我们需要手动。
基于插件的框架:
Struts2 是一个基于插件的框架,社区中提供了很多实用的插件,比如 jfreechat/json 等等,使用这些插件可以简化我们的开发,加快开发进度。
struts2 最大的缺点莫过于在好多 web 服务器上支持不好,例如在 websphere5.5,weblogic8.1 及以前版本支持非常查,需要用最新的。
多种视图的支持:
多种视图的支持: jsp freemarker Veloctiy ,只要你愿意,你甚至可以通过轻松的改造让它支持 pdf ,同一个项目中你可以支持多种视图。
更加的模块化:
Struts1.X  相比, Struts2 更加的模块化,可以轻松将配置信息按功能界限拆分成多个文件,便于管理和团队协作开发。
Spring的集成:
Struts1.x 相比, Struts2 不必再自己编写 singleton ,进一步的降低了程序间的耦合性,就 Struts2 内部本身而言,降低了框架本身的偶合性。
基于pojo易于测试:
Struts1.x 中我需要 Mock 出这两个 Http 对象,使我们很难编写 Action 的单元测试,与 Struts1.x 相比, Struts2 Action  不再依赖于 HttpServletRequest HttpServletResponse 对象,使我们能够更方便的针对 Action 编写单元测试。

 


Hibernate工作原理

1.  读取并解析配置文件
2.  读取并解析映射信息,创建 SessionFactory
3.  打开 Sesssion
4.  创建事务 Transation
5.  持久化操作
6.  提交事务
7.  关闭 Session
8.  关闭 SesstionFactory

Hibernate 优缺点
优点: 
1: hibernate是基于ORMapping技术的开源的框架,对JDBC进行了轻量级的封装,使用面向对象的思维来操纵数据库。 
2hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。 
3:低侵入式设计 

缺点: 
1hibernate学习成本太高。 
2:不适合有复杂的sql查询(统计) 。 
3:不适合大量的聚集操作,(存储过程)
优缺点补充:
1 、  不需要编写的SQL语句( 不需要编辑 JDBC) ,只需要操作相应的对象就可以了,就可以能够存储、更新、删除、加载对象,可以提高生产效; 
2 、因为使用 Hibernate 只需要操作对象就可以了,所以我们的开发更对象化了; 
3 使用Hibernate,移植性好( 只要使用 Hibernate 标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的操作 ) ; 
4 Hibernate 实现了透明持久化当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,只是个纯粹的单纯对象称为POJO对象( 最纯粹的对象 这个对象没有继承第三方框架的任何类和实现它的任何接口
5 Hibernate是一个没有侵入性的框架,没有侵入性的框架我们一般称为轻量级框架 
6 Hibernate 代码测试方便。


Spring工作原理

内部最核心的就是 IOC 了, 
动态注入,让一个对象的创建不用 new 了,可以自动的生产,这其实就是利用 java 里的反射 
反射其实就是在运行时动态的去创建、调用对象, Spring 就是在运行时,跟 xml Spring 的配置 
文件来动态的创建对象,和调用对象里的方法的 。 
  Spring 还有一个核心就是 AOP 这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 
在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 
配置类达到的。 
  Spring 目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 
管理的( Spring 根据这些配置 内部通过反射去动态的组装对象) 
  要记住: Spring 是一个容器,凡是在容器里的对象才会有 Spring 所提供的这些服务和功能。 
Spring 里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式) 
  Spring 里的配置是很多的,很难都记住,但是 Spring 里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了 Spring.

Spring AOP IOC
一、  IoC(Inversion of control):  控制反转 
1 IoC : 
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 
核心: bean 工厂;在 Spring 中, bean 工厂创建的各个实例称作 bean 
二、 AOP(Aspect-Oriented Programming):  面向方面编程 
1 、 代理的两种方式: 
静态代理: 
针对每个具体类分别编写代理类; 
针对一个接口编写一个代理类; 
动态代理: 
针对一个方面编写一个 InvocationHandler ,然后借用 JDK 反射包中的 Proxy 类为各种接口动态生成相应的代理类
Spring 优缺点

它是一个开源的项目,而且目前非常活跃;它基于 IoC Inversion of Control ,反向控制)和 AOP 的构架多层 j2ee 系统的框架,但它不强迫你必须在每一层 中必须使用 Spring ,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的 MVC ,对不同的数据访问技术提供了统一的 接口,采用 IoC 使得可以很容易的实现 bean 的装配,提供了简洁的 AOP 并据此实现 Transcation Managment ,等等
优点 
a. Spring 能有效地组织你的中间层对象,不管你是否选择使用了 EJB 。如果你仅仅使用了 Struts 或其他为 J2EE 的  API 特制的 framework Spring 致力于解决剩下的问题。 
b. Spring 能消除在许多工程中常见的对 Singleton 的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。 
c.  通过一种在不同应用程序和项目间一致的方法来处理配置文件, Spring 能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读 Javadoc 甚至源编码?有了 Spring ,你仅仅需要看看类的 JavaBean 属性。 Inversion of Control 的使用(在下面讨论)帮助完成了这种简化。 
d.  通过把对接口编程而不是对类编程的代价几乎减少到没有, Spring 能够促进养成好的编程习惯。 
e. Spring 被设计为让使用它创建的应用尽可能少的依赖于他的 APIs 。在 Spring 应用中的大多数业务对象没有依赖于 Spring 。 
f.  使用 Spring 构建的应用程序易于单元测试。 
g. Spring 能使 EJB 的使用成为一个实现选择 , 而不是应用架构的必然选择。你能选择用 POJOs local EJBs 来实现业务接口,却不会影响调用代码。 
h. Spring 帮助你解决许多问题而无需使用 EJB Spring 能提供一种 EJB 的替换物,它们适用于许多 web 应用。例如, Spring 能使用 AOP 提供声明性事务管理而不通过 EJB 容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个 JTA 实现。 
i. Spring 为数据存取提供了一个一致的框架 , 不论是使用的是 JDBC 还是 O/R mapping 产品(如 Hibernate )。 
Spring 确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。

缺点: jsp 中要写很多代码、控制器过于灵活,缺少一个公用控制器
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值