读书笔记——Flex与Spring && Flex与IOC框架

Posted on 2009-09-30 11:49 Robert Su 阅读(1994) 评论(1)  编辑  收藏 所属分类: Java
所读文章
常用Flex IOC框架比较分析  http://www.infoq.com/cn/articles/ioc-frameworks
Flex 与 Spring 框架  http://www.riameeting.com
Spring BlazeDS Integration简介与入门 http://www.infoq.com/cn/articles/spring-blazeds-integration

Spring与IOC现在是开发人员的常识了,IOC(Inversion of Control)也成为软件开发中非常流行的一种设计模式。

Spring的横空出世完全颠覆了传统Java服务端的开发方式。它鼓励通过依赖注入的方式来装配POJO,这极大地简化了应用的开发与测试。

Spring的核心配置是通过Java bean实现的。借助于bean,任何Java类都能被公开成为服务。
IoC是Spring的核心。IoC的作用:
借助IOC,可用一个独立的对象为其他对象的数据成员填充正确的实现,而不是由这些对象自己负责此项工作。这样做的好处有两个。
第一,可将对象的数据成员 声明为接口,从而将对象与其具体实现分离(即契约式设计,design by contract)。
第二,可从对象中删除创建逻辑,可以使对象的用途更为明确。

实现:

一般有两种最常见的对象配置方法:

  • 对象实例化(例如:var myObject = new Object()
  • 对象查找(例如:var myObject = registry.getMyObject()

而利用IOC,你可在一个独立层中实例化应用程序要用到的对象,并传入它们所需的依赖。具体来说,最常见的实现方法也有两种:

  • Setter注入(例如:instance.myObject = new Object()
  • Constructor注入(例如:instance = new Instance( new Object() )

一个IOC框架,通常由如下三个部分组成:配置、工厂和注入机制。

配置

我们可以在配置中描述对象之间的关系。最常用的配置描述方法是在文件中声明。这样的文件有时候也被称为上下文文件(context file)。也可以用元数据/注释(metadata/annotation),甚至直接在程序中描述配置。/

工厂

工厂负责配置的解析和所有对象的准备工作,程序一旦运行,就可以根据需要取得这些对象。

在经典的Spring框架(最流行的Java IOC框架)中,所有对象(我称其为客户对象)都由IOC容器负责准备,并且它们以接口形式声明自己的依赖。在配置文件中,被声明的依赖都被设置为对应的实现类。

注入机制

所谓注入机制,是指如何将工厂创建的对象实例注入到应用或其他对象。

就Spring Web应用而言,注入方法是通过web.xml来实现的。Spring会监听Web应用上下文的加载事件,并利用钩子捕获类加载器的行为,从而分离出任何 需被创建的对象。此后,若有需要,工厂将实例化对象,并填充它所需的依赖。当然在向应用返回对象之前,这些依赖本身也可能需要实例化。这个过程即所谓的 “(将依赖与对象)捆绑在一起”。

在Flex中,类的加载原理有所不同,因此捆绑方法也就不同。目前有两种方法:

  • 客户对象直接从工厂请求(已捆绑好的)对象
  • 利用内置的Flex事件机制(用于实例化视图)触发注入

看了一些文章之后发现还是不能够很好的了解Flex IOC框架比如spring Actionscript与Spring BlazeDS Integeration 到底有何不同。
到spring官方网站一看究竟,目前Spring官方网站上有两个项目:
Spring BlazeDS Integration
Spring Ationscript

这两个项目让你在客户端的Actionscript编码中以及服务端的Java编码中,都能够使用Spring的各种优秀特性。

两者的不容之处在于

Spring BlazeDS Integeration 允许你在服务端使用Spring容器来组织你的代码,维护的你代码依赖。并且,把你的服务通过相应的配置暴露给客户端。

Spring Actionscript则是一个基于Actionscript代码的Ioc容器(目前还不支持AOP).可以让你在客户端使用Ioc管理依赖注入.


下面分别看下,首先来探讨下Spring Actionscript以及其它的IoC框架。



Spring ActionScript

Spring ActionScript前身为Prana,因其成熟度高,成为了一个知名框架。

核心概念

任何使用过Spring的Java或.NET版本的人,都会很快熟悉Spring ActionScript。你在运行时加载的配置文件,可以给工厂提供足够信息,用于实例化被应用请求的任何对象。

基本配置

在标准例子工程中使用Spring ActionScript,需如下三个基本步骤:

  1. 创建文件application-context.xml
  2. 初始化应用中的工厂对象
  3. 在你的视图层(或其他任何地方),根据需要从工厂获得对象以供使用

对象工厂和对象配置

在Spring ActionScript中,对象声明在应用可访问的XML文件(通常命名为application-context.xml)中。此配置文件由XMLApplicationContext(是ObjectFactory的子类)加载。


Spring ActionScript是一个优秀的、成熟的、开发活动十分活跃的IOC框架,任何用过Spring框架的人都熟悉的。

以XML形式声明对象存在一个问题,即在XML中声明一个类,并且这个类没被包含在SWF中(因为在你的应用中没有对它的直接引用)时,Flash Player会在运行时抛出异常。其解决办法是创建一个ActionScript类,声明它对上下文XML的依赖,并将此类包含在应用中。


Parsley

  • 框架:Parsley
  • 网站:http://www.spicefactory.org/
  • 开发者:Jens Halm
  • 版本:2.0.0
  • 许可:开源
  • 配置:XML/MXML/ActionScript

Parsley也是一个成熟的IOC框架,最初灵感来源于Spring。它近期经历过一次较大规模的重写。新版本支持一些本地Flex特性,如绑定和元数据,使你在配置你的工程时有更多更好的选择。

核心概念

Parsley的核心概念是源自于Spring的上下文,也即应用的依赖注入的配置。

Parsley的配置现在支持多种形式,其中包括XML和MXML。你可以使用本地的MXML标记或Parsley库提供的自定义MXML标签。Parsley使用元数据标签实现对注入机制的支持,这和Swiz框架是类似的。

Parsley还支持消息模式。基本不需代码干预,你就能将你的对象配置为事件源或事件处理器。在这个例子中,我会用这个特性替代Controller模式。

基本配置

Parsley的配置分三个基本步骤:

  1. 创建Config.mxml文件。
  2. 在应用的根部初始化一个Context对象。
  3. 在你的视图中,用Inject元数据实现依赖的注入。

准备配置文件的方法有多种,不过在这个例子中,我使用支持本地标记和Parsley标签的MXML文件。这种方法的好处是在编译时就将类引入,当然这样一来,也就不能直接修改已被编译的应用的配置了。

对象工厂和对象配置

在Config.mxml中,你能看到应用中用到的从域模型到代理的所有对象。声明这些对象的方式有两种:

  1. 标准的MXML
  2. 使用Parsley的对象定义标签

在后面的内容中,我将详细介绍这种方法。

总结

经过其他一些框架的不断启发,新版本的Parsley已发展成为一个完整的IOC框架。它还支持模块式开发和上下文卸载。在模块化Flex应用开发日益盛行的今天,这无疑是一个十分重要的特性


Spring BlazeDS Integration
其目标是:开发者可以利用Spring开发模型通过Adobe Flex、BlazeDS、Spring以及Java技术创建RIA。这样我们就可以通过BlazeDS公开Spring管理的服务而无需额外的配置文 件。其优势在于将Spring的易用性与Flex、BlazeDS以及Java整合起来以共同创建应用。
Spring的核心配置是通过Java bean实现的。借助于bean,任何Java类都能被公开成为服务。

为了将这些bean公开成为Flex客户端所用的远程服务,Integration项目采用了Spring Web MVC。Spring Web MVC将DispatcherServlet作为一个中央分发器,用以处理任何类型的HTTP请求或是基于HTTP的远程服务。我们可以通过相同的 JavaBean配置方式来配置该DispatcherServlet以将请求转发给相应的处理器进行后续处理。


Feedback

# re: 读书笔记——Flex与Spring && Flex与IOC框架  回复  更多评论   

2009-10-03 12:47 by 罗莱家纺
新版本的Parsley已发展成为一个完整的IOC框架。它还支持模块式开发和上下文卸载

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 103, comments - 104, trackbacks - 0, articles - 5

Copyright © Robert Su