- 浏览: 238129 次
- 性别:
- 来自: 北京
最新评论
-
LoveJavaMM:
[color=red][/color]为什么我的自定义组建不出 ...
跟我StepByStep学FLEX教程------Demo6之自定义事件&自定义组件 -
wangsiaofish:
auditionlsl 写道在使用Flex4时:
代码:cre ...
跟我StepByStep学FLEX教程------Demo5之事件Event -
wangsiaofish:
成功,perfect.
跟我StepByStep学FLEX教程------Demo7之页面跳转 -
happyzjj:
感谢楼主的共享,很受用
跟我StepByStep学FLEX教程------结束语 -
娇雨zj:
请问:我用第二种绑定了数据,BindingUtils.bind ...
跟我StepByStep学FLEX教程------Demo4之进度条数据绑定
跟我StepByStep学FLEX教程------FLEX和Spring整合
说明:该文系作者原创,请勿商用或者用于论文发表,转载必须经作者同意并且注明出处。
这一讲是基于DEMO11,所以没有看DEMO11的读者请一定阅读,因为Spring的整合是基于J2EE的。
因为要和Spring整合,所以先简单讲一下Spring(如果要对Spring没有接触过的读者也没关系,按照讲的内容也能做,但是这样没啥实际意义,所以要对本讲要有所收获,必须对Spring有一定的理解)。
首先下载Spring,作者选择的Spring版本Spring Framework2.0.8。可以在官网
http://www.springsource.org/下载,也可以去网络搜索都可以。
Spring对于J2EE来说,读者应该都非常熟悉,Spring以其轻量级的应用迅速的普及。
对于Spring都需要了解的两个重要概念:
1、控制反转(IoC=Inversion of Control),依赖注入(DI=Dependency Injection);
通俗一点来讲,比如作者在工作中经常使用的硬件设备:Dell620笔记本电脑、USB活动硬盘、aigo移动U盘。大家很熟悉吧。
这三个设备都支持USB接口。需要将数据复制到外边的存储设备时,根据实际情况决定保存在U盘还是活动硬盘。
相信这种操作大家司空见惯,而这也正是所谓依赖注入的一个典型例子。
笔记本电脑和外围存储通过笔记本的USB接口相连,对于笔记本而言,只是将用户指定数据发送到USB接口,而这些数据何去何从,则由当前的USB设备决定。
2、面向切面编程(AOP=Aspect Oriented Programming);
这个大家可能觉得很抽象,其实现在大家应该都接触过,作者举两个例子:一个是WebWork框架的Intecepor就是AOP的应用;再一个大家更熟悉了,J2EE系统的Log4j的日志系统对于读者做的系统来说就是一个AOP。
切面切面,就是一个截面,所做的程序不对现有系统进行破坏,但是随时可以打开关闭,这么理解就是很通俗通俗的理解了。
这儿就简单提及一下,因为主要还是讲Flex和Spring的整合,读者就一步一步来做吧:)
呵呵,大家觉得Spring的概念容易理解了吧:)
Flex和Spring的整合:
1、将Spring的jar包拷贝到WEB-INF的lib下;(这个是必须的,否则怎么整合Spring)
2、在web.xml中注册Spring,如下配置:
<!-- Spring configuration file (Not needed if you don't use Spring) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Spring ContextLoaderListener (Not needed if you don't use Spring) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3、增加SpringFactory.java,代码如下:
package com.samples.factories;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import flex.messaging.FactoryInstance;
import flex.messaging.FlexFactory;
import flex.messaging.config.ConfigMap;
import flex.messaging.services.ServiceException;
/**
* This interface is implemented by factory components which provide
* instances to the flex messaging framework. To configure flex data services
* to use this factory, add the following lines to your services-config.xml
* file (located in the WEB-INF/flex directory of your web application).
*
* <factories>
* <factory id="spring" class="flex.samples.factories.SpringFactory" />
* </factories>
*
* You also must configure the web application to use spring and must copy the spring.jar
* file into your WEB-INF/lib directory. To configure your app server to use spring,
* you add the following lines to your WEB-INF/web.xml file:
*
* <context-param>
* <param-name>contextConfigLocation</param-name>
* <param-value>/WEB-INF/applicationContext.xml</param-value>
* </context-param>
*
* <listener>
* <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
* </listener>
*
* Then you put your spring bean configuration in WEB-INF/applicationContext.xml (as per the
* line above). For example:
*
* <?xml version="1.0" encoding="UTF-8"?>
* <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
*
* <beans>
* <bean name="weatherBean" class="dev.weather.WeatherService" singleton="true"/>
* </beans>
*
* Now you are ready to define a destination in flex that maps to this existing service.
* To do this you'd add this to your WEB-INF/flex/remoting-config.xml:
*
* <destination id="WeatherService">
* <properties>
* <factory>spring</factory>
* <source>weatherBean</source>
* </properties>
* </destination>
*
* @author Jeff Vroom
*/
public class SpringFactory implements FlexFactory
{
private static final String SOURCE = "source";
/**
* This method can be used to initialize the factory itself. It is called with configuration
* parameters from the factory tag which defines the id of the factory.
*/
public void initialize(String id, ConfigMap configMap) {}
/**
* This method is called when we initialize the definition of an instance
* which will be looked up by this factory. It should validate that
* the properties supplied are valid to define an instance.
* Any valid properties used for this configuration must be accessed to
* avoid warnings about unused configuration elements. If your factory
* is only used for application scoped components, this method can simply
* return a factory instance which delegates the creation of the component
* to the FactoryInstance's lookup method.
*/
public FactoryInstance createFactoryInstance(String id, ConfigMap properties)
{
SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);
instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
System.out.println("SpringSpringSpring" + instance.toString());
return instance;
} // end method createFactoryInstance()
/**
* Returns the instance specified by the source
* and properties arguments. For the factory, this may mean
* constructing a new instance, optionally registering it in some other
* name space such as the session or JNDI, and then returning it
* or it may mean creating a new instance and returning it.
* This method is called for each request to operate on the
* given item by the system so it should be relatively efficient.
* <p>
* If your factory does not support the scope property, it
* report an error if scope is supplied in the properties
* for this instance.
*/
public Object lookup(FactoryInstance inst)
{
SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
return factoryInstance.lookup();
}
static class SpringFactoryInstance extends FactoryInstance
{
SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties)
{
super(factory, id, properties);
}
public String toString()
{
return "SpringFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope();
}
public Object lookup()
{
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
String beanName = getSource();
try
{
return appContext.getBean(beanName);
}
catch (NoSuchBeanDefinitionException nexc)
{
ServiceException e = new ServiceException();
String msg = "Spring service named '" + beanName + "' does not exist.";
e.setMessage(msg);
e.setRootCause(nexc);
e.setDetails(msg);
e.setCode("Server.Processing");
throw e;
}
catch (BeansException bexc)
{
ServiceException e = new ServiceException();
String msg = "Unable to create Spring service named '" + beanName + "' ";
e.setMessage(msg);
e.setRootCause(bexc);
e.setDetails(msg);
e.setCode("Server.Processing");
throw e;
}
}
}
}
4、在services-config.xml中注册SpringFacotry,配置如下:
<factories>
<factory id="spring" class="com.samples.factories.SpringFactory"/>
</factories>
5、接下来就要在applicationContext.mxl中注册helloJavaFlexBean,配置如下:
<bean id="helloJavaFlexBean" class="com.test.HelloJavaFlex">
</bean>
6、在remoting-config.xml中将SpringBean公开给Flex客户端,配置如下:
<destination id="helloJavaFlex">
<properties>
<factory>spring</factory>
<source>helloJavaFlexBean</source>
</properties>
</destination>
其它的代码都不用改动,运行一下,和Demo11的运行效果一样。
读者可能会有疑问,增加了这么多配置,效果还和Demo11一样?
1、这样的整合对于这种演示的小程序来说确实意义不大,但是大型项目这种Spring方式优点就非常明显了,因为和Flex客户端公开的是SpringBean的声明,所以无论底层逻辑甚至文件名称得改动,都不会有什么影响;
2、Spring整合进来,就可以使用Spring很多特性了,呵呵,下个DEMO就会使用Spring的自带JDBCTemplate访问数据库;
3、Spring的整合,对于Hibernate的整合提供了更大的便捷,这个也会在后边的DEMO中提及。
下一讲对这这讲的Demo做个简单的解释。
评论
方便把案例代码发给我看下吗? 谢谢 790867479@qq.com
这问题,真好玩~
spring.jar
spring-aspects.jar
楼主的例子需要这两个包
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Spring ContextLoaderListener (Not needed if you don't use Spring) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这段加上就报错,web.xml文件就出错了
这是因为你把这段加到web.xml最后了,应该将<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>加到web.xml中原有的几个<context-param>一起。
楼主,对SpringFactory开不大明白,能否讲解一下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Spring ContextLoaderListener (Not needed if you don't use Spring) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这段加上就报错,web.xml文件就出错了
感谢你的评价。发表留言或者使用javaeye短信都可以。不过有时候工作忙得时候如果回复不及时还请见谅。
<!-- Spring configuration file (Not needed if you don't use Spring) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Spring ContextLoaderListener (Not needed if you don't use Spring) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这段加上报错啊,是不是拷贝jar包之后还要作一些spring的配置啊,这部分楼主是不是没有讲啊,因为我从来没接触过这些,需要从头开始一步一步的操作
报什么错?你需要好拷贝Spring的jar包,还有需要配置applicationContext.xml
<!-- Spring configuration file (Not needed if you don't use Spring) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Spring ContextLoaderListener (Not needed if you don't use Spring) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这段加上报错啊,是不是拷贝jar包之后还要作一些spring的配置啊,这部分楼主是不是没有讲啊,因为我从来没接触过这些,需要从头开始一步一步的操作
发表评论
-
跟我StepByStep学FLEX教程------读者答疑
2010-07-14 09:56 2429跟我StepByStep学FLEX教程------读者答疑 ... -
跟我StepByStep学FLEX教程------结束语
2009-09-15 11:56 2589跟我StepByStep学FLEX教程系列教程就暂 ... -
跟我StepByStep学FLEX教程------PDF版
2009-09-15 11:43 23134跟我StepByStep学FLEX教程------PDF版 ... -
跟我StepByStep学FLEX教程------贵在坚持
2009-09-15 10:53 2469跟我StepByStep学FLEX教程------贵在坚持 ... -
跟我StepByStep学FLEX教程------版权声明
2009-09-15 10:17 2380跟我StepByStep学FLEX教程------版权声明 ... -
跟我StepByStep学FLEX教程------Cairngorm之Command部分
2009-09-09 17:31 2457跟我StepByStep学FLEX教程------Cairng ... -
跟我StepByStep学FLEX教程------Cairngorm之核心控制流程
2009-09-09 16:40 2567跟我StepByStep学FLEX教程-- ... -
跟我StepByStep学FLEX教程------Cairngorm之Model Locator
2009-08-18 11:45 3191跟我StepByStep学FLEX教程-- ... -
跟我StepByStep学FLEX教程------Cairngorm之代码结构
2009-08-18 11:27 2606跟我StepByStep学FLEX教程------Cairng ... -
跟我StepByStep学FLEX教程------Demo15之Cairngorm
2009-08-10 15:45 2653跟我StepByStep学FLEX教程------Demo15 ... -
跟我StepByStep学FLEX教程------Cairngorm之环境准备
2009-08-06 15:01 4181跟我StepByStep学FLEX教程------Cairng ... -
跟我StepByStep学FLEX教程------Cairngorm之组成部分
2009-08-05 10:31 3074跟我StepByStep学FLEX教程------Cairng ... -
跟我StepByStep学FLEX教程------MVC
2009-07-28 10:41 2928跟我StepByStep学FLEX教程------MVC ... -
跟我StepByStep学FLEX教程------Caringorm之简介
2009-07-27 11:50 3409跟我StepByStep学FLEX教程------Caring ... -
跟我StepByStep学FLEX教程------Demo14Flex+Spring+Hibernate整合
2009-07-14 13:29 4805跟我StepByStep学FLEX教程------Demo14 ... -
跟我StepByStep学FLEX教程------Flex之Hibernate
2009-07-08 11:46 3280跟我StepByStep学FLEX教程------Flex之H ... -
跟我StepByStep学FLEX教程------Demo13之Flex访问数据库
2009-07-07 11:01 5279跟我StepByStep学FLEX教程-- ... -
跟我StepByStep学FLEX教程------访问数据库之hsqldb
2009-07-06 11:16 3628跟我StepByStep学FLEX教程------访问数据库之 ... -
跟我StepByStep学FLEX教程------访问数据库之JDBCTemplate
2009-07-03 11:06 3457跟我StepByStep学FLEX教程------访问数据库 ... -
跟我StepByStep学FLEX教程------AMF
2009-06-04 23:08 3890跟我StepByStep学FLEX教程------AMF ...
相关推荐
Demo12:FLEX和Spring整合 - **Spring框架介绍**:Spring是一个广泛使用的Java企业级开发框架。 - **整合方式**:探讨如何将Spring与Flex进行有效整合。 #### 27. 访问数据库之JDBCTemplate - **JDBCTemplate...
2. Flex和Flex Builder安装:Flex SDK(软件开发工具包)是免费的,可以用来开发Flex应用,而Flex Builder是基于Eclipse的集成开发环境,为Flex开发者提供代码编辑、调试等便利。 3. HelloWorld示例:作为学习编程...
跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf
Flex教程详解:逐步掌握动态富互联网应用开发 Flex是由Adobe公司推出的一种用于构建富互联网应用程序(RIA)的技术,它基于ActionScript编程语言和MXML标记语言。本教程旨在引导学习者一步步深入理解Flex,帮助他们...
根据给定的信息,我们可以将《跟我StepByStep学FLEX》这本教程的主要知识点概括如下: ### FLEX基础 #### 概述 - **FLEX介绍**:FLEX是一种用于构建跨平台桌面应用程序和移动设备应用程序的技术。它结合了HTML、...
- **整合技术栈**:这部分展示了如何将Flex与流行的企业级框架(如Spring和Hibernate)相结合,构建完整的Web应用程序。 - **Spring**:介绍如何利用Spring框架进行业务逻辑管理,并通过Flex进行前端交互。 - **...
《跟我StepByStep学FLEX教程》是由王一松编写的,旨在通过一系列深入浅出的示例,帮助读者从零开始掌握Flex的各项技术要点,从而能够独立开发出功能丰富、交互流畅的应用程序。 一、Flex入门与环境搭建 在《跟我...
2. **跟我StepByStep学FLEX教程------王一松.pdf**:这是一本面向初学者的教程,由王一松编著。通过逐步的教学方式,讲解了Flex的基础知识,包括环境搭建、界面设计、事件处理、数据绑定等内容。适合没有FLEX背景的...
《安装算量(实例体验)入门教程(StepByStep)---消防报警篇(2)》是一份关于建筑电气安装算量的详细指南,主要讲解了消防报警系统的布线与识别布置过程,以及工程图的分层管理。以下是教程中涉及的关键知识点: 1. **...
《安装算量(实例体验)入门教程(StepByStep)---消防水篇借鉴》 本文主要介绍了使用金格软件进行安装工程量计算的入门教程,特别是针对消防水系统的计算。教程分为七个章节,旨在帮助初学者逐步理解并掌握专业安装算...
《安装算量(实例体验)入门教程(StepByStep)---消防报警篇(2)》是一份详尽的教程,旨在帮助初学者掌握安装算量软件的使用,特别是在消防报警系统的回路识别与布置方面。以下是对教程内容的详细解析: 在消防报警系统...