Spring ActionScript对于Module的支持

riadevID: 

Spring ActionScript对于Module开发有无支持?

一般在小规模的RIA应用中,所需的配置量也很少,我们直接写一个XML配置文件,一次性载入就可以了。但如果涉及到大规模应用,比如在Flex项目开发中,会将若干模块做成Flex Module来实现模块的分离,这样因为主应用和Module的加载时间不一致,势必导致我们需要为他们各自编写独立的XML配置(这种情况也适用于我们开发Flash项目,分为多个SWF进行加载)。那么Spring ActionScript对此有无支持呢?答案是肯定的,Spring ActionScript作为一个成熟的解决方案,也考虑到了这个因素,这也是Spring ActionScript在社区大受欢迎的原因。

使用Application上下文和Module上下文

假设这样一个情景,有两个上下文。一个是在主应用中创建的,另一个则是在需要延迟加载的模块中创建的。第一个我们称之为Application上下文,另一个称之为Module上下文。

现在假设Application上下文的配置如下:

  1. <objects>
  2.  
  3. <object class="com.myclasses.MyObject" id="myObject" scope="singleton"/>
  4.  
  5. <object class="com.myclasses.MyOtherObject" id="myOtherObject" scope="prototype"/>
  6.  
  7. </objects>

Module上下文的配置如下:

  1. <objects>
  2.  
  3. <object class="com.myclasses.moduleimplementations.MyOtherObject" id="myOtherObject" scope="prototype"/>
  4.  
  5. </objects>

当Module上下文创建的时候,我们设置Application上下文为它的父级(parent):

  1. var moduleContext:XMLApplicationContext = new XMLApplicationContext("module-context.xml");
  2. moduleContext.parent = applicationContext;

这样做的结果就是,当你在Application上下文中请求一个id是myOtherObject的对象,你会得到一个类型是com.myclasses.MyOtherObject的实例。然而,当你是在Module上下文中请求同一个对象,你会得到一个类型是com.myclasses.moduleimplementations.MyOtherObject的实例。

下面,我们稍微更改一下两个配置,添加一些依赖并展示如何在Module上下文中覆写这些依赖。

Application上下文的配置:

  1. <objects>
  2.  
  3. <object class="com.myclasses.MyObject" id="myObject" scope="singleton"/>
  4.  
  5. <object class="com.myclasses.MyOtherObject" id="myOtherObject" scope="prototype">
  6. <property name="dependency" ref="myDependency"/>
  7. </object>
  8.  
  9. <object class="com.dependencies.MyDependency" id="myDependency"/>
  10.  
  11. </objects>

现在从Application上下文中请求id是myOtherObject的对象,你会得到一个类型是com.myclasses.MyOtherObject的实例,和它的依赖(类型是com.dependencies.MyDependency).然后我们更改Module上下文的配置如下:

  1. <objects>
  2.  
  3. <object class="com.moduledependencies.MyDependency" id="myDependency"/>
  4.  
  5. </objects>

当我们再次从Module上下文中请求id是myOtherObject的对象,我们会得到类型是com.myclasses.MyOtherObject的实例,它的依赖则变成了类型是com.moduledependencies.MyDependency的一个实例。

注意:像这样的重写引用对象,前提条件是对象的scoped属性设置为prototype。

重写外部属性值也将遵循同样的逻辑(即更改value而不是ref),所以你是可以更改从父级的上下文中获得的属性的。

如果Application上下文中有一个外部配置的属性叫做prop1,你可以在Module上下文中引用:

  1. <objects>
  2.  
  3. <object class="com.moduleclasses.MyObjectWithAProperty" id="myObjectWithAProperty">
  4. <property name="myProperty" value="{$prop1}"/>
  5. </object>
  6.  
  7. </objects

您给予的分值: None 平均分: 10 ( 2 票)

原来对spring

原来对spring ActionScript有顾虑就是怕对模块支持不好,现在放心了。

有module的支持后,的

有module的支持后,的确会更好用
riameeting终于开始讲一些有深度的框架内容了。

感谢分享

感谢分享

发表新评论

  • 网页地址和电子邮件地址将会被自动转换为链接。
  • 行和段被自动切分。
  • 您可以使用下面的标签来高亮显示您的评论内容: <code>, <blockcode>. 可以使用"[foo]".旁边显示标签样式 "<foo>" PHP代码可以用这样的区块来包含<?php ... ?> or <% ... %>

更多格式化选项信息

验证区域
系统验证:请回答下面的问题