下一章 详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第1章 剖析IOC容器
序章前言
随着时间的推移,SSH已经不再满足项目的需要,至少无法满足笔者项目的需要。时代的过渡直接决定着技术的过渡。慢慢的从N年前的SSH(Struts+Spring+Hibernare)到今天的SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x),我相信大家同笔者一样感触蛮多...晚上睡觉的时候去好好回味下...
当然不是说Struts2.x或者是Hibernate不好,只是说很多时候客户需求决定项目技术的选向。不管你觉得好与不好,至少不是你说了算,而是客户说了算。对于国外的项目,老外总是喜欢尝试用一些新颖的技术,当然这也没有什么不好,毕竟SSJ相对来说也算不上什么新东西了,只是国内使用这套标准的公司并不是特别多而已。
由于本章内容仅仅只是序章,所以笔者在本章只会讲解一些涉及到后续章节的概念。那么我
们就先从Spring开始吧。不知大家是否发现,Spring已经逐渐从单纯的一种技术规范实现慢慢的蜕变为企业的一站式解决方案?是的,如今整个领域模型中几乎随处可见Spring的身影,Spring贯穿了效验层、控制层、业务层甚至是持久层...笔者接触Spring至今也有多年左右了,希望本文的一些观点不会成为某些高手所为的妙论...
其实你完全可以将Spring理解为一个载满各种高精尖武器的“航母平台”,其平台上面承载着各式各样,足以令你眼花缭乱但却实用的技术,其覆盖率之广。如果你想用mvc,Spring为你提供有支持RESTful风格的mvc Framework,或者允许与第三方mvc 产品进行无缝整合。如果你想使用Spring的核心业务,Spring最新的3.x版本将带给你全新的体验。如果你想对权限进行控制,Spring为你提供有Spring security。如果你不想手动管理你的持久层事物,Spring为你提供有各式各样的第三方ORM 产品的整合方案,甚至还为你提供有高效的Spring JDBC(Spring JDBC仅仅只是针对传统的JDBC做了轻量级封装,熟悉JDBC的开发人员上手应该是很快的,并不会觉得复杂与麻烦)。如果你是Android的开发人员,Spring照样为你提供有基于Mobile领
域的各种规范实现。当然Spring所带来的影响力同样也是巨大的,时至今日Spring更像是驱动技术市场脚步的一匹黑马,越来越多的厂商阵营,越来越多的规范性规划,都在向Spring靠拢。
听了这么多,你可能会觉得Spring就是一个威力超强的高效粘合剂,不论是Spring原生的还是第三方的,Spring都可以将其进行快速且无缝的整合,一切都显得是那么顺其自然,浑然天成。Spring的最新版本为3.x,在以往版本的基础之上,Spring大幅度的简化了开发人员的编码量,更清晰的定位了配置文件的作用以及更多的Annotations支持,使得开发Spring应用将会成为一件很美妙的事情。
注意:
在很多年前,几乎所有的开发人员都希望将可配置型代码写进配置文件中,因为这样除了可以很好的解决代码耦合的问题,同样也可以解决系统每次更改属性都要反复部署的问题。但随着时间的推移,咱们的配置文件几乎越来越庞大,文件中的内容越来越冗长,为了很好解决配置文件的瘦身问题,越来越多的开源项目又开始将配置文件中的内容移至代码中,Spring其实就是其中一个。虽然这种做法在理论上看来无非是重量级的操作,但绝非是高侵入式的,因为很多开源项目并不是直接将第三方代码侵入进咱们的业务逻辑中,而只是以Annotation的方式进行嵌入。这种侵入级别而言对于开发人员来说并不是不能接受的,并且也是某些开源项目的目标,就像.net平台一样,始终都允许只用微软的东西,说不定某些开源项目拥有技术垄断的商业嫌疑(开个玩笑)。
接下来我们简要的聊一聊JPA。JPA全称为Java Persistence API(Java持久化规范:作为JSR-220实现的一部分),它本身是内嵌至EJB3.x 中的一种规范,从理论上来说它也是属于J2EE规范的一种。但请你记住,JPA并不是产品,也不是技术,它仅仅只是一套优秀的ORM整合规范。笔者经常在论坛中听到很多开发人员喜欢拿JPA去和Hibernate或者Ibatis等成熟的ORM 产品进行比较,其实这完全是牛头不对马嘴,这根本就不是一回事。请记住了,规范并不是实现(规范仅是概念)。
JPA的出现有效的整合了ORM领域的统一,现在市面山越来越多的ORM厂商在向JPA规范靠拢,比如Hibernate JPA,Ibatis JPA等等。刚刚笔者也提到过了,JPA的最大优势是标准化
,但同样也包含另外4点优势:
1、对容器级特性的支持:JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
2、简单易用,集成方便:JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。
3、高效的查询能力:JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
4、丰富的高级特性:JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。
笔者绝对有理由相信在未来的几年内,JPA规范将逐渐成为主导持久化领域的中间力量,这是不可改变也不可逃避的现实。如果时至今日,你连JPA都没听过,那就麻烦你耐心的关注笔者后续的章节,笔者将会对Spring及JPA之间的技术整合点进行全方位的讲解和分析。当然如果你本身就精通于JPA及Spring,笔者也希望你对笔者的博文提出拟宝贵的意见。
—JohnGao