原文地址:http://blog.chinaunix.net/uid-122937-id-143055.html
配置和初始化 Parsley 框架通常包括以下步骤:
-
第 1 步: 告诉 IOC 容器哪些类需要被它管理. 这可以使用 MXML, XML 文件或者 ActionScript 来做.这三种机制会在跟着下来的章节中说明.
-
第 2 步:配置容器的服务,如:依赖注入或者每个单独类的消息 .这可以在第 1 步中你选择的配置机制中完成 (例如:使用 MXML 或者 XML 配置标签) 或者 - 通常情况下在类中使用 AS3 Metadata 标签.
-
第 3 步: 初始化 IOC 容器(通常在程序开始时). 在 Parsley 2 中通常只需一行代码. 可以查看下面例子.
3.1 使用 AS3 Metadata 进行配置
AS3 Metadata 标签可以用来配置像依赖注入或者消息等服务. 它们可以放到由 Parsley管理的任何类中去.使用 metadata 标签的配置可以与 XML 或者 MXML 的配置相结合. 几乎每个 metadata 标签每有与它相对应的 MXML 和 XML 配置标签. 为了避免冲突, MXML 和 XML 配置会优于 Metadata 配置, 因此你可以覆盖 metadata 配置而不必对类的代码进行修改.
每个 metadata 标签和它们的属性会在相应的章节的相关例子中说明:
3.2 MXML 配置
这种配置只能被 Flex 程序使用. 其它的配置在 Flex 和 Flash 程序中都可用.
假定你要配置以下两个类:
package com.bookstore.service {
class LoginServiceImpl implements LoginService {
public var timeout:int;
public function login (username:String, password:String) : void {
// execute service
}
}
}
package com.bookstore.actions {
class LoginAction {
[Inject]
public var service:LoginService
[MessageHandler]
public function handleLoginEvent (event:LoginEvent) : void {
service.login(event.username, event.password);
}
}
}
你可以见到使用 metadata 已经配置了几个功能. 查看第4章依赖注入和第5章消息系统了解这些功能的细节.
MXML 配置文件
我们需要告诉容器管理这些类并创建以下 MXML file:
<mx:Object
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:services="com.bookstore.services.*"
xmlns:actions="com.bookstore.actions.*">
<services:LoginServiceImpl timeout="3000"/>
<actions:LoginAction/>
</mx:Object>
请注意我们并不需要导入 Parsley . 只需要在 MXML 中添加普通的 object 标签. 除了 metadata 标签你还可以使用 MXML 标签进行其它配置 , 比如上面例子的 timeout 值.
框架的初始化
最后你需要初始化容器. 假设你将配置保存在 BookstoreConfig.mxml, 你可以使用以下命令将它初始化:
FlexContextBuilder.build(BookStoreConfig);
在许多程序中,以上的一行代码便是你唯一直接使用的 Parsley API.你可以在某些类的方法上添加 [PostConstruct] 标签让程序开始时执行这些方法. 查看第6.5章Context 周期了解细节.
理论上你也可以使用 Parsley 的 API:
var context:Context = FlexContextBuilder.build(BookStoreConfig);
var initializer:BookStoreInitializer = context.getObjectByType(BookStoreInitializer) as BookStoreInitializer;
initializer.execute();
但这种用法并不推荐使用. 在一般的程序中都无需直接使用 Parsley 的 API. 只有在 Parsley 基础创建你自己的框架时才使用.
使用 Parsleys MXML 标签
以上的 MXML 配置还可以使用 Parsley 标签来代替 object 标签:
<mx:Object
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="http://www.spicefactory.org/parsley">
<mx:Script>
<![CDATA[
import com.bookstore.services.*;
import com.bookstore.actions.*;
]]>
</mx:Script>
<Object type="{LoginServiceImpl}">
<Property name="timeout" value="3000"/>
</Object>
<Object type="{LoginAction}"/>
</mx:Object>
使用这些特殊的标签比普通的标签有其它的功能. 两种方式都有优缺点:
普通 MXML 标签的优点:
-
简单、可直接使用.
-
无需知道 Parsley 的配置标签.
-
编译器会检查属性值的类型.
Parsley MXML 标签的优点:
-
允许使用构造器注入 . 从封装性方面来看,这是依赖注入的最干净的方式. 使用普通标签时你不能使用构造器注入的方式,因为在那种情况下 MXML 编译器生成了对象的创建代码并且 Parsley 只能在对象实例化后才得到该对象. 当使用普通标签时,你的类需要一个没有参数的构造方法.
-
允许定义对象为 lazy的 (
<Object lazy="true" type="..."/>
) ,也就是说在你第一次使用该对象之前它不会被初始化和配置.
-
允许将一个对象配置成非单例的(
<Object singleton="false" type="..."/>
). 也就是说,每次从容器取这个对象或者将这个对象注入其它对象时,容器都会创建一个新的实例.
-
允许使用自定义标签. Parsley 2 是非常容易扩展的. 你可以使用一个类来创建一个自定义的扩展,然后将它作为自定义的 metadata 标签, MXML 或者 XML. 你可以查看 第11章扩展本框架中的例子.
3.3 XML 配置文件
在以下情况中,外部 XML 文件是 MXML 之外的另一个合适的选择:
-
你的配置经常发生改变而你又不想再进行编译.
-
配置文件可以被不懂编程的人进行修改.
-
你没有在使用 Flex.
当然你也可以在某部分配置中使用 XML 文件而仍然使用 MXML 配置来注入你的核心服务. 查看第3.5章将多个配置机制整合了解细节.
上面例子的 MXML 配置也可以配置成以下的 XML 配置:
<objects
xmlns="http://www.spicefactory.org/parsley"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.spicefactory.org/parsley
http://www.spicefactory.org/parsley/schema/2.0/parsley-core.xsd"
>
<object type="com.bookstore.services.LoginServiceImpl">
<property name="timeout" value="3000"/>
</object>
<object type="com.bookstore.services.LoginServiceImpl"/>
</objects>
一般的 XML 配置跟使用 Parsley MXML 标签的 MXML 配置非常类似. 在底层它们实现的作用是一样的.唯一的不同是 XML 配置需要使用 XML 规范,标签不可以大写并且属性名需要使用-,如: targetProperty 要写成target-property .
假定你的配置文件是config.xml
,初始化还是使用一行代码:
XmlContextBuilder.build("config.xml");
编译在 XML 中配置的类
你需要注意的是:与在 MXML 中配置的类不同,XML 中配置的某些类如果没有被使用的话,它不会被编译到你的 SWC 或者 SWF 文件.
解决这个问题有三种方法(即:你想要把没有使用的类也要编译到 SWC 或者 SWF 文件):
-
在你的代码中添加这些类的引用,即使你并不需要它.
-
如果你想将这些类作为库使用, 将它们编译到一个 SWC (使用
compc
你可以将整个源代码文件夹包含到 SWC 文件) 然后使用mxmlc
编译器中的-include-libraries
选项将整个 SWC 包含到你的 SWF 文件.
-
你可以使用
mxmlc
编译器的-includes
选项来包含某些类.
3.4 ActionScript 配置
如果你只认识 Flex IOC 容器的话,你可能不熟悉这种方式. 它跟 Java 的 Spring 框架中的 JavaConfig 有点相似. 它允许你使用代码的方式来创建要给 Parsley 管理的对象. 我们使用之前例子的那两个类并将它们添加到 IOC 容器中:
package com.bookstore.config {
class BookStoreConfig {
public const action:LoginAction = new LoginAction();
public function get service () : LoginServiceImpl {
var service:LoginServiceImpl = new LoginServiceImpl();
service.timeout = 3000;
return service;
}
}
}
我们使用了 ActionScript 来设置 timeout 属性. 无论你使用var
,const
或者一个 getter 函数来声明对象,这些对象都会被添加到 IOC 容器中.
初始化还是只用一行代码:
ActionScriptContextBuilder.build(BookStoreConfig);
这个配置模式允许你增加 metadata 标签:
[ObjectDefinition(singleton="false")]
public function get service () : LoginServiceImpl {
var service:LoginServiceImpl = new LoginServiceImpl();
service.timeout = 3000;
return service;
}
在上面的例子中,每次这个对象被请求时,容器都会调用 getter 函数. 默认的 singleton 属性是true
, 所以如果没有 metadata 标签的话 Parsley 只调用这个方法一次并把这个实例缓存起来,对于所有的注入都是重复使用同一个实例.
3.5 将多个配置机制整合
自Version2.2后,配置管理机制允许指定实例在运行期间,作为容器的一部分:
<parsley:ContextBuilder>
<parsley:FlexConfig type="{ServiceConfig}"/>
<parsley:FlexConfig type="{ControllerConfig}"/>
<parsley:XmlConfig file="logging.xml"/>
<parsley:RuntimeConfig instances="{[instance1, instance2]}"/>
</parsley:ContextBuilder>
如果你需要指定ID,也可标注子标签:
<parsley:ContextBuilder>
<parsley:FlexConfig type="{ServiceConfig}"/>
<parsley:FlexConfig type="{ControllerConfig}"/>
<parsley:XmlConfig file="logging.xml"/>
<parsley:RuntimeConfig>
<parsley:Instance id="obj1" instance="{instance1}"/>
<parsley:Instance id="obj2" instance="{instance2}"/>
<parsley:Instance id="obj3" instance="{instance3}"/>
</parsley:RuntimeConfig>
</parsley:ContextBuilder>
在RuntimeConfig标签中添加的对象与之后添加的DynamicObjects不同之处在于,前面的作为根对象,可注入到其它对象中,因为它们在上下文构建时已指定。
你甚至可以使用普通的<Object>为内部标签
<parsley:ContextBuilder>
<parsley:FlexConfig type="{ServiceConfig}"/>
<parsley:FlexConfig type="{ControllerConfig}"/>
<parsley:XmlConfig file="logging.xml"/>
<parsley:RuntimeConfig>
<parsley:Instance id="obj1" instance="{instance1}"/>
<parsley:Instance id="obj2" instance="{instance2}"/>
<parsley:Object id="obj3" type="{LoginInterceptor}"/>
<parsley:MessageInterceptor method="intercept" type="{LoginEvent}"/>
</parsley:Object>
</parsley:RuntimeConfig>
</parsley:ContextBuilder>
你也可以用编码方式进行配置:
var rcp:RuntimeConfigurationProcessor = new RuntimeConfigurationProcessor();
rcp.addInstance(instance1, "id1");
rcp.addInstance(instance2, "id2");
rcp.addClass(MyClass, "id3");
var builder:CompositeContextBuilder = new DefaultCompositeContextBuilder(viewRoot);
FlexContextBuilder.merge(MainConfig, builder);
builder.addProcessor(rcp);
builder.build();
3.6 混合多个配置方式
虽然你可能在大多数程序中偏好于只用一个配置, 你不必一定要这样做. 你可以将本章所讲的配置进行组合使用.
对于一种配置,你也可以将它分成几个文件. 然后使用buildAll
方法:
FlexContextBuilder.buildAll([BookStoreServices, BookStoreActions]);
XmlContextBuilder.buildAll(["services.xml", "actions.xml"]);
ActionScriptContextBuilder.buildAll([BookStoreServices, BookStoreActions]);
你也可以使用CompositeContextBuilder
类将它们合并在一起:
var builder:CompositeContextBuilder = new CompositeContextBuilder();
FlexContextBuilder.merge(BookStoreConfig, builder);
XmlContextBuilder.merge("logging.xml", builder);
builder.build();
这种方式也是很简单的: 你只需创建一个CompisiteContextBuilder
类的实例并把它放到各个context builder 类的merge
方法中.
以上所有的例子最终的结果都是一个 Parsley Context. 无论你有多少个配置文件,结果都是一样的.
对于大型和复杂的程序,你想要创建模块化 Contexts, 即多个配置不是合并到一个 Context, 以便它们可以根据需要进行加载和缷载. 对于模块化的程序你可以阅读第8章使用
Flex Modules和第6.4章Modular Contexts.
最后,如果你想要创建你自己的配置模式并将它与现有的配置方式无缝地结合的话, 你可以创建ObjectDefinitionBuilder
接口的实例并将它们传入到CompositeContextBuilder.addBuilder
. 查看第11章扩展本框架了解细节
.
分享到:
相关推荐
parsley loc框架 flash flex 通用
不折不扣的parsley官方中文翻译文档 资源宝贵 假一赔十 为大家更方便的学习带来福音
parsley框架的入门源码 比官方文档中的例子更进一步 更深入一些
flex actionscript 开发 对flex mxml技术的掌握 对java数据库后台框架 spring+hibernate ejb 3.0+jpa 等等后台技术
Parsley,是一款强大的JavaScript表单验证插件,可以帮助你只使用简单的配置即可实现表单验证功能,这完全基于它的强大DOM-API。 主要特性: 基于超棒的用户体验 超级方便配置 超轻量级(压缩后12K),支持...
若你不知道parsley,但您一定听过Cairngorm、Mate、PureMVC、Swiz或SpringAcitonScript,只要听说过其中之一就好了,因为parsley也是他们行列中的一员,是Adobe项目组今年7月份推荐的一个灵活的flex框架!
Parsley框架开发的Hello World实例源代码,完成客户端登录功能,需要的朋友可以下载参考,用于学习Parsley框架入门
非常值得参考的材料。在学习cairgorm3的过程中,发现此框架还基于parsley应用架构搭建,于是找到parsley材料共享。
ActionScript 中著名的IOC框架Parsley 3 帮助文档 类似ActionScript Spring,比Spring强大完善。 Parsley is an Application Framework for Flex and Flash Applications built upon an IOC Container and ...
parelsy2.3中文文档 adobe 咨询团队推荐的flex 框架,看完该文档,对parsly 框架将有清晰的认识
常用Flex IOC框架比较分析示例代码,有Spring ActionScript、 Parsley、Flicc和Swiz这几个框架
请在提问,并确保包含parsley.js标记。 请提供一个示例,例如从此贡献请参阅整合方式创建与其他框架的集成,作为单独的Github存储库,并发送拉取请求以包含在此处。 一些集成是 安装开发环境并运行测试第一次:安装...
#Parsley Parsley 是 Flex 应用程序的应用程序框架。 我选择欧芹是因为它的依赖注入和控制性质的逆向。 这有助于以更好的方式实现表示模型架构。 ##Dependency Injection and Inverse of Control 所有依赖对象都...
这是一个我个人做的集集体加载类 tips自适应 和parsley框架与一体的小demo 有兴趣的人可以看下
欢迎来到欧芹Parsley是一项开放源代码计划,旨在构建低成本3D扫描仪... 在引擎盖下,Parsley是用于快速开发机器视觉尤其是3d视觉算法的框架。 通过灵活且简单的加载项系统,可以扩展Parsley。 预定义的接口允许开发算法
控制反转(inversion of Control,IOC),也称为依赖注入(Dependency injection,DI),在过去几年中已经成为流行的软件设计模式,从而导致许多Flex开发者投入到此类框架的探索,其中就包括Spring ActionScript,Parsley,...
欧芹核心 Parsley是一个用AS3编写的Flex / Flash / AIR应用程序的应用程序框架。 自2012年2月起停产。 您可以在阅读最终版本的手册
安装克隆存储库(或从GitHub下载zip) git clone https://github.com/jpbrnz/materialize-parsley.git Materializecd Materialize输入以下内容以安装软件包依赖项npm installbower install在开发时进行审查,更新...
欧芹文档 Parsley是一个用AS3编写的Flex / Flash / AIR应用程序的应用程序框架。 自2012年2月起停产。 您可以在阅读最终版本的手册
在没有框架的情况下构建模块化的单页Web应用程序 当前,随着越来越多JavaScript框架和库的涌现,本演讲探讨了使用现代JavaScript编程实践通过专用库而不是像AngularJS这样的所有框架来构建高度... Parsley-最终JavaSc