[Flex]Spring ActionScript入门教程(3)下

转载:http://www.riameeting.com/node/451

本文接上一部分继续完成RSS阅读器实例,在上个部分中我们完成了Lib项目的构建,其实已经基本上完成了项目本身的逻辑代码,而在这一部分,我们将把这个Lib引入到IoC框架中,并编写相应的XML配置文件,最终完成装配,形成完整的应用。

Part4 实现主项目SpringActionScriptCairngormDemo

让我们回到SpringActionScriptCairngormDemo,开始完成IoC的注入工作。

4.1 配置编译参数

 打开项目属性,在编译参数部分,将项目依赖的SWC文件都设置好,包括两部分:一部分是已经下载到libs目录下的SWC文件,还要把我们上个例子中编译好的SpringActionScriptCairngormDemoLib.swc也配置进去,配置参数应该如下:

-locale en_US -default-background-color #000000  -include-libraries   ../libs/spring-actionscript.swc ../libs/spring-actionscript-cairngorm.swc ../libs/as3commons-reflect.swc ../libs/as3commons-lang.swc ../libs/as3commons-logging.swc ../libs/flexunit.swc ../../SpringActionScriptCairngormDemoLib/bin/SpringActionScriptCairngormDemoLib.swc

参见附图:

点击查看大图

4.2 写配置XML

在src目录下,创建一个文件夹名为“config”,然后在config下面再创建两个目录,分别是cairngorm和view,第一个目录是 为了存放和Cairngorm相关的配置,第二个目录是用于存放跟视图相关的配置。当然这样拆分目录是为了便于区分和维护,实际上你也可以根据需要按照自 己的需要拆分目录结构,IoC对此没有硬性要求。

首先我们先来配置Cairngorm的部分,将Cairngorm部分必须的 Service,ModelLocator,FrontControler等部分一一做配置。在cairngorm目录下,创建一个XML文件,名为 “cairngorm.xml”。输入下面的内容:

  1. <objects>
  2.  
  3. <!--ModelLocator-->
  4. <object id="appModelInstance" class="com.riameeting.model.ApplicationModel" factory-method="getInstance" singleton="true">
  5. <property name="feedURL" value="http://www.riameeting.com/rss.xml" />
  6. </object>
  7.  
  8. <!--Service Locator-->
  9. <object id="serviceLocator" class="org.springextensions.actionscript.cairngorm.business.CairngormServiceLocator" factory-method="getInstance">
  10. <property name="feedService">
  11. <ref>feedService</ref>
  12. </property>
  13. </object>
  14. <object id="feedService" class="mx.rpc.http.HTTPService">
  15. <property name="url" value="http://www.riameeting.com/rss.xml"/>
  16. <property name="method" value="GET"/>
  17. <property name="useProxy" value="false"/>
  18. <property name="resultFormat" value="text"/>
  19. </object>
  20.  
  21. <!--Delegate Factory-->
  22. <object id="businessDelegateFactory" class="org.springextensions.actionscript.cairngorm.business.BusinessDelegateFactory">
  23. <property name="service" ref="feedService"/>
  24. <property name="delegateClass" type="class" value="com.riameeting.business.GetFeedDelegate"></property>
  25. </object>
  26.  
  27. <!--FrontControler-->
  28. <object id="appAwareCmdFactory" class="com.riameeting.factories.ApplicationModelAwareCommandFactory">
  29. <property name="applicationModel" ref="appModelInstance"/>
  30. <method-invocation name="addBusinessDelegateFactory">
  31. <arg>
  32. <ref>businessDelegateFactory</ref>
  33. </arg>
  34. <arg>
  35. <array>
  36. <value type="Class">com.riameeting.command.GetFeedCommand</value>
  37. </array>
  38. </arg>
  39. </method-invocation>
  40. </object>
  41. <object id="frontController" class="org.springextensions.actionscript.cairngorm.control.CairngormFrontController">
  42. <constructor-arg>
  43. <object>
  44. <property name="getFeedEvent" value="GetFeedCommand"/>
  45. </object>
  46. </constructor-arg>
  47. <constructor-arg value="com.riameeting.command"/>
  48. <method-invocation name="addCommandFactory">
  49. <arg><ref>appAwareCmdFactory</ref></arg>
  50. </method-invocation>
  51. </object>
  52.  
  53. </objects>

可以看到主体配置分为4个部分:

  1. ModelLocator – 对应在Lib中创建的ApplicationModel,在此创建一个Model的实例
  2. Service Locator – 先创建一个ID为“feedService”的HTTPService,然后创建一个ID为“serviceLocator”的Service Locator,将feedService引入进去
  3. Delegate Factory – 我们通过配置代理工厂,将第二部分的服务注入到代理中去,这样代理就具备了通过自身调用服务的能力,而不需要同外部服务产生直接的依赖
  4. FrontControler – 首先我们配置工厂类ApplicationModelAwareCommandFactory,将Model注入到Command中去。然后创建一个前端控制器“frontController”,将事件与命令之间建立映射。

然后我们来创建一个关于视图的配置文件,定义界面上都显示什么样的组件,在view下面创建一个XML文件,名为“global.xml”,然后输入下面的内容:

  1. <objects>
  2.  
  3. <object id="searchForm" class="com.riameeting.view.AddressBar">
  4. <property name="model" ref="appModelInstance"/>
  5. <property name="x" value="10"/>
  6. <property name="y" value="10"/>
  7. </object>
  8. <!--<object id="searchResult" class="com.riameeting.view.SearchResultWithTable">-->
  9. <object id="searchResult" class="com.riameeting.view.SearchResult">
  10. <property name="model" ref="appModelInstance"/>
  11. <property name="x" value="10"/>
  12. <property name="y" value="60"/>
  13. </object>
  14. <object class="com.riameeting.utils.ApplicationViewAssembler" init-method="init">
  15. <property name="elements">
  16. <value>
  17. <array>
  18. <ref>searchForm</ref>
  19. <ref>searchResult</ref>
  20. </array>
  21. </value>
  22. </property>
  23. </object>
  24.  
  25. </objects>

你可以看到视图方面配置了三个部分,第一个对应我们在Lib中定义的搜索组件,ID是searchForm,第二个是用于显示Feed内容的列表组 件,ID是searchResult,而第三个配置只是为了使用工具类将前两个组件添加到显示列表中。并且为每一个视图组件,都指定了Model的引用, 就是我们在Cairngom.xml中配置好的Model。

然后我们定义一个主体的XML,在config下面创建一个名为“”的XML文件,引入上面创建的两个XML,内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <objects>
  3. <import file="view/global.xml"/>
  4. <import file="cairngorm/cairngorm.xml"/>
  5. </objects>

4.3 实现IoC容器载入

打开SpringActionScriptCairngormDemo.mxml,建立一个代码块,声明一下IoC容器,载入配置文件,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute" width="420" height="480" viewSourceURL="srcview/index.html">
  3. <mx:Script>
  4. <![CDATA[
  5. import org.springextensions.actionscript.context.support.FlexXMLApplicationContext;
  6. private function init():void {
  7. var appContextPath:String = "config/application_context.xml";
  8. var context:FlexXMLApplicationContext = new FlexXMLApplicationContext(appContextPath);
  9. context.addEventListener(Event.COMPLETE,onIoCLoadComplete);
  10. context.load();
  11. }
  12. private function onIoCLoadComplete(e:Event):void {
  13. trace("loaded");
  14. }
  15. ]]>
  16. </mx:Script>
  17. </mx:Application>

编译并运行项目,就可以看到运行结果了。

演示地址:

http://www.riameeting.com/examples/SpringASCairngormDemo/SpringActionScriptCairngormDemo.html

提示:你可以在Demo上点击右键查看源码。

附件中是两个项目的源码下载。

Lib项目

Demo项目

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏