1.4 Java EE设计思想
为了更好地学习Java EE,首先要领会Java EE的设计思想。社会要想发展进步,其根本在于每个社会成员都“各司其职,各尽其责”,对于一个复杂的企业级应用系统也是如此。本着这种合理分工的思想,Java EE将企业级应用分为两部分:实现基础支撑功能的容器和实现特定业务逻辑的组件。
1.4.1 容器
容器提供的底层基础功能被称为服务。这些服务主要用来实现企业级应用的共性需求,如事务、安全、可扩展性和远程连接等。组件通过调用容器提供的标准服务来与外界交互。为满足企业级应用灵活部署,组件与容器之间必须既松散耦合,又能够强有力地交互。为实现这一点,组件和容器都要遵循一个标准规范,这个标准规范就是Java EE。
容器由专门的厂商来生产,容器必须实现的基本接口和功能由Java EE规范定义,但具体如何实现完全由容器厂商自己决定。常见的容器类型分为Web容器和EJB容器。
1.4.2 组件
组件一般由开发人员根据特定的业务需求编程实现。所有的Java EE组件都是在容器的Java虚拟机中进行初始化的,组件通过调用容器提供的标准服务来与外界交互。容器提供的标准服务有:命名服务、数据库连接、持久化、Java消息服务、事务支持和安全服务等。因此在组件的开发过程中,完全可以不考虑复杂多变的企业应用运行环境,而专注于业务逻辑的实现,这样可大大提高组件开发的效率,降低开发企业级应用程序的难度。
1.4.3 容器与组件的交互
那么组件与容器之间是如何实现交互的呢?即容器如何知道要为组件提供何种服务、组件又是如何来获取容器提供的服务呢?Java EE采用部署描述文件来解决这一难题。每个发布到服务器上的应用除了要包含自身实现的代码文件外,还要包括一个XML文件,称为部署描述文件。部署描述文件中详细地描述了应用中的组件所要调用的容器服务的名称、参数等。部署描述文件就像组件与容器间达成的一个“契约”,容器根据部署描述文件的内容为组件提供服务,组件根据部署文件中的内容来调用容器提供的服务。
从上面的介绍中我们可以发现,部署描述文件的配置是Java EE开发中的一项重要而又烦琐的工作。值得庆幸的是,在Java EE 6规范中,提供了一种注解机制来取代配置复杂的部署描述文件。所谓注解其实就是一个以“@”开头的特殊注释文本,但它比注释的作用要大得多。代码中的注释是帮助开发人员阅读和理解代码内容,而注解则是帮助容器来阅读和理解组件内容。我们可以把注解看成是贴在组件身上的标签,在将组件部署到容器中时,根据这些标签,容器便知道该如何为组件提供服务。注解的出现大大简化了Java EE应用程序的开发和部署,是Java EE规范的一项重大进步。
更值得一提的是,在最新的Java EE 6规范中,还引入了一种“惯例优于配置”,也称为“仅异常才配置”的思想。通俗一点讲,就是对于Java EE组件的一些属性和行为,容器将按照一些约定俗成的惯例来自动进行配置,此时开发人员甚至连注解都可以省略。只有当组件的属性和行为不同于惯例时,才需要进行配置。这种编程方式大大降低了程序人员的工作量,也是需要开发人员逐渐熟悉和适应的一种编程技巧。