当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪Spring事务配置的五种方法(一)           总结如下:     Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理.........
    ▪工厂方法模式(Factory Method)      @@@模式定义: 定义一个用于创建对象(interface)的接口(这里的"接口"不是指interface而是method), 让子类(通过override父类创建interface的method来)决定实例化哪一个类, Factory Method使一个类(inte.........
    ▪Writing Asynchronous Web Application (Comet) using the Atmosphere Framework      Atmosphere (http://atmosphere.dev.java.net) is a high-level API designed to make it easier to build Comet-based Web applications that include a mix of Comet and RESTful behavior. Today writing portable Web applications that can use the power of the Co.........

[1]Spring事务配置的五种方法(一)
    来源: 互联网  发布时间: 2013-11-19

    总结如下:

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。

    DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。

    具体如下图:

    根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

    第一种方式:每个Bean都有一个代理

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <propertyname="configLocation" value="classpath:hibernate.cfg.xml"/>  
        <propertyname="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
    </bean>  

    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <propertyname="sessionFactory" ref="sessionFactory"/>
    </bean>
    
    <!-- 配置DAO -->
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
        <propertyname="sessionFactory" ref="sessionFactory"/>
    </bean>
    
    <bean id="userDao"  
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
           <!-- 配置事务管理器 -->  
           <propertyname="transactionManager" ref="transactionManager"/>     
        <propertyname="target" ref="userDaoTarget"/>  
         <propertyname="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao"/>
        <!-- 配置事务属性 -->  
        <propertyname="transactionAttributes">  
            <props>  
                <propkey="*">PROPAGATION_REQUIRED</prop>

    
[2]工厂方法模式(Factory Method)
    来源: 互联网  发布时间: 2013-11-19
@@@模式定义:
定义一个用于创建对象(interface)的接口(这里的"接口"不是指interface而是method),
让子类(通过override父类创建interface的method来)决定实例化哪一个类,
Factory Method使一个类(interface)的实例化延迟到其(指Factory Method所在的类)子类。


@@@练习示例: 
导出数据的应用框架。


@@@示例代码:
src/export/ExportFileApi.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 导出文件对象的接口
 */
public interface ExportFileApi {
    /**
     * 导出内容成为文件
     * @param data: 示意需要保存的数据
     * @return 是否导出成功
     */
	public boolean export(String data);
}

src/export/ExportTxtFile.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 导出成文本文件格式的对象
 */
public class ExportTxtFile implements ExportFileApi {
    public boolean export(String data) {
        //简单示意一下,这里需要操作文件
    	System.out.println("导出数据" + data + "到文本文件");
    	return true;
    }
}

src/export/ExportDB.java
~~~~~~~~~~~~~~~~~~~~~~~~
package export;

/**
 * 导出成数据库备份文件形式的对象
 */
public class ExportDB implements ExportFileApi {
	public boolean export(String data) {
		//简单示意一下,这里需要操作数据库和文件
    	System.out.println("导出数据" + data + "到数据库备份文件");
		return true;
	}
}

src/export/ExportOperate.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


package export;

/**
 * 实现导出数据的业务功能对象
 */
public class ExportOperate {
    /**
     * 导出文件
     * @param type 用户选择的导出类型
     * @param data 需要保存的数据
     * @return 是否成功导出文件
     */
	public boolean export(int type, String data) {
		//使用工厂方法
		ExportFileApi api = factoryMethod(type);
		return api.export(data);
	}
	
	/**
	 * 工厂方法,创建导出的文件对象的接口对象
	 * @param type 用户选择的导出类型
	 * @return 导出的文件对象的接口对象
	 */
	protected ExportFileApi factoryMethod(int type) {
		ExportFileApi api = null;
		
		if (1 == type) {
			api = new ExportTxtFile();
		} else if (2 == type) {
			api = new ExportDB();
		}
		
		return api;
	}
}

src/export/ExportTxtFileOperate.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 具体的创建器实现对象,实现创建导出成文本格式的对象
 */
public class ExportTxtFileOperate extends ExportOperate {
	protected ExportFileApi factoryMethod() {
        //创建导出成文本格式的对象
		return new ExportTxtFile();
	}
}

src/export/ExportDBOperate.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 具体的创建器实现对象,实现创建导出成数据库备份文件形式的对象
 */
public class ExportDBOperate extends ExportOperate {
	protected ExportFileApi factoryMethod() {
		//创建导出成文本格式的对象
		return new ExportDB();
	}

}

src/export/ExportXml.java
~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 导出成xml文件的对象
 */
public class ExportXml implements ExportFileApi {
    public boolean export(String data) {
    	// 简单示意一下
    	System.out.println("导出数据" + data + "到XML文件");
    	return true;
    }
}

src/export/ExportOperate2.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 扩展ExportOperate对象,加入可以导出的XML文件
 */
public class ExportOperate2 extends ExportOperate {
    /**
     * 覆盖父类的工厂方法,创建导出的文件对象的接口对象
     * @param type 用户选择的导出类型
     * @return 导出的文件对象的接口对象
     */
	protected ExportFileApi factoryMethod(int type) {
        ExportFileApi api = null;
        // 可以全部覆盖,也可以选择自己感兴趣的覆盖
        // 这里只添加自己新的实现,其他的不管
        if (3 == type) {
            api = new ExportXml();        	
        } else {
        	// 其他的还是让父类来实现
        	api = super.factoryMethod(type);
        }
        
        return api;
	}
}

src/user/Client.java
~~~~~~~~~~~~~~~~~~~~

package user;

import export.ExportOperate;
import export.ExportOperate2;

public class Client {
	public static void main(String[] args) {
		// 创建需要使用的Creator对象
		ExportOperate operate = new ExportOperate2();
		// 下面变换传入的参数来测试参数化工厂方法
		operate.export(1, "Test1");
		operate.export(2, "Test2");
		operate.export(3, "Test3");
	}
}

@@@工厂方法模式的实现:
1. 一般实现成抽象类
2. 也可以实现成具体的类
3. 可以通过给工厂方法传递参数来选择实现
4. 工厂方法一般返回的是被创建对象的接口对象
5. 在工厂方法模式里面,是Creator中的其他方法在使用工厂方法创建的对象
6. 工厂方法一般不提供给外部使用(用protected修饰)
7. 可以使用工厂方法模式来连接平行的类层次


@@@工厂方法模式的优点 :
1. 可以在不知道所依赖的对象的具体实现的情况下编程
2. 更容易扩展对象的新版本


@@@工厂方法模式的缺点 :
1. 具体产品对象和工厂方法的耦合性


@@@工厂方法模式的本质:
延迟到子类来选择实现


@@@工厂方法模式体现的设计原则 :
依赖倒置原则






作者:jinfengmusic 发表于2013-5-29 22:10:23 原文链接
阅读:6 评论:0 查看评论

    
[3]Writing Asynchronous Web Application (Comet) using the Atmosphere Framework
    来源: 互联网  发布时间: 2013-11-19

Atmosphere (http://atmosphere.dev.java.net) is a high-level API designed to make it easier to build Comet-based Web applications that include a mix of Comet and RESTful behavior. Today writing portable Web applications that can use the power of the Comet technique is almost impossible: Tomcat, Jetty, and Grizzly/GlassFish application server all have their own set of private APIs. Atmosphere offers API that will works everywhere without the needs to learn the web server specific API.

Atmosphere leverages and builds on Project Jersey and the Java API for RESTful Web Services (JAX-RS). Jersey is the open resource reference implementation of JAX-RS that makes it easier to build RESTful Web services. Atmosphere and Jersey complement each other, with the goal of making it easier to build Comet-based Web applications that include a mix of Comet and RESTful behavior.

作者:wonderfan 发表于2013-5-29 22:16:19 原文链接
阅读:62 评论:0 查看评论

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3