Flex快速入门系列之三:Parsley框架简单使用(IOC以及message机制)

来源:互联网 发布:天猫美工外包价格 编辑:程序博客网 时间:2024/05/01 04:50

       Parsley是一个开源的IOC容器也是一个完全解耦的基于消息中心机制的消息框架,它还为我们提供了一些很有用的工具类。Favous平台即将使用parsley的架构,来配置所有的bean,业务系统以后也会逐渐转向parsley框架,以插件的形式架构,因此在此有必要介绍一下这个框架的基本功能的使用。

         Faovus系统不是一个web应用而是一个基于桌面的flexAIR应用,开发完发布后类似一个exe的桌面应用。所以在此要创建一个flex桌面应用,然后添加parsley的支持,做一个简单的例子,配置actionscript的类,并发送消息实现一个简单的消息接受功能。Parsley官网:http://www.spicefactory.org/parsley/,有详细的文档以及API以及框架swc包和源码下载。

前提说明:parsley当前主要使用版本是2.4.0以及2.4.1。Favous平台即将使用的就是2.4.1的,下载地址:http://www.spicefactory.org/parsley/download.php。下载完成后,进入目录:release,你会发现有一个parsley-flex4-2.4.1.swc,它就是我们用到的核心包,在进入spicelib-3.0目录,你会发现有很多个parsley-flex4-2.4.1.swc所依赖的包,根据名字已经可以大概知道各个包的作用了,一般常用到的就是这几个:legacy-spicelib-util-2.5.0.swc,spicelib-reflect-3.0.0.swc,spicelib-util-3.0.0.swc,spicelib-xml-mapper-3.0.0.swc;我们的项目就是要用上面5个。根据需要你可能还会用到parsley根目录下lib目录中的一些swc包。

         你可以直接导入samples中的helloworld到flashbuilder中测试运行,但是在此我准备详细解释如何创建一个例子,其中包含了消息机制的其它功能。

第一步:创建应用并添加需要的swc包以及配置文件

         在Flashbuilder中创建AIR桌面应用,添加上述swc包;parsley支持两种类型配置文件,mxml和xml,此处主要介绍mxml,xml同理配置。进入parsley解压目录下的samples\helloworld\src\HelloWorldConfig.mxml,复制到项目的src根目录下修改名字为parsleyConfig.mxml,删除配置保留如下结构:

<?xmlversion="1.0" encoding="utf-8"?>

<Objects

         xmlns:fx="http://ns.adobe.com/mxml/2009"

         xmlns="http://www.spicefactory.org/parsley"

         >

         <fx:Declarations>

         </fx:Declarations>

</Objects>

第二步:创建DAO与service,并在service中注入DAO,添加配置到配置文件。

1.创建UserDao类

packagecom.mangocity.dao

{

         public class UserDao

         {

                   public function UserDao()

                   {}

                   public functioncheckUser(user:String, passwd:String):Boolean{

                            if(user =="hello"){

                                     returntrue;

                            }

                            return false;

                   }

         }

}

2.创建Service继承自ILoginService,它只包含了一个login方法。

packagecom.mangocity.service

{

         import com.mangocity.dao.UserDao;

         import com.mangocity.event.LoginEvent;

         import flash.events.EventDispatcher;

         import flash.events.IEventDispatcher;

         public class LoginServiceImplimplements ILoginService

         {

                   //添加一个parsley可以识别的注解,用来直接派发一个消息出去

                   [MessageDispatcher]

                   public var dispatch:Function;

                   public var userDao:UserDao;

                   public functionlogin(user:String, passwd:String):void

                   {

                            var evt:LoginEvent;

                            if(userDao.checkUser(user,passwd)){

                                     evt = newLoginEvent(LoginEvent.LOGINSUCCESS);

                                     evt.msg="hellosuccessful!!";

                            }else{

                                     evt = newLoginEvent(LoginEvent.LOGINFAIL);

                                     evt.msg="sorryfail to login";

                            }

                            //派发LoginEvent事件

                            dispatch(evt);

                   }

         }

}

3.创建一个自定义事件类,主要是在登录判断有了结果之后会派发这样的事件出去:

packagecom.mangocity.event

{

         import flash.events.Event;

         public class LoginEvent extends Event

         {

                   private var message:String;

                   public function setmsg(msg:String):void{

                            this.message=msg;

                   }

                   public function getmsg():String{

                            return message;

                   }

                   public functionLoginEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)

                   {

                            super(type, bubbles,cancelable);

                   }

                   public static constLOGINSUCCESS:String = "loginSuccess";

                   public static constLOGINFAIL:String = "loginFail";

         }

}

4.添加配置信息,就是IOC注入的配置,非常类似spring的配置文件信息:

<fx:Declarations>

                   <Objecttype="com.mangocity.service.LoginServiceImpl"id="loginService" lazy="true">

                            <Propertyname="userDao" idRef="userDao"/>

                   </Object>

                   <Objecttype="com.mangocity.dao.UserDao" id="userDao"lazy="true" />

         </fx:Declarations>

第三步:在工程的主运行类也就是:ParsleyTest中进行设置

1.添加一个命名空间:xmlns:sf=http://www.spicefactory.org/parsley

2.用标签方式声明一个parsley的context:

<fx:Declarations>

                   <sf:ContextBuilderid="b" domain="{ApplicationDomain.currentDomain}">

                            <sf:FlexConfigtype="parsleyConfig"/>

                   </sf:ContextBuilder>

                   <sf:Configure/>

         </fx:Declarations>

type指定的是我们声明的配置文件的mxml类,<sf:Configure/>指明了这个类将会被parsley的消息框架监控,然后如果有它需要的消息就会被发送给它。

第四步:创建发送消息与接收消息的类(mxml组件用于显示):

1.发送消息的类,可以看到我们可以用[Inject(id="loginService")]的形式来注入一个service类,就像spring的注解一样的方式,然后在调用了login之后就会调用其中的dispatch(evt);派发出一个event。

<?xmlversion="1.0" encoding="utf-8"?>

<s:Panelxmlns:fx="http://ns.adobe.com/mxml/2009"

                    xmlns:s="library://ns.adobe.com/flex/spark"

                    xmlns:mx="library://ns.adobe.com/flex/mx"

                    xmlns:parsley="http://www.spicefactory.org/parsley"

                    width="256" height="154"title="点击发送消息">

         <s:layout>

                   <s:BasicLayout/>

         </s:layout>

         <fx:Declarations>

                   <parsley:Configure/>

         </fx:Declarations>

         <fx:Script>

                   <![CDATA[

                            importcom.mangocity.service.ILoginService;

                            [Inject(id="loginService")]

                            public varservice:ILoginService;

                            private functiononLoginClick():void{

                                     this.service.login(uname.text,'******');

                            }

                   ]]>

         </fx:Script>

         <s:Button id="btnlogin"label="单击登录" click="onLoginClick()" x="68"y="52"/>

         <s:Label x="23"y="16" text="输入用户" />

         <s:TextInput x="79"y="10" id="uname"/>

</s:Panel>

2.接收消息的类:使用[MessageHandler(selector="loginFail")]注解,同时制定selector来说明是接收那个类型的事件或消息,类似一个选择器。

<?xmlversion="1.0" encoding="utf-8"?>

<s:Panelxmlns:fx="http://ns.adobe.com/mxml/2009"

                    xmlns:s="library://ns.adobe.com/flex/spark"

                    xmlns:mx="library://ns.adobe.com/flex/mx"

                    xmlns:parsley="http://www.spicefactory.org/parsley"

                    width="238" height="212"title="获取发送过来的消息">

         <s:layout>

                   <s:BasicLayout/>

         </s:layout>

         <fx:Declarations>

                   <parsley:Configure/>

         </fx:Declarations>

         <fx:Script>

                   <![CDATA[

                            importcom.mangocity.event.LoginEvent;

                            importmx.controls.Alert;

                            [MessageHandler(selector="loginSuccess")]

                            public functiononLoginSuccesful(evt:LoginEvent):void{

                                     Alert.show("登录成功");

                                     ta.text="message:"+evt.msg;

                            }

                            //添加如下注解就会自动去根据类型来接受对应的消息

                            [MessageHandler(selector="loginFail")]

                            public functiononLoginFail(evt:LoginEvent):void{

                                     Alert.show("登录失败");

                                     ta.text="message"+  ":" + evt.msg;

                            }

                   ]]>

         </fx:Script>

         <s:TextArea x="11"y="44" text="" height="77" id="ta"/>

         <mx:DateField x="14"y="124"/>

         <s:Label x="11"y="10" text="等待接收"/>

</s:Panel>

第五步:在主类中添加这两个组件。

<view:sender x="36"y="48"/>

<view:receiver x="417"y="48"/>

然后输入hello单击登陆,就会在接收消息的框中收到发送过来的消息。

总结:本篇主要介绍parsley的消息机制与IOC注入的方法,给大家对于这个框架一个初步的认识,更多的信息还请参考:http://www.spicefactory.org/parsley/docs/2.4/manual/。本节的项目文件如下

 

实例的下载地址:

http://download.csdn.net/detail/zhaoshansanxia/4115309

原创粉丝点击