Flex作为RIA的一支,提供了非常丰富多彩的客户端实现,并且编写起来非常灵活.Java提供了强大的功能实现,与Flex结合也让Java开发穿上了华丽外衣.
BlazeDS 是LCDS的一个衍生版 ,为Flex和Java的交互提供通信桥梁 .BlazeDS起到的作用并没有多么难理解,和SSH框架内部机制类似的是,都是提供了一种反射服务.比如,在Spring中我们使用IoC特性,这些都是依靠的Java底层的反射机制.
简单说Flex / BlazeDS /Java ,三者之间,BlazeDS提供一种映射,使得Flex前端编码能够使用服务端的Java类.
remoting-config.xml文件:
- <span style="font-family:Comic Sans MS;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
- <service id="remoting-service"
- class="flex.messaging.services.RemotingService">
- <adapters>
- <!--Java对象 的适配器-->
- <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
- </adapters>
- <default-channels>
- <channel ref="my-amf"/>
- </default-channels>
- <destination id="userService">
- <properties>
- <source>com.java.Service.UserService</source>
- </properties>
- </destination>
- </service>
- </span>
在Flex前端,通过使用Flex提供的RemoteObject关键字,来获取映射中的Java对象,(关于Flex内部的一些有意思的机制,还是要好好细心学习的,这方面了解不多,就不卖弄了.)
- <span style="font-family:Comic Sans MS;font-size:18px;"><fx:Declarations>
- <mx:RemoteObject destination="userService" result="processResult(event)"
- id="us" fault="Alert.show(event.fault.message.toString())"
- endpoint="http://localhost:8080/BlazeDS_Java_Flex/messagebroker/amf">
- </mx:RemoteObject>
- </fx:Declarations>
- </span>
现在,我们的Flex前端就已经能够调用服务端的Java方法了.
在最初接触Flex与Java交互时,都是需要做一个传参示例.主要是传自定义类型参数(user:Users)和普通数据类型参数(str:String).
这里,大家要注意,我们自定义类型(Java类) ,要在Flex端进行OO编程,需要拆箱装箱,那么就需要Flex端能够识别Java类,这里就要提到Flex内部的一种映射机制.
创建一个ActionScript类,如下
- <span style="font-family:Comic Sans MS;font-size:18px;">package com.flex.vo
- {
- [Bindable]
- [RemoteClass(alias="com.java.entity.Users")]
- public class Users
- {
- //注意,需要写好构造函数
- public function Users()
- {
- }
- private var _name:String;
- private var _password:String;
- public function get name():String
- {
- return _name;
- }
- public function set name(value:String):void
- {
- _name = value;
- }
- public function get password():String
- {
- return _password;
- }
- public function set password(value:String):void
- {
- _password = value;
- }
- }
- }</span>
这样经过Flex的内部映射,在Java端和Flex端,我们有了对应的一个实体类Users类,那么我们就可以OO编程,在Flex前端,使用AS的实体类进行装箱,然后做参传递给Java类,这样就能够完成了二者之间的自定义数据类型参数的传递.
框架应用都是浮云,底层提供的反射机制是王道啊.
不管你信不信,反正我是信了.
原文链接:http://blog.csdn.net/lfsfxy9/article/details/6692854
【编辑推荐】