Flex前端與Java服務(wù)端交互,反射機(jī)制挑大旗
Flex作為RIA的一支,提供了非常豐富多彩的客戶端實(shí)現(xiàn),并且編寫(xiě)起來(lái)非常靈活.Java提供了強(qiáng)大的功能實(shí)現(xiàn),與Flex結(jié)合也讓Java開(kāi)發(fā)穿上了華麗外衣.
BlazeDS 是LCDS的一個(gè)衍生版 ,為Flex和Java的交互提供通信橋梁 .BlazeDS起到的作用并沒(méi)有多么難理解,和SSH框架內(nèi)部機(jī)制類似的是,都是提供了一種反射服務(wù).比如,在Spring中我們使用IoC特性,這些都是依靠的Java底層的反射機(jī)制.
簡(jiǎn)單說(shuō)Flex / BlazeDS /Java ,三者之間,BlazeDS提供一種映射,使得Flex前端編碼能夠使用服務(wù)端的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對(duì)象 的適配器-->
- <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前端,通過(guò)使用Flex提供的RemoteObject關(guān)鍵字,來(lái)獲取映射中的Java對(duì)象,(關(guān)于Flex內(nèi)部的一些有意思的機(jī)制,還是要好好細(xì)心學(xué)習(xí)的,這方面了解不多,就不賣弄了.)
- <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>
現(xiàn)在,我們的Flex前端就已經(jīng)能夠調(diào)用服務(wù)端的Java方法了.
在最初接觸Flex與Java交互時(shí),都是需要做一個(gè)傳參示例.主要是傳自定義類型參數(shù)(user:Users)和普通數(shù)據(jù)類型參數(shù)(str:String).
這里,大家要注意,我們自定義類型(Java類) ,要在Flex端進(jìn)行OO編程,需要拆箱裝箱,那么就需要Flex端能夠識(shí)別Java類,這里就要提到Flex內(nèi)部的一種映射機(jī)制.
創(chuàng)建一個(gè)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
- {
- //注意,需要寫(xiě)好構(gòu)造函數(shù)
- 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>
這樣經(jīng)過(guò)Flex的內(nèi)部映射,在Java端和Flex端,我們有了對(duì)應(yīng)的一個(gè)實(shí)體類Users類,那么我們就可以O(shè)O編程,在Flex前端,使用AS的實(shí)體類進(jìn)行裝箱,然后做參傳遞給Java類,這樣就能夠完成了二者之間的自定義數(shù)據(jù)類型參數(shù)的傳遞.
框架應(yīng)用都是浮云,底層提供的反射機(jī)制是王道啊.
不管你信不信,反正我是信了.
原文鏈接:http://blog.csdn.net/lfsfxy9/article/details/6692854
【編輯推薦】