- -

目前,起源于开源社区的Java技术日益流行,它们大都是对先前的一些技术弊端的改进。例如,对于非常流行的Struts和EJB,批评的声音是越来越响。业界普遍要求使用更少侵入性,更轻量级和更易于测试的技术来取代它们。也许轻量软件开发方法学(如敏捷软件开发,XP)的兴起,对于这一趋势起了推波助澜的作用。主要的技术趋势有:

Hibernate成为主流技术

       Hibernate日益成为主流的POJO持久层技术。Java社区要求在EJB和POJO中使用同样的持久化机制,这样,业务层的代码将不受业务对象持久化机制的影响。EJB3规范草案似乎在响应这一要求,它在EJB3的持久化中使用和Hibernate类似的机制。考虑到Hibernate加入了JBoss,和Gavin King在EJB3专家组的影响,这点并不奇怪。

Dependency Injection,IoC容器

      IoC容器是一种轻量级容器,它使用配置文件定义和管理服务之间的依赖关系。通过IoC容器,服务的使用者不必主动地请求服务,而是依靠容器注入所需的服务,从而实现了获取服务方式的"控制反转"(Inversion of Control)。也称为"依赖注入"(Dependancy Injection)。
     同时,IoC容器也象常规的组件容器一样,提供了调度组件并管理组件生命周期的功能。
     在我看来,使用IoC容器的最大好处是使代码更加易于测试。

AOP进入实践阶段

      AOP(Aspect Oriented Programming的缩写),意思是面向Aspect编程,是面向对象编程方法论的延续。从AOP的角度来看,软件系统可以看作是由多个关注点(Concern)组合而成。AOP的基本思想是,将通用的功能关注点(Concern)从系统中分离出来,封装成功能独立的模块单元(Aspect);最后,通过"Aspect Weaver" 组装关注点并转换成可执行代码。单个模块单元(Aspect)可织入(Weave)不同的过程,模块和对象当中,从而提高了代码的复用性。

Annotations,Metadata,JSR-175

      如果你用过XDoclet,JSR-175的概念和它很相似。JSR-175不过是把XDoclet的功能加入了Java语言规范。试看下面简单的代码:

@entity( table = "UI_USER" )
      public class User {
          @primarykey( column="UI_USER_OID", generator="sequence")
          private Long oid; 
          @attribute( column="HAWKID" )
          private String hawkid
          ...
      }

      在以上的例子中,@标签告诉Java类将自己映射到指定的数据表和字段,从而通过Metadata数据完成持久化的工作。参见"Hibernate成为主流技术"。

Java规则引擎

      当前在Java社区,一个引人注目的新技术是Java规则引擎,它起源于基于规则的专家系统。同时,也可用于分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时(即商务时间)可以动态地管理和修改。从而提供软件系统的柔性和适应性,帮助开发人员更好地"拥抱变化"。

      不难看出,规则引擎的基本思想和AOP有着异曲同工之妙。

      JSR-94将规则引擎技术引入Java世界,但并没有定义编写规则的语法,因此在JSR-94的产品实现中移植还是需要一些工作。