Spring ActionScript一些有用的小技巧
Spring ActionScript还有一些有用的小技巧,合理利用将非常有裨益于我们的项目,整理如下,欢迎大家补充:
-
Inner objects
Spring ActionScript允许你直接在属性的XML标签内部声明一个对象,而无需先在外部声明,然后用ref去获得引用。注意你可以同时应用于property 或 constructor-arg。举例如下:
- <object id="outer" class="...">
- <!-- instead of using a reference to a target object, simply define the target object inline -->
- <property name="target">
- <object class="com.example.Person"> <!-- this is the inner object -->
- <property name="name" value="Fiona Apple"/>
- <property name="age" value="25"/>
- </object>
- </property>
- </object>
-
Collections
Spring ActionScript包含了一些有用的基础的数据集合,让我们方便的归类数据,这些可用的标签包括array, array-collection , dictionary 和 vector。注意如果要使用array-collection,上下文的类型必须是FlexXMLApplicationContext,因为这个集合是Flex特有的。代码示例:
- <object id="moreComplexObject" class="example.ComplexObject">
- <property name="adminEmails">
- <dictionary>
- <entry key="administrator" value="administrator@example.org"/>
- <entry key="support" value="support@example.org"/>
- <!-- or a more verbose way of defining an entry -->
- <entry>
- <key>development</key>
- <value>development@example.org</value>
- </entry>
- </dictionary>
- </property>
- <property name="someList">
- <array>
- <value>a list element followed by a reference</value>
- <value><ref object="myOtherObject" /></value>
- </array>
- </property>
- <!-- Only use this in a Flex based application -->
- <property name="someOtherList">
- <array-collection>
- <value>a list element followed by a reference</value>
- <value><ref object="myOtherObject" /></value>
- </array-collection>
- </property>
- <!-- Only use this in an application made for Flash player 10 and higher -->
- <property name="vectorProperty">
- <vector type="String">
- <value>string1</value>
- <value>string2</value>
- <value>string3</value>
- <value>string4</value>
- </vector>
- </property>
- </object>
-
使用this
Spring ActionScript提供了this的关键字可以直接让你在配置中使用,它指向当前的上下文。这个特性是非常有用的,因为很多情况下你配置的实例,需要获得Spring ActionScript上下文的引用,你可能会直接从父级的对象去获取这个引用,但这样就破坏了解耦的原则。而使用this,你可以直接在配置的XML中将上下文传入,这样是不是优雅很多?
- <method-invocation name="someMethod">
- <arg ref="this"/>
- </method-invocation>
-
延迟初始化对象
有时我们不希望一个对象在上下文被初始化的同时也被初始化,比如对象特别多的情况下,基于性能的考虑,这时可以使用延迟初始化,举例如下:
- <object id="lazy" class="com.foo.ExpensiveToCreateObject" lazy-init="true"/>
- <object name="not.lazy" class="com.foo.AnotherObject"/>
-
使用Meta的自动装配
Spring ActionScript对于自动装配有非常好的支持,包括byName,byType等各种模式,这里我们只介绍基于Metadata的自动装配,其它方式请参考官方文档(http://www.springactionscript.org/docs/reference/html/container-documentation.html)。
首先要保证在XML配置中加入了自动装配的处理器:
- <object id="autowiringStageProcessor" class="org.springextensions.actionscript.stage.DefaultAutowiringStageProcessor"/>
简单的属性装配可以像下面一样:
- public class ExampleComponent extends UIComponent {
- [Autowired]
- public var modelInstance:IModelLocator;
- public function ExampleComponent() {
- super();
- }
- }
如果你希望按照名称装配,则改为:
- public class ExampleComponent extends UIComponent {
- [Autowired(mode='byName')]
- public var modelInstance:IModelLocator;
- public function ExampleComponent() {
- super();
- }
- }
当然你也可以指定到配置中一个对象:
- public class ExampleComponent extends UIComponent {
- [Autowired(name='ModelLocator')]
- public var modelInstance:IModelLocator;
- public function ExampleComponent() {
- super();
- }
- }
-
标注必须注入的属性
你可以为需要注入的属性标记[Required],来保证它会在XML配置中被注入:
- [Required]
- public var myProperty:Type;
如果你这样标记了,但是没有在XML配置中找到它的依赖,那么就会抛出IllegalArgumentError的错误。要使用这个特性,你要包含下面的对象:
- <object class="org.springextensions.actionscript.ioc.factory.config.RequiredMetadataObjectPostProcessor"/>
-
将某一个对象的属性注入其它对象
有时候你会有这样的需求,即你要为某个对象的属性配置的依赖不是另一个对象,而是另一个对象的属性,那怎么办呢?可以使用FieldRetrievingFactoryObject
- <object id="trafficEventManager" class="com.myclasses.TrafficEventManager">
- <constructor-arg>
- <object class="org.springextensions.actionscript.ioc.factory.config.FieldRetrievingFactoryObject">
- <property name="targetObject" ref="modelLocator" />
- <property name="targetField" value="trafficEventTypes" />
- </object>
- </constructor-arg>
- </object>
同时它也支持静态属性:
- <object class="org.springextensions.actionscript.ioc.factory.config.FieldRetrievingFactoryObject">
- <property name="staticField" value="CURRENT_VERSION"/>
- <property name="targetClass" value="mx.core.FlexVersion/>
- </object>
-
如何在编写配置XML的时候使用语法提示?
首先你需要为你的FlashBuilder安装一个XML编辑器插件,比如XMLBody。然后创建一个XML文件,并使用下面的代码作为根标签:
- <objects
- xmlns="http://www.springactionscript.org/schema/objects"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springactionscript.org/schema/objects
- http://www.springactionscript.org/schema/objects/spring-actionscript-objects-1.0.xsd">
- </objects>
熟悉XML的朋友就会发现,关键之处在于我们通过xsi:schemaLocation指定了XSD的位置,编辑器就知道该如何规范这个XML的编写。试着开始编写object,看到代码提示了吧
未完待续...

.gif)
.gif)




.gif)
发表新评论