`
WaterSugar
  • 浏览: 94305 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

BlazeDS与Spring结合的工厂类分析

    博客分类:
  • Flex
阅读更多

  《BlazeDS开发指南》的第十六章介绍了BlazeDS的一种扩展方法——通过工厂类,可以自定义出各种控件以满足实际应用中的需求,在这章中给出了一个与Spring结合的方法,下面先给出具体代码,然后再详细分析一下,个人拙见,如有错误,希望指出,具体代码工程见附件,其中包括一个spring-flex.jar的包,在实际应用中可以直接拷贝到类路径中。

 

public class SpringFactory implements FlexFactory
{
  //工厂源配置名称,在flex配置文件中用到。
  private static final String SOURCE = "source";

  //该方法用于初始化该工厂,会在配置文件中自动调用。
  @Override
  public void initialize(String id, ConfigMap configMap)
  {

  }

  //该方法在一个destination被实例化时调用。
  @Override
  public FactoryInstance createFactoryInstance(String id, ConfigMap properties)
  {
    SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);
    instance.setSource(properties.getPropertyAsString(SOURCE, "source"));
    return instance;
  }

  //返回一个指定source和property的工厂实例,该方法会在每次服务请求时自动调用。
  @Override
  public Object lookup(FactoryInstance inst)
  {
    SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
    return factoryInstance.lookup();
  }

  class SpringFactoryInstance extends FactoryInstance
  {
    //构造函数。
    SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties)
    {
      super(factory, id, properties);
    }

    //由Servlet容器中获取上下文内容(context),然后根据配置源获取Spring中创建的Bean。
    @Override
    public Object lookup()
    {
      ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
      String beanName = getSource(); //配置文件中声明的源(也即一个bean的名字)。

      try
      {
        return appContext.getBean(beanName); //返回Spring中创建的bean。
      }
      catch(NoSuchBeanDefinitionException nexc) //没有找到指定的bean。
      {
        ServiceException e = new ServiceException();
        String msg = "Spring service named '" + beanName + "' does not exist.";
        e.setMessage(msg);
        e.setRootCause(nexc);
        e.setDetails(msg);
        e.setCode("Spring.Processing");
        throw e;
      }
      catch(BeansException bexc) //创建bean出错。
      {
        ServiceException e = new ServiceException();
        String msg = "Unable to create Spring service named '" + beanName + "'.";
        e.setMessage(msg);
        e.setRootCause(bexc);
        e.setDetails(msg);
        e.setCode("Spring.Processing");
        throw e;
      }
    }

    @Override
    public String toString()
    {
      return "SpringFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope() + ".";
    }
  }
}

 

  (1)在实际应用中,我们首先在BlazeDS的配置文件services-config.xml中定义一个工厂,代码如下:

<factories>
  <factory id="spring" class="org.springflex.factories.SpringFactory" />
</factories>

 

  (2)然后,在该Web应用的配置文件web.xml中添加如下定义,启用Spring的支持:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-vale>
<context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 

 

  (3)接着,我们要在Spring的配置文件applicationContext.xml中定义我们的Bean,如下:

<beans>
  <bean name="someSpringBean" class="org.springflex.SomeBean" />
</beans>

   注意上面的bean名称someSpringBean,会在下面用到。

 

  (4)最后,在BlazeDS的配置文件remoting-config.xml中定义我们的Destination,其中通过factory和source把BlazeDS和Spring相结合起来了,如下:

<destination id="someDestination">
  <properties>
    <factory>spring</factory>
    <source>someSpringBean</source>
  </properties>
</destination>

 

  通过以上步骤,已经把Spring和BlazeDS结合起来了,当我们在Flex客户端调用服务端的someDestination时,因为该Destination中有一个factory——spring,所以转交给org.springflex.factories.SpringFactory处理,而在SpringFactoryInstance类的lookup方法中,先获得该Servlet的上下文环境,再获取该Destination的source,而该source正是在Spring中定义的Bean名称,所以,最后通过获取该Bean来调用org.springflex.SomeBean,达到了最终调用的目的。

 

  附件:SpringFactory.rar(我是在jdk-1.6.u7下编译的)

分享到:
评论
14 楼 wyblanbingyang 2012-08-17  
源码能发给我吗?特别是spring-flex.jar,邮箱是wang.yongbiao@neusoft.com,万分感激
13 楼 WaterSugar 2009-02-23  
zy13273 写道

spring-flex.jar在网上好象没有下载的啊 要不就是我没有找到 可以把你的原代码给我发一分吗 我的邮箱zy13273@163.com 谢谢 我也是按这样建的项目 但是注入的时候总是报错 "[RPC Fault faultString="Unable to create Spring service named 'springTest' " " 以下是我配置的地方: &lt;bean id="springTest" class="flex.samples.SpringTest"&gt; &lt;property name="description"&gt; &lt;value&gt;Hello Flex To Spring&lt;/value&gt; &lt;/property&gt; &lt;property name="userService" ref="userService" /&gt; &lt;/bean&gt; 不加红色的地方就没事可以正常执行,可加了就报错了,弄不明白为啥了?


不好意思,今天才看到你的留言,我的spring-flex.jar是我自己把上面的代码打包之后生成的,所以网上是没有的,我现在把我整个配置环境都发给你邮箱。

你的第二个问题我也没看得很明白,我是这么理解的,你要定义的springTest在Spring中是像以前一样定义,没有其他变化,而你上面定义的springTest好像是定义了springTest的两个参数,而且其中一个还有引用另外一个bean定义,这些应该都是spring配置错误,应该跟spring和flex的结合没有关系。提醒一下,在flex的配置文件remoting-config.xml中也要定义的。
12 楼 zy13273 2009-02-19  
spring-flex.jar在网上好象没有下载的啊 要不就是我没有找到
可以把你的原代码给我发一分吗 我的邮箱zy13273@163.com 谢谢
我也是按这样建的项目 但是注入的时候总是报错 "[RPC Fault faultString="Unable to create Spring service named 'springTest' " "

以下是我配置的地方:
<bean id="springTest" class="flex.samples.SpringTest">
<property name="description">
<value>Hello Flex To Spring</value>
</property>
<property name="userService" ref="userService" />
</bean>
不加红色的地方就没事可以正常执行,可加了就报错了,弄不明白为啥了?
11 楼 WaterSugar 2009-02-13  
zigong 写道

楼主能把源代码风向一下吗?i_am_vip@126.com&nbsp; 你的实例对我有帮助

好的,已经发给了。
10 楼 zigong 2009-02-12  
楼主能把源代码风向一下吗?i_am_vip@126.com  你的实例对我有帮助
9 楼 WaterSugar 2009-01-21  
谢谢,我测试测试。
8 楼 蝗虫的大腿 2009-01-20  
WaterSugar 写道



写完才发现Mediafire网盘上不去了,不知道是不是被封了,我好多资料还在上面呢!

上面的附件现在还没办法提供,我还没有找到合适的网盘,希望大家推荐一下好的网盘,谢谢!

用skydrive
7 楼 蝗虫的大腿 2009-01-20  
WaterSugar 写道

natian306 写道
可以下载源码吗?

对不起,我没有好的网盘来存储资料,以前的Mediafire上不去了,比较郁闷!

skydrive
6 楼 WaterSugar 2008-12-20  
natian306 写道

可以下载源码吗?

对不起,我没有好的网盘来存储资料,以前的Mediafire上不去了,比较郁闷!
5 楼 natian306 2008-12-18  
可以下载源码吗?
4 楼 sunick 2008-10-29  
汗一个~~  不过谢谢兄弟分享经验
3 楼 WaterSugar 2008-10-27  
mreay 写道

用gmail吧


谢谢,gmail中的资料能不能提供给大家一起下载呢?
2 楼 mreay 2008-10-27  
用gmail吧
1 楼 WaterSugar 2008-10-25  


写完才发现Mediafire网盘上不去了,不知道是不是被封了,我好多资料还在上面呢!

上面的附件现在还没办法提供,我还没有找到合适的网盘,希望大家推荐一下好的网盘,谢谢!

相关推荐

    BlazeDS与Spring 的结合

    3. 编写关键的工厂类 `FlexSpringFactory.java`,这个类负责连接 BlazeDS 与 Spring。 4. 在 `services-config.xml` 中添加工厂配置,指定工厂类 `FlexSpringFactory`。 5. 在 Spring 配置文件 `applicationContext....

    Flex Spring JAVA BLAZEDS整合

    【Flex Spring JAVA BLAZEDS整合】是一种技术实践,它将Adobe Flex的前端展示层与Spring框架的后端业务逻辑层紧密结合,利用BlazeDS作为中间件进行数据传输。Flex作为一个强大的RIA(富互联网应用程序)开发平台,常...

    flex blazeds spring集成

    Flex Blazeds Spring集成是将Adobe的Flex前端技术与Spring框架后端服务相结合的一种开发模式。这个DEMO展示了如何在Flex客户端应用中利用Spring框架来管理和服务通信,从而实现更高效、灵活的分布式应用程序。 Flex...

    构建全栈式Flex、BlazeDS和Spring集成解决方案–第一部分 创建Maven Flex模块

    随着技术的不断发展,将Flex与强大的服务器端技术如Spring框架结合,成为了一种趋势,以构建更复杂、更稳定的应用程序。Spring框架因其控制反转(IoC)和面向切面编程(AOP)特性,在Java开发领域占据了重要地位,...

    spring3+ActiveMQ+blazeds+flex consumer

    这个项目展示了如何将Spring3的灵活性与ActiveMQ的高性能消息传递能力相结合,通过BlazeDS和Flex构建出一款强大的实时通信系统。在实际应用中,这种架构可以应用于各种场景,如股票交易、在线聊天室、实时监控系统等...

    Flex与Spring整合详解

    另一种集成方式是通过Spring BlazeDS Integration,它结合了Spring框架和BlazeDS(一个用于Flex和Java之间的数据交换的开源项目)。BlazeDS提供了一个更完整的解决方案,包括消息代理、数据服务和Remoting服务,可以...

    felx_Spring.zip

    当Flex与Spring结合使用时,可以实现前后端分离,提高应用的灵活性和可维护性。本文将深入探讨如何将Flash作为Spring-MVC的View层进行整合,以及在这个过程中涉及的关键知识点。 首先,我们来看“felx_Spring.zip”...

    (XF - 8)Flex + Spring

    4. **创建工厂类**:如上面提到的,创建一个工厂类来实例化Spring的bean,并在Flex中通过AMF调用这些bean的方法。 5. **在Flex客户端调用服务**:在Flex代码中,使用`RemoteObject`或`WebService`组件来调用后端...

    Flex+hibernate+spring整合

    2. ** BlazeDS/LiveCycle Data Services**:Adobe提供的BlazeDS或LiveCycle Data Services作为服务器端组件,为Flex和Spring之间的通信提供支持,允许Flex客户端与Spring服务交互。 3. **Spring-WS/Spring-Remoting...

    IT技术文章示例

    Flex与BlazeDS、Java、Spring的集成 这是Flex与Java后端服务进行深度集成的案例,涉及到多个技术栈的协同工作。Flex作为前端界面,通过BlazeDS与Java服务器通信;Java服务器端使用Spring框架进行业务逻辑管理和...

    flex4.5+SSH项目搭建

    6. **文档和源码**:文件"SpringFactory.java"可能包含了Spring框架的配置或工厂类,用于创建和管理SSH框架中的对象。而"tomcat.doc"文档很可能提供了关于如何配置Tomcat服务器以运行Flex和SSH项目的详细步骤。 7. ...

    java面试资料

    涵盖了Struts的工作原理、JSP/Servelt的基础、Hibernate ORM的概念、Spring框架的关键特性、IoC与AOP思想、SSH架构、Ajax技术、WebService技术、EJB概念、Struts 1与Struts 2的区别、目标缓存的重要性以及Flex与...

Global site tag (gtag.js) - Google Analytics