`

spring actionscript 例子学习

    博客分类:
  • flex
阅读更多

http://www.riameeting.com/node/448

Spring ActionScript入门教程(1)-简介

<!--contentstart-->

这是一个系列文章,总共3篇,RIAMeeting将在这3篇文章中为大家讲述Spring ActionScript的基本概念以及使用方法,通过学习这3篇文章,开发者可以创建出一个简单的Spring ActionScript的应用,并体会到Spring ActionScript带来的优势和便捷性。

当然,基本上所有的框架的最大价值在于它给你的结构上的规范和指导意义,所以我们在使用框架的时候,应当尽量去体会框架对于自己编程思想的提升,如果只是为使用框架而是用框架,就会感觉框架繁琐而且加大工作量,增加编码体积,实际上框架的最大优势都是在后期才体现出来的(比如当项目趋于扩大化时的维护,管理和团队协作)。

Part1:介绍Spring ActionScript

首先,我们先来介绍一下Spring ActionScript,如果你来自Java社区,应该对Spring并不陌生,实际上在Java社区中Spring作为替代J2EE的一个轻量级的框架有着非常广泛的应用。Spring包含两个方面的重要功能:IoC和AOP,大家用到Spring最多的地方实际上也是IoC。另一个方面AOP面向切面在AS中不被支持。简单的说,Spring ActionScript是Spring在ActionScript中的实现。

名词解释:

IoC:控制翻转(inverse of control),Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传 递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就 主动将依赖传递给它。

DI:Dependency Injection (DI),即依赖注入。

Part2:安装Spring ActionScript Framework

在这里以Flash Builder4为例说明如何安装Spring ActionScript Framework。Flash Builder是Flex Builder的最新版本(从4的版本开始更名为Flash Builder)目前还是Beta版,但它从各方面来说都比Flex Builder3提升了不少,所以我们这里使用Flash Builder4以提升编程的效率。

言归正传,如果我们需要安装为Flash Builder安装Spring ActionScript Framework,需要遵循以下的步骤:

  1. 安装Flash Builder4,你可以从Adobe的网站(http://labs.adobe.com)下载Flash Builder4的安装文件,这个过程非常简单,界面也非常容易使用,因为Flash Builder是基于Eclipse的。
  2. 创建一个新项目,或者导入原有的Flex Builder3的项目
  3. 下载Spring ActionScript Framework的SWC文件,下载地址在本文的最底部
  4. 下载依赖的第三方SWC文件,因为这个项目依赖了很多第三方的类库,所以需要你把这些依赖的类库也都下载下来,这些类库包括:as3commons-reflect.swc , as3commons-lang.swc , as3commons-logging.swc , flexunit.swc,这些都在最底部的压缩文件中被包含,下载即可
  5. 将所有下载的SWC文件移动到你的项目的Libs目录,然后你需要修改编译参数,将这些类库编译到SWF中去,步骤是:打开项目属性面板,定位到Flex Compiler选项,找到additional compiler arguments,输入类似于下面的语句:-locale en_US -default-background-color #000000 -include-libraries ../libs/spring-actionscript.swc ../libs/as3commons-reflect.swc ../libs/as3commons-lang.swc ../libs/as3commons-logging.swc ../libs/flexunit.swc

    参见图片说明,点击查看大图:

    点击查看大图

在上面我们稍感麻烦的一点是还要手工把所有的依赖的SWC编译进去,否则运行时会找不到依赖的库,一旦项目依赖的库比较多,这个配置代码就会很长,也会给部署的人带来麻烦,针对这种情况,Maven有非常好的解决方法,参见RIAMeeting关于Maven的介绍文章:

  1. http://www.riameeting.com/node/445
  2. http://www.riameeting.com/node/446
  3. http://www.riameeting.com/node/447

Part 3: 使用Spring ActionScript中的XML配置

Spring ActionScript 允许你使用XML描述文件来定义你需要在应用中使用的实例以及它们之间的相互依赖关系。这个XML文件可以是一个外部的XML文档,也可以是一个内嵌的 XML(嵌入到Flex的MXML中作为元数据存在)。这两种方式都被支持,只是在使用上稍有区别。

非常需要注意的是在Flex中使用Spring,必须要保证被依赖的类被编译到SWF中,否则会报运行时错误(无法找到所需的类),解决方法参加Part2的编译器参数部分。

下面我们来讨论如何编写Spring的配置文件,这个配置文件遵循XML结构,我们先来看一个典型的配置文件,你可以打开你的Flash Builder4,然后新建一个文本文件,命名为"application_context.xml",然后粘贴下面的代码片段到这个文件中:

 

  1. <objects>
  2. <import file="services.xml"/>//行1
  3. <import file="resources/messageSource.xml"/>//行2
  4. <import file="/resources/themeSource.xml"/>//行3
  5. <object id="object1" class="..."/>//行4
  6. <object id="object2" class="...">//行5
  7. <property name="elements" value="123456" />//行6
  8. </object>
  9. </objects>

 

对于熟悉XML的朋友,这段配置非常容易理解,主要包含以下几个方面:

  1. 支持导入xml文件(参加行1,2,3),就是说,我们可以按照一定的规则拆解XML中的内容到不同的文件,以便于管理和维护,方法是使用import标签
  2. 实例化一个对象,使用object标签(参见行4,行5),其中有两个必须的属性,即id和class,id代表对这个object的引用,class代表这个object对应的类,注意要写全类名和包路径,比如:class="mx.containers.Panel"
  3. 使用property属性定义这个object的依赖(参见行6),比如这个object需要的一些字符串类型的数据,以及对另外一个对象的引用等等,如果是直接赋值,使用value,引用则使用ref

我们还可以使用定义外部变量(常量)的方式,将一些配置方面的信息以变量或常量的形式定义在外部,以便于部署和维护时候的修改,通常我们会建立一个类似于prop.properties这个的一个文本文件,然后使用下面的变量声明方式来声明变量:

 

  1. s1=First string
  2. s2=Second string

 

在XML中引用,使用${s1}的方式来引用:

 

  1. <objects>
  2. <property file="strings.properties" />
  3. <object id="string1" class="String">
  4. <constructor-arg value="${s1}"/>
  5. </object>
  6. <object id="string2" class="String">
  7. <constructor-arg value="${s2}"/>
  8. </object>
  9. </objects>

 

还可以在一个对象的内部使用内联对象,举例:

 

  1. <object id="outer" class="...">
  2. <property name="target">
  3. <object class="com.example.Person">
  4. <property name="name" value="Fiona Apple"/>
  5. <property name="age" value="25"/>
  6. </object>
  7. </property>
  8. </object>

 

下表是在配置文件中常用的一些标签以及相关的说明和用法

术语 说明 代码示例 ${变量名} object property ref constructor-arg factory-method dictionary array array-collection depends-on lazy-init autowire singleton init-method method-invocation abstract template application
你可以把一些变量分离出来写在单独的文本文件中,然后在配置中引用这些变量,这样最大的好处是你可以把配置信息比如Server端的连接地址放在单独的文件中,方便修改和维护

新建global.prop文本文件,写入:

variable1=10

在配置中引用:

${variable1}

在XML配置中,每一个对象用Object来表示,然后分别用id和class代表唯一标示和类的名称 <object id="obj" class="mx.ctrol.Button" />
你可以使用property为对象的属性复制,这也是IoC的精髓,即从这里把依赖注入到对象。name就是属性的名称,而value就是你要赋予的具体的值

<object ... >

<property name="name" value="Fiona Apple"/>

</object>

除了可以直接赋值,你也可以通过使用ref在属性中引用别的对象

<object id="a" .../>

<object ... >

<property name="name" ref="a"/>

</object>

如果你的对象实例化的时候需要从构造函数中传入参数,那么可以使用这个属性,将所需的参数传递进去

<object ... >

<constructor-arg>
<ref>anotherExampleObject</ref>
</constructor-arg>
<constructor-arg type="int" value="1"/>

</object>

工厂方法,含义是不使用new对这个Object进行实例化,而是调用这个类的静态方法,可用于单例模式的实现 <object id="a" class="A" factory-method="getInstance" />
相当于AS3中的Dictionary,你可以在配置中声明一个Dictionary对象 <dictionary>
<entry>
<key>development</key>
<value>dx</value>
</entry>
</dictionary>
同样,你可以在配置中声明一个数组对象 <array>
<value>ssnce</value>
<value><ref object="s"/></value>
</array>
对应Flex中的ArrayCollection,当然只有Flex的应用才可以使用这个配置方式 <array-collection>
<value>ssnce</value>
<value><ref object="s"/></value>
</array-collection>
定义依赖关系,含义就是先初始化它的依赖,然后初始化自己 depends-on="manager,accountDao"
如果值为true,则不马上初始化,而是在第一次调用的时候才初始化 <object ... lazy-init="true"/>

自动装配,Spring ActionScript支持自动装配,含义就是你只要声明某个对象为自动装配,它就会按照规则自动去寻找这个对象的依赖并注入给它,而不需要手工操作。

默认是no,可以选择byName,byType,constructor,autodetect来自动装配对象的依赖。使用自动装配时,应当权衡利弊,合理的与ref的方法相结合,尽量在降低工作量的同时,保证应用的可维护度

<object ... autowiret="byName"/>
一个布尔量,对一个对象而言,这个属性的设置为True则只创建一个实例,false则每次调用都创建新的实例 <object ... singleton="true"/>
初始化方法,含义是创建实例后,调用实例的这个方法进行初始化 init-method="init"
调用对象的方法 <method-invocation name="init"/>
定义继承关系,你可以将一个对象的abstract属性设置为true,然后在另一个对象中定义parent=这个对象,含义就是继承原对象的所有的属性 <object id="inheritedTestObject" abstract="true">
<property name="name" value="parent"/>
<property name="age" value="1"/>
</object>
<object id="inheritsWithDifferentClass"
class="org.springactionscript.objects.DerivedTestObject"
parent="inheritedTestObject" init-method="initialize">
<property name="name" value="override"/>
<!-- the age property value of 1 will be inherited from parent -->
</object>
你可以将重复性的设置工作定义为模板,然后其它对象就可以使用这个模板 <template id="remoteObject">
<object class="mx.rpc.remoting.mxml.RemoteObject">
<property name="makeObjectsBindable" value="${makeBindable}"/>
</object>
</template>
<object id="concreteService" template="remoteObject">
<param name="makeBindable" value="false"/>
</object>
Flex专属属性,你可以通过配置下面这个对象:<object class="org.springextensions .actionscript.ioc. factory. config.flex. ApplicationPropertiesResolver"/>,然后就可以在其他的配置中使用application这个变量,使用方式是:${application.url}
  • application.frameRate
  • application.historyManagementEnabled
  • application.pageTitle
  • application.resetHistory
  • application.scriptRecursionLimit
  • application.scriptTimeLimit
  • application.url
  • application.url.protocol
  • application.url.host
  • application.url.port
  • application.usePreloader
  • application.viewSourceURL

Part 4: 使用容器载入配置文件

上面我们讨论如何编写一个配置文件,然后我们看一下如何在Flex中载入并解析这个文件。

首先需要了解的是,我们如果要在Flex中使用DI注入对象,需要使用一个IoC容器来做这件事。FlexXMLApplicationContext 或 XMLApplicationContext 是Spring关于IoC的基础容器。两者基本相同,第一个只是增加了对Flex的支持,比如ArrayCollection。一般也认为这是程序的入 口,我们写代码的开始会用到这两个类,用于载入和分析配置文件(XML)。

使用容器载入配置的代码示例:

 

  1. var applicationContext:XMLApplicationContext
  2. = new XMLApplicationContext();
  3. applicationContext.addConfigLocation("application-context.xml");
  4. applicationContext.addEventListener(Event.COMPLETE, handleComplete);
  5. applicationContext.load();

 

在下一个章节,我们将来讲述使用Spring ActionScript创建一个简单的实例,而在第三个章节,我们则会引入Cairngorm。

下一篇:一个简单的实例

分享到:
评论

相关推荐

    spring actionscript 入门例子

    通过这个入门例子,你可以逐步学习如何设置和运行一个基本的 Spring ActionScript 项目,了解如何使用依赖注入和配置文件来组织和管理 ActionScript 代码。同时,Maven 的使用也让你熟悉软件开发的最佳实践,如自动...

    flex整合spring的例子

    这个例子旨在展示如何在Flex前端与Spring后端之间建立通信,以便利用Spring框架的强大功能,如依赖注入、事务管理等。 首先,Flex是一个基于ActionScript和Flash Player的开源框架,用于创建交互式的、基于Web的富...

    用spring和Flex整合的一个例子

    本示例项目“用spring和Flex整合的一个例子”展示了如何将这两个技术结合,以构建一个完整的应用程序。通过使用BlazeDS作为中间件,Spring和Flex可以有效地进行数据交换。BlazeDS是一个免费的服务器端组件,它提供了...

    spring+blazeDS+flex4 例子

    在“spring+blazeDS+flex4 例子”项目中,我们看到一个完整的集成示例。该项目可以直接运行,所有必要的jar包都已包含。首先,我们需要在Spring配置中定义BlazeDS的通道配置和服务接口。然后,在Flex4的MXML或AS3...

    spring整合flex简单明了的小例子

    Spring 整合 Flex 是一种将Java后端的Spring框架与前端Adobe Flex技术结合的技术实践,旨在提供一个富互联网...通过学习和实践这个例子,初学者能够掌握Spring与Flex的整合技巧,为进一步开发复杂的RIA应用打下基础。

    flex+java增删改查(spring+jpa)简单例子

    标题 "flex+java增删改查(spring+jpa)简单例子" 暗示了这是一个关于使用Adobe Flex作为前端UI框架,与Java后端结合,实现数据的CRUD(创建、读取、更新、删除)操作的教程。在这个场景中,Java后端使用Spring框架...

    Spring整合flex-Spring BlazeDS Integration-带项目demo

    这个项目demo提供了实际操作的例子,帮助开发者理解和实现Spring与Flex的结合。 在Spring BlazeDS Integration中,BlazeDS是Adobe提供的一个开源服务器端组件,它作为中间件,处理Flex客户端与Spring应用服务器之间...

    spring整合Flex

    通过这个小例子,你可以学习到如何配置Spring与Flex的集成环境,创建Flex UI并与Spring服务进行通信,以及如何在项目中引入和配置Spring Security来保护应用资源。这将有助于提升你在RIA开发领域的技能,特别是在...

    flex,blazeds,spring,hibernate的小例子

    通过这个“小例子”,学习者可以了解到如何在实际项目中构建一个完整的Flex前端、BlazeDS通信层、Spring业务逻辑层和Hibernate数据访问层的架构。这样的综合实践有助于提升开发者对现代企业级应用开发流程的理解和...

    spring+hibernate+flex整合

    Flex是Adobe公司推出的基于ActionScript和MXML的开发平台,用于构建RIA。它允许开发者创建具有丰富用户界面的应用程序,这些应用程序可以在多个浏览器和操作系统上运行,无需插件。Flex使用Flex Builder或IntelliJ ...

    flex,blazeds,spring,hibernate 整合小例子

    在IT行业中,Flex、BlazeDS、Spring和Hibernate是四个非常关键的技术框架,它们分别用于构建富客户端应用、实现服务器与客户端之间的数据通信、管理应用的业务逻辑以及处理持久化数据。下面将详细介绍这些技术以及...

    flex4+spring_hibernate+blazeds 的登录例子

    Flex4、Spring、Hibernate 和 ...这个登录例子为学习和理解 Flex4、Spring、Hibernate 和 BlazeDS 的集成提供了基础。通过深入研究并扩展这个示例,开发者可以更好地掌握这些技术,进而构建更复杂的 RIA 应用程序。

    springCloud

    Spring Cloud简介 Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spring Cloud AWS、Spring Cloud ...

    flex4+spring_hibernate+blazeds 登录例子 jar包

    Flex4 是 Adobe 推出的用于构建RIA的开发框架,基于ActionScript 3.0和Flash Player或Adobe AIR。它提供了一套丰富的组件库,可以创建美观、交互性强的用户界面。在登录例子中,Flex4 可能被用来设计登录表单,包括...

    Flex整合spring,hibernate

    通过这个例子,开发者可以学习到如何设置服务端和客户端的通信,以及如何在Flex中使用Spring提供的业务服务。 总结来说,"Flex整合Spring, Hibernate"是一个复杂的但极其有用的开发实践,它将前端的灵活性和动态性...

    Flex与Spring java联合开发

    通常,这个例子会包括Flex端的视图组件,如Form或List,用于显示和编辑Person对象的信息,以及ActionScript代码来处理与Spring服务的交互。而在Spring端,会有一个PersonService接口和其实现类,定义了操作Person...

    sping hibernate Annotation(注释配置) demo(例子)

    在 `S_H_Annotation` 文件中,应当包含具体的 Java 源码、数据库脚本、配置文件,甚至可能有 Flex 的 MXML 和 ActionScript 代码。通过分析这些文件,你可以更深入地理解如何将 Spring 的注解配置与 Hibernate 结合...

    springgraph例子

    1. **Spring配置**:例子中会包含Spring配置文件,这些文件定义了SpringGraph的bean,如图实例、节点和边。学习如何配置这些bean可以帮助你理解如何在Spring环境中启动和管理SpringGraph实例。 2. **Flex集成**:...

    Flex+HTTPService 例子

    这通常是一个Servlet或Spring MVC的Controller,它接收Flex发送的数据,进行处理后返回结果。 7. **HTTPServiceTest**:根据压缩包中的文件名,我们可以推测这个例子可能包含了一个简单的HTTPService测试应用。解压...

Global site tag (gtag.js) - Google Analytics