﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-cmd</title><link>http://www.blogjava.net/cmd/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 09:55:46 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 09:55:46 GMT</pubDate><ttl>60</ttl><item><title>看到这个帖子和对ajax感兴趣的网友,谢谢!往http://ajaxcn.org/forum/forums/list.page注册个帐号,交流一下,共同迎接web2.0</title><link>http://www.blogjava.net/cmd/archive/2006/10/09/74176.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Mon, 09 Oct 2006 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/10/09/74176.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/74176.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/10/09/74176.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/74176.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/74176.html</trackback:ping><description><![CDATA[如题.最近有空搞一搞ajax.在探索dojo组件库和dwr引擎的使用和集成.感兴趣的朋友加个帐号大家研究讨论.<br />建了聊天室ajaxconference@gmail.com. 大家加入一下.<br /><img src ="http://www.blogjava.net/cmd/aggbug/74176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-10-09 21:39 <a href="http://www.blogjava.net/cmd/archive/2006/10/09/74176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用XMLBean轻轻松松读写XML(转)</title><link>http://www.blogjava.net/cmd/archive/2006/08/19/64520.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Sat, 19 Aug 2006 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/08/19/64520.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/64520.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/08/19/64520.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/64520.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/64520.html</trackback:ping><description><![CDATA[
		<font size="2">在网上看到一片关于xml操作的文章，个人感觉是操作xml最优美的方案，共享给大家。<br />一、关于XML解析　XML在Java应用程序里变得越来越重要, 广泛应用于数据存储和交换.
比如我们常见的配置文件,都是以XML方式存储的. XML还应用于Java Message Service和Web
Services等技术作为数据交换.因此,正确读写XML文档是XML应用的基础.</font>
		<p>
				<font size="2">　　Java提供了SAX和DOM两种方式用于解析XML,但即便如此,要读写一个稍微复杂的XML,也不是一件容易的事.</font>
		</p>
		<p>
				<font size="2">　　二、XMLBean简介</font>
		</p>
		<p>
				<font size="2">　
　Hibernate已经成为目前流行的面向Java环境的对象/关系数据库映射工具.在Hibernate等对象/关系数据库映射工具出现之前,对数据
库的操作是通过JDBC来实现的,对数据库的任何操作,开发人员都要自己写SQL语句来实现.
对象/关系数据库映射工具出现后,对数据库的操作转成对JavaBean的操作,极大方便了数据库开发.
所以如果有一个类似的工具能够实现将对XML的读写转成对JavaBean的操作,将会简化XML的读写,即使对XML不熟悉的开发人员也能方便地读写
XML. 这个工具就是XMLBean.</font>
		</p>
		<p>
				<font size="2">　　三、准备XMLBean和XML文档</font>
		</p>
		<p>
				<font size="2">　　XMLBean是Apache的一个开源项目,可以从<a href="http://www.apache.org/">http://www.apache.org</a>下载,最新的版本是2.0. 解压后目录如下:</font>
		</p>
		<p>
				<font size="2">xmlbean2.0.0<br />     +---bin<br />     +---docs<br />     +---lib<br />     +---samples<br />     +---schemas</font>
		</p>
		<p>
				<font size="2">　　另外还要准备一个XML文档(customers.xml),</font>
		</p>
		<p>
				<font size="2">　　在本文的例子里,我们将对这个文档进行读写操作. 文档源码如下:</font>
		</p>
		<p>
				<font size="2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;Customers&gt;<br />    &lt;customer&gt;<br />            &lt;id&gt;1&lt;/id&gt;<br />            &lt;gender&gt;female&lt;/gender&gt;<br />            &lt;firstname&gt;Jessica&lt;/firstname&gt;<br />            &lt;lastname&gt;Lim&lt;/lastname&gt;<br />            &lt;phoneNumber&gt;1234567&lt;/phoneNumber&gt;<br />            &lt;address&gt;<br />                &lt;primaryAddress&gt;<br />                        &lt;postalCode&gt;350106&lt;/postalCode&gt;<br />                        &lt;addressLine1&gt;#25-1&lt;/addressLine1&gt;<br />                        &lt;addressLine2&gt;SHINSAYAMA 2-CHOME&lt;/addressLine2&gt;<br />                &lt;/primaryAddress&gt;<br />                &lt;billingAddress&gt;<br />                        &lt;receiver&gt;Ms Danielle&lt;/receiver&gt;<br />                        &lt;postalCode&gt;350107&lt;/postalCode&gt;<br />                        &lt;addressLine1&gt;#167&lt;/addressLine1&gt;<br />                        &lt;addressLine2&gt;NORTH TOWER HARBOUR CITY&lt;/addressLine2&gt;<br />                &lt;/billingAddress&gt;<br />            &lt;/address&gt;<br />    &lt;/customer&gt;<br />    &lt;customer&gt;<br />            &lt;id&gt;2&lt;/id&gt;<br />            &lt;gender&gt;male&lt;/gender&gt;<br />            &lt;firstname&gt;David&lt;/firstname&gt;<br />            &lt;lastname&gt;Bill&lt;/lastname&gt;<br />            &lt;phoneNumber&gt;808182&lt;/phoneNumber&gt;<br />            &lt;address&gt;<br />                &lt;primaryAddress&gt;<br />                        &lt;postalCode&gt;319087&lt;/postalCode&gt;<br />                        &lt;addressLine1&gt;1033 WS St.&lt;/addressLine1&gt;<br />                        &lt;addressLine2&gt;Tima Road&lt;/addressLine2&gt;<br />                &lt;/primaryAddress&gt;<br />                &lt;billingAddress&gt;<br />                        &lt;receiver&gt;Mr William&lt;/receiver&gt;<br />                        &lt;postalCode&gt;672993&lt;/postalCode&gt;<br />                        &lt;addressLine1&gt;1033 WS St.&lt;/addressLine1&gt;<br />                        &lt;addressLine2&gt;Tima Road&lt;/addressLine2&gt;<br />                &lt;/billingAddress&gt;<br />            &lt;/address&gt;<br />    &lt;/customer&gt;<br />&lt;/Customers&gt;</font>
		</p>
		<p>
				<font size="2">　
　这是一个客户的数据模型,每个客户都有客户编号(ID),姓名,性别(gender),电话号码(phoneNumber)和地址,其中地址有两个:
首要地址(PrimaryAddress)和帐单地址(BillingAddress),每个地址有邮编,地址1,和地址2组成.其中帐单地址还有收件人
(receiver).此外,还要准备一个配置文件(文件名customer.xsdconfig),这个文件的作用我后面会讲,它的内容如下:</font>
		</p>
		<p>
				<font size="2">&lt;xb:config xmlns:xb="<a href="http://xml.apache.org/xmlbeans/2004/02/xbean/config">http://xml.apache.org/xmlbeans/2004/02/xbean/config</a>"&gt;</font>
		</p>
		<p>
				<font size="2">  &lt;xb:namespace&gt;<br />    &lt;xb:package&gt;sample.xmlbean&lt;/xb:package&gt;<br />  &lt;/xb:namespace&gt;</font>
		</p>
		<p>
				<font size="2">&lt;/xb:config&gt;</font>
		</p>
		<p>
				<font size="2">　　四、XMLBean使用步骤</font>
		</p>
		<p>
				<font size="2">　　和其他面向Java环境的对象/关系数据库映射工具的使用步骤一样,在正式使用XMLBean前,我们要作两个准备.</font>
		</p>
		<p>
				<font size="2">　　1. 生成XML Schema文件</font>
		</p>
		<p>
				<font size="2">　
　什么是XML Schema文件? 正常情况下,每个XML文件都有一个Schema文件,XML
Schema文件是一个XML的约束文件,它定义了XML文件的结构和元素.以及对元素和结构的约束.
通俗地讲,如果说XML文件是数据库里的记录,那么Schema就是表结构定义.</font>
		</p>
		<p>
				<font size="2">　　为什么需要这个文件?
XMLBean需要通过这个文件知道一个XML文件的结构以及约束,比如数据类型等.
利用这个Schema文件,XMLBean将会产生一系列相关的Java Classes来实现对XML的操作.
而作为开发人员,则是利用XMLBean产生的Java
Classes来完成对XML的操作而不需要SAX或DOM.怎样产生这个Schema文件呢?
如果对于熟悉XML的开发人员,可以自己来写这个Schema文件,对于不熟悉XML的开发人员,可以通过一些工具来完成.比较有名的如XMLSPY和
Stylus Studio都可以通过XML文件来生成Schema文件. 加入我们已经生成这个Schema文件(customer.xsd):</font>
		</p>
		<p>
				<font size="2">       &lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />       &lt;xs:schema xmlns:xs="<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>"<br />                  elementFormDefault="qualified"&gt;<br />         &lt;xs:element name="Customers"&gt;<br />           &lt;xs:complexType&gt;<br />             &lt;xs:sequence&gt;<br />               &lt;xs:element maxOccurs="unbounded" name="customer"<br />                           type="customerType"/&gt;<br />             &lt;/xs:sequence&gt;<br />           &lt;/xs:complexType&gt;<br />         &lt;/xs:element&gt;<br />       &lt;xs:complexType name="customerType"&gt;<br />             &lt;xs:sequence&gt;<br />               &lt;xs:element name="id" type="xs:int"/&gt;<br />               &lt;xs:element name="gender" type="xs:string"/&gt;<br />               &lt;xs:element name="firstname" type="xs:string"/&gt;<br />               &lt;xs:element name="lastname" type="xs:string"/&gt;<br />               &lt;xs:element name="phoneNumber" type="xs:string"/&gt;<br />               &lt;xs:element name="address" type="addressType"/&gt;<br />             &lt;/xs:sequence&gt;<br />       &lt;/xs:complexType&gt;<br />         &lt;xs:complexType name="addressType"&gt;<br />             &lt;xs:sequence&gt;<br />               &lt;xs:element name="primaryAddress" type="primaryAddressType"/&gt;<br />               &lt;xs:element name="billingAddress" type="billingAddressType"/&gt;<br />             &lt;/xs:sequence&gt;<br />         &lt;/xs:complexType&gt;</font>
		</p>
		<p>
				<font size="2">         &lt;xs:complexType name="primaryAddressType"&gt;<br />             &lt;xs:sequence&gt;<br />               &lt;xs:element name="postalCode" type="xs:string"/&gt;<br />               &lt;xs:element name="addressLine1" type="xs:string"/&gt;<br />               &lt;xs:element name="addressLine2" type="xs:string"/&gt;<br />             &lt;/xs:sequence&gt;<br />         &lt;/xs:complexType&gt;<br />         &lt;xs:complexType name="billingAddressType"&gt;<br />             &lt;xs:sequence&gt;<br />                   &lt;xs:element name="receiver" type="xs:string"/&gt;<br />               &lt;xs:element name="postalCode" type="xs:string"/&gt;<br />               &lt;xs:element name="addressLine1" type="xs:string"/&gt;<br />               &lt;xs:element name="addressLine2" type="xs:string"/&gt;<br />             &lt;/xs:sequence&gt;<br />         &lt;/xs:complexType&gt;<br />       &lt;/xs:schema&gt;</font>
		</p>
		<p>
				<font size="2">　　2. 利用scomp来生成Java Classes</font>
		</p>
		<p>
				<font size="2">　　scomp是XMLBean提供的一个编译工具,它在bin的目录下. 通过这个工具,我们可以将以上的Schema文件生成Java Classes.scomp的语法如下:-</font>
		</p>
		<p>
				<font size="2">　　scomp [options] [dirs]* [schemaFile.xsd]* [service.wsdl]* [config.xsdconfig]*</font>
		</p>
		<p>
				<font size="2">　　主要参数说明:</font>
		</p>
		<p>
				<font size="2">　　-src [dir] -- 生成的Java Classes存放目录</font>
		</p>
		<p>
				<font size="2">　　-srconly -- 不编译Java Classes,不产生Jar文件</font>
		</p>
		<p>
				<font size="2">　　-out [jarFileName] -- 生成的Jar文件,缺省是xmltypes.jar</font>
		</p>
		<p>
				<font size="2">　　-compiler -- Java编译器的路径,即Javac的位置</font>
		</p>
		<p>
				<font size="2">　　schemaFile.xsd -- XML Schema文件位置</font>
		</p>
		<p>
				<font size="2">　　config.xsdconfig -- xsdconfig文件的位置, 这个文件主要用来制定生成的Java Class的一些文件名规则和Package的名称,在本文,package是sample.xmlbean</font>
		</p>
		<p>
				<font size="2">　　在本文,我是这样运行的:</font>
		</p>
		<p>
				<font size="2">      scomp -src build\src  -out build\customerXmlBean.jar schema\customer.xsd<br />             -compiler C:\jdk142_04\bin\javac customer.xsdconfig</font>
		</p>
		<p>
				<font size="2">　
　这个命令行的意思是告诉scomp生成customerXmlBean.jar,放在build目录下,同时生成源代码放在build\src下,
Schema文件是customer.xsd,xsdconfig文件是customer.xsdconfig.其实,
生成的Java源代码没有多大作用,我们要的是jar文件.我们先看一下build\src\sample\xmlbean下生成的Classes.</font>
		</p>
		<p>
				<font size="2">　　CustomersDocument.java -- 整个XML文档的Java Class映射</font>
		</p>
		<p>
				<font size="2">　　CustomerType.java -- 节点sustomer的映射</font>
		</p>
		<p>
				<font size="2">　　AddressType.java -- 节点address的映射</font>
		</p>
		<p>
				<font size="2">　　BillingAddressType.java -- 节点billingAddress的映射</font>
		</p>
		<p>
				<font size="2">　　PrimaryAddressType.java -- 节点primaryAddress的映射</font>
		</p>
		<p>
				<font size="2">　　好了,到此我们所有的准备工作已经完成了. 下面就开始进入重点:利用刚才生成的jar文件读写XML.</font>
		</p>
		<p>
				<font size="2">　　五、利用XMLBean读XML文件</font>
		</p>
		<p>
				<font size="2">　　新建一个Java Project,将XMLBean2.0.0\lib\下的Jar文件和刚才我们生成的customerXmlBean.jar加入到Project的ClassPath.</font>
		</p>
		<p>
				<font size="2">　　新建一个Java Class: CustomerXMLBean. 源码如下:</font>
		</p>
		<p>
				<font size="2">    package com.sample.reader;</font>
		</p>
		<p>
				<font size="2">    import java.io.File;<br />    <br />    import sample.xmlbean.*;<br />    import org.apache.commons.beanutils.BeanUtils;<br />    import org.apache.xmlbeans.XmlOptions;<br />    public class CustomerXMLBean {<br />    private String filename = null;<br />    <br />    public CustomerXMLBean(String filename) {<br />            super();<br />            this.filename = filename;<br />    }</font>
		</p>
		<p>
				<font size="2">    public void customerReader() {<br />            try {<br />              File xmlFile = new File(filename);<br />              CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);<br />              CustomerType[] customers = doc.getCustomers().getCustomerArray();<br />          <br />              for (int i = 0; i &lt; customers.length; i++) {<br />                CustomerType customer = customers[i];<br />                println("Customer#" + i);<br />                println("Customer ID:" + customer.getId());<br />                println("First name:" + customer.getFirstname());<br />                println("Last name:" + customer.getLastname());<br />                println("Gender:" + customer.getGender());<br />                println("PhoneNumber:" + customer.getPhoneNumber());<br />                // Primary address<br />                PrimaryAddressType primaryAddress = customer.getAddress().getPrimaryAddress();<br />                println("PrimaryAddress:");<br />                println("PostalCode:" + primaryAddress.getPostalCode());<br />                println("AddressLine1:" + primaryAddress.getAddressLine1());<br />                println("AddressLine2:" + primaryAddress.getAddressLine2());<br />                // Billing address<br />                BillingAddressType billingAddress = customer.getAddress().getBillingAddress();<br />                println("BillingAddress:");<br />                println("Receiver:" + billingAddress.getReceiver());<br />                println("PostalCode:" + billingAddress.getPostalCode());<br />                println("AddressLine1:" + billingAddress.getAddressLine1());<br />                println("AddressLine2:" + billingAddress.getAddressLine2());<br />            <br />              }<br />            } catch (Exception ex) {<br />                    ex.printStackTrace();<br />            }<br />    }<br />    private void println(String str) {<br />          System.out.println(str);<br />    }<br />   public static void main(String[] args) {<br />      String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers.xml";<br />                   <br />     CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);<br />                   customerXMLBean.customerReader();<br />    }</font>
		</p>
		<p>
				<font size="2">    }</font>
		</p>
		<p>
				<font size="2">　　运行它,参看输出结果:</font>
		</p>
		<p>
				<font size="2">       Customer#0<br />       Customer ID:1<br />       First name:Jessica<br />       Last name:Lim<br />       Gender:female<br />       PhoneNumber:1234567<br />       PrimaryAddress:<br />       PostalCode:350106<br />       AddressLine1:#25-1<br />       AddressLine2:SHINSAYAMA 2-CHOME<br />       BillingAddress:<br />       Receiver:Ms Danielle<br />       PostalCode:350107<br />       AddressLine1:#167<br />       AddressLine2:NORTH TOWER HARBOUR CITY</font>
		</p>
		<p>
				<font size="2">       Customer#1<br />       Customer ID:2<br />       First name:David<br />       Last name:Bill<br />       Gender:male<br />       PhoneNumber:808182<br />       PrimaryAddress:<br />       PostalCode:319087<br />       AddressLine1:1033 WS St.<br />       AddressLine2:Tima Road<br />       BillingAddress:<br />       Receiver:Mr William<br />       PostalCode:672993<br />       AddressLine1:1033 WS St.<br />       AddressLine2:Tima Road</font>
		</p>
		<p>
				<font size="2">　　怎么样,是不是很轻松? XMLBean的威力.</font>
		</p>
		<p>
				<font size="2">　　六、利用XMLBean写XML文件</font>
		</p>
		<p>
				<font size="2">　　利用XMLBean创建一个XML文档也是一件轻而易举的事.我们再增加一个Method,</font>
		</p>
		<p>
				<font size="2">　　请看一下的Java Class:</font>
		</p>
		<p>
				<font size="2">    public void createCustomer() {<br />    try {<br />        // Create Document<br />        CustomersDocument doc = CustomersDocument.Factory.newInstance();<br />        // Add new customer<br />        CustomerType customer = doc.addNewCustomers().addNewCustomer();<br />        // set customer info<br />        customer.setId(3);<br />        customer.setFirstname("Jessica");<br />        customer.setLastname("Lim");<br />        customer.setGender("female");<br />        customer.setPhoneNumber("1234567");<br />        // Add new address<br />        AddressType address = customer.addNewAddress();<br />        // Add new PrimaryAddress<br />        PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();<br />        primaryAddress.setPostalCode("350106");<br />        primaryAddress.setAddressLine1("#25-1");<br />        primaryAddress.setAddressLine2("SHINSAYAMA 2-CHOME");</font>
		</p>
		<p>
				<font size="2">        // Add new BillingAddress<br />        BillingAddressType billingAddress = address.addNewBillingAddress();<br />        billingAddress.setReceiver("Ms Danielle");<br />        billingAddress.setPostalCode("350107");<br />        billingAddress.setAddressLine1("#167");<br />        billingAddress.setAddressLine2("NORTH TOWER HARBOUR CITY");</font>
		</p>
		<p>
				<font size="2">        File xmlFile = new File(filename);<br />        doc.save(xmlFile);<br />        } catch (Exception ex) {<br />                ex.printStackTrace();<br />        }</font>
		</p>
		<p>
				<font size="2">  }</font>
		</p>
		<p>
				<font size="2">　　修改main method.</font>
		</p>
		<p>
				<font size="2">    public static void main(String[] args) {<br />    String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";<br />        CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);<br />        customerXMLBean.createCustomer();<br />    }</font>
		</p>
		<p>
				<font size="2">　　运行,打开customers_new.xml:</font>
		</p>
		<p>
				<font size="2">    &lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />    &lt;Customers&gt;<br />    &lt;customer&gt;<br />            &lt;id&gt;3&lt;/id&gt;<br />            &lt;gender&gt;female&lt;/gender&gt;<br />            &lt;firstname&gt;Jessica&lt;/firstname&gt;<br />            &lt;lastname&gt;Lim&lt;/lastname&gt;<br />            &lt;phoneNumber&gt;1234567&lt;/phoneNumber&gt;<br />            &lt;address&gt;<br />                    &lt;primaryAddress&gt;<br />                         &lt;postalCode&gt;350106&lt;/postalCode&gt;<br />                         &lt;addressLine1&gt;#25-1&lt;/addressLine1&gt;<br />                                       &lt;addressLine2&gt;SHINSAYAMA 2-CHOME&lt;/addressLine2&gt;<br />                    &lt;/primaryAddress&gt;<br />                    &lt;billingAddress&gt;<br />                        &lt;receiver&gt;Ms Danielle&lt;/receiver&gt;<br />                        &lt;postalCode&gt;350107&lt;/postalCode&gt;<br />                       &lt;addressLine1&gt;#167&lt;/addressLine1&gt;<br />                       &lt;addressLine2&gt;NORTH TOWER HARBOUR CITY&lt;/addressLine2&gt;<br />                    &lt;/billingAddress&gt;<br />                    &lt;/address&gt;<br />            &lt;/customer&gt;<br />    &lt;/Customers&gt;</font>
		</p>
		<p>
				<font size="2">　　七、利用XMLBean修改XML文件</font>
		</p>
		<p>
				<font size="2">　　我们再增加一个Method:</font>
		</p>
		<p>
				<font size="2">      public void updateCustomer(int id,String lastname) {<br />         try {<br />        File xmlFile = new File(filename);<br />        CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);<br />        CustomerType[] customers = doc.getCustomers().getCustomerArray();<br />      <br />        for (int i = 0; i &lt; customers.length; i++) {<br />           CustomerType customer = customers[i];<br />          if(customer.getId()==id){<br />                customer.setLastname(lastname);<br />                break;<br />            }<br />        }<br />        doc.save(xmlFile);<br />         } catch (Exception ex) {<br />          ex.printStackTrace();<br />         }<br />           }</font>
		</p>
		<p>
				<font size="2">　　main method:</font>
		</p>
		<p>
				<font size="2">    public static void main(String[] args) {<br />     String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";<br />                    <br />    CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);<br />                    <br />    customerXMLBean.updateCustomer(3,"last");<br />    }</font>
		</p>
		<p>
				<font size="2">　　运行之后,我们将会看到客户编号为3的客户的lastname已经改为last.</font>
		</p>
		<p>
				<font size="2">　　八、利用XMLBean删除一个customer</font>
		</p>
		<p>
				<font size="2">　　再增加一个Method:</font>
		</p>
		<p>
				<font size="2">    public void deleteCustomer(int id) {<br />     try {<br />      File xmlFile = new File(filename);<br />     CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);<br />    CustomerType[] customers = doc.getCustomers().getCustomerArray();</font>
		</p>
		<p>
				<font size="2">   for (int i = 0; i &lt; customers.length; i++) {<br />        CustomerType customer = customers[i];<br />        if(customer.getId()==id){<br />                        customer.setNil() ;<br />                        break;<br />               }<br />   }<br />   doc.save(xmlFile);<br />   } catch (Exception ex) {<br />        ex.printStackTrace();<br />        }<br />   }</font>
		</p>
		<p>
				<font size="2">　　main method:</font>
		</p>
		<p>
				<font size="2">    public static void main(String[] args) {<br />    String filename = "F://JavaTest//Eclipse//XMLBean//xml//customers_new.xml";<br />                    <br />    CustomerXMLBean customerXMLBean = new CustomerXMLBean(filename);<br />                    <br />    customerXMLBean.deleteCustomer(3);<br />    }</font>
		</p>
		<p>
				<font size="2">　　运行,我们将会看到客户编号为3的客户的资料已经被删除.</font>
		</p>
		<p>
				<font size="2">　　九、查询XML</font>
		</p>
		<p>
				<font size="2">　　除了本文在以上讲述的,利用XMLBean能轻轻松松完成XML的读写操作外,结合XPath和XQuery,XMLBean还能完成象SQL查询数据库一样方便地查询XML数据. 关于XML查询以及如何创建XML数据库, 我将在另一篇文章里讨论.</font>
		</p>
		<p>
				<font size="2">　　十、结束语</font>
		</p>
		<p>
				<font size="2">　　XMLBean能帮助我们轻易读写XML,这将有助于我们降低XML的学习和使用,有了这个基础,开发人员将为学习更多地XML相关技术和Web Services,JMS等其他J2EE技术打下良好地基础.</font>
		</p>
		<b>
				<font size="2">原文地址:http://www.matrix.org.cn/resource/article/44/44027_XMLBean.html</font>
		</b>
<img src ="http://www.blogjava.net/cmd/aggbug/64520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-08-19 15:07 <a href="http://www.blogjava.net/cmd/archive/2006/08/19/64520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ejb3 学习第一篇 annotation</title><link>http://www.blogjava.net/cmd/archive/2006/08/13/63375.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Sun, 13 Aug 2006 15:14:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/08/13/63375.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/63375.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/08/13/63375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/63375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/63375.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">ejb3是javaee5的标准，他吸收了开源框架的许多优点，非常希望大家学习并应用到实际应用当中。<br />ejb3完全是构建于annotation之上的，我将分为几篇讨论。<br /><br />这篇是自己关于注解的理解笔记</font>
		</p>
		<p>
				<font size="2">先从RetentionPolicy这个开始把，RetentionPolicy是一个枚举，他是对于编译器的一个声明。<br />然而Annotations在编译的过程会中记录到类文件。<br />RetentionPolicy的枚举成员一共有三个<br />SOURCE 编译器要丢弃的注释。<br />CLASS 编译器将把注释记录在类文件中，但在运行时 VM 不需要保留注释。<br />RUNTIME 编译器将把注释记录在类文件中，在运行时 VM 将保留注释，因此可以反射性地读取。(激发注解在运行时生效)<br />－－－－在这里注意一下java.lang.reflect.AnnotatedElement这个接口主要定义了获得注解和判断注解是否描述了某个java元素。</font>
		</p>
		<p>
				<font size="2">在说一下这两个<br />Retention，Target （jdk提供的注解）</font>
		</p>
		<p>
				<font size="2">示例<br />Target 源码：<br />@Documented<br />@Retention(RetentionPolicy.RUNTIME)<br />@Target(ElementType.ANNOTATION_TYPE)<br />public @interface Target {<br />    ElementType[] value();<br />}<br /><br />说明：<br />      1.自己可以描述自己，ElementType 描述声明类型（该注解可以用于哪些元素上边）。<br />      2.这个注解是用来描述自己定义的元数据，也应该叫做元注解，然而我们定义的元数据通常是为类或者方法而声明的。<br />      </font>
				<a href="mailto:3.@Retention(RetentionPolicy.RUNTIME">
						<font size="2">3.@Retention(RetentionPolicy.RUNTIME</font>
				</a>
				<font size="2">)用来保证在java运行时运行注解。</font>
		</p>
		<p>
				<font size="2">其实注解就是变向的简化java的反射以及把spring等容器ioc和aop的相关概念从往常的xml作为元数据提了一个高度声明至类中，摒弃掉了项目</font>
				<font size="2">扩大时冗长的xml的配置。<br /><br />一般通过类或者方法的反射调用注解的方式如下<br />            for (Method m : Class.forName(className).getMethods()) {<br />               if (m.isAnnotationPresent(MyAnnotation.class)) {<br />                  try {<br />                     m.invoke(null);//根据方法有无参数设置是否为null<br />                  } catch (Throwable ex) {<br />                     System.out.printf("失败");<br />                  }<br />               }<br /></font>
				<br />
				<font size="2">概念上应注意的几点：<br />1.在Annotation中，没有默认值的成员必须有一个成员值。而如何理解默认值是如何被处理就是一个很重要的细节：annotation类型所定义的</font>
		</p>
		<p>
				<font size="2">成员默认值被存储在class文件中，不被编译到annotation里面。如果我们修改一个annotation类型使其成员的默认值发生了改变，这个改变对</font>
				<font size="2">于所有此类型的annotation中没有明确提供成员值的成员产生影响（即修改了该成员的成员值）。即使在annotation类型使其成员的默认值被</font>
				<font size="2">改变后annotation从没被重新编译过，该类型的annotation(改变前已经被编译的)也受到影响。<br /></font>
				<br />
				<font size="2">这篇基本先写到这里，java元数据其实是很大的一块，我只是粗略的看了一下基本的概念，用来学习ejb作一个铺垫。关于annotation的详情介</font>
				<font size="2">绍可以阅读参考文献中的两篇文章。在下一章中我要介绍一下ejb中常用的annotation。</font>
		</p>
		<p>
				<font size="2">参考文献：<br />   jdk源码<br />   Java Annotation入门 </font>
				<a href="http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html">
						<font size="2">http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html</font>
				</a>
				<br />
				<font size="2">   Java Annotation手册 </font>
				<a href="http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html">
						<font size="2">http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html</font>
				</a>
		</p>
<img src ="http://www.blogjava.net/cmd/aggbug/63375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-08-13 23:14 <a href="http://www.blogjava.net/cmd/archive/2006/08/13/63375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring让Hibernate使用者受益良多</title><link>http://www.blogjava.net/cmd/archive/2006/06/21/54308.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Wed, 21 Jun 2006 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/06/21/54308.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/54308.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/06/21/54308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/54308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/54308.html</trackback:ping><description><![CDATA[
		<font size="2">Spring的轻量级的bean容器为业务对象（business objects）、DAO对象和资源（如：JDBC数据源或者Hibernate SessionFactorie等）对象提供了IoC类型的装配能力。Spring使用一个xml格式的应用配置文件为开发者提供了一种通过解析定制的属性文件来手动管理单实例对象或者工厂对象的选择性。由于Spring将非入侵性做为一个重要的目标，因此可以由Spring配置管理的bean对象均不需要依赖Spring自有的接口和类就可以通过它们的bean属性完成配置。这个概念可以被应用到任何环境中，无论你开发的是一个J2EE的web应用还是一个桌面应用甚至只是一个applet都可以。 </font>
		<p>
				<font size="2">
						<font color="#a52a2a">    在使用Hibernate的应用中, Spring的对DAO对象通常的事务管理特别应该引起关注。它的目的就是分离数据访问和事务处理，使事务性业务对象不与任何特殊的数据访问或者事务策略绑在一起，从而不影响业务对象的可复用性。这种划分既可以经由事务模板（TransactionTemplate）用编程的方式实现，也可以经由面向方面（AOP）事务拦截器（TransactionTemplate）用声明的方式实现。无论是本地的Hibernate / JDBC事务，还是JTA事务都支持对象外的事务策略，这对于本地的无状态会话Bean（Stateless Session Beans）是一个非常有用的选择。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">    Spring的HibernateTemplate类提供了一个简单的方式实现了Hibernate-based DAO对象而不必关心如何获得Hibernate的Session实例，也不必关心多方参与的事务处理。无需使用try-catch块，也无需进行事务检查。一个简单的Hibernate访问方法就完全解决了些麻烦! 无论是在多个DAO接口还是在多方事务的情况下，Spring使得多种DAO对象无缝地协同工作。例如：某些DAO对象可能是基于plain JDBC的实现，更适合于经由Spring的JdbcTemplate来避免手动的异常处理。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">      你可以单独地使用许多Spring特性，因为Spring的所有对象都是设计成可复用的JavaBean对象的集合。也不要因为Spring可以提供一个完整的应该框架而气馁！使用其他的Spring特性时，应用配置概念是一个附加的特性，并不是一个必须的特性。无论如何，当你要决定去构建一个象Spring这样的内在的基础架构的时候，在使用Spring的路途上没有什么范围上的限制。</font>
				</font>
		</p>
		<p>
				<font color="#a52a2a">
				</font>
				<font size="2">
				</font>
		</p>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">1. 介绍: 资源管理</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       典型的业务应用系统常常由于重复的资源管理代码而导致混乱。许多项目试着用自己的方法来解决这个问题，有时要为此付出失败的代价，Spring针对适当的资源管理提倡了一种引人注目的简单方法：即经由模板来倒置控制（Inversion of control），例如：基础类使用回调接口，或者应用AOP拦截器。其基础核心是适当的资源处理和将特殊的API异常转换为一个unchecked的基础异常。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       Spring引入了一个DAO异常层适用于任何数据访问策略。对于直接的JDBC，JdbcTemplate类关注于连接处理，并且关注于对SQLException转换为适当的DataAccessException，包括对特殊的数据库SQL错误转换为有意义的异常。 经由不同的事务管理对象，Spring支持JTA和JDBC事务。Spring 也提供对Hibernate和JDO的支持，它的这种支持由与JdbcTemplate类的作用相类似的HibernateTemplate类和JdoTemplate类, 以及HibernateInterceptor类、JdoInterceptor类，还有Hibernate、JDO 事务管理类组成。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       最主要的目的是要使应用的层次分明，为此将数据访问和事务处理同应用对象分离开来。所有的业务对象都不再依赖数据访问或者事务策略。不再有硬编码的资源查找代码，不再有难以替换的单例对象，也不再需要定制服务注册。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">      所有的单独的数据访问特性均无需依赖于Spring，可以单独使用，无需让Spring知道，同时也可以通过Spring的应用配置（提供基于XML的配置和对普通JavaBean实例的交叉引用）来进行装配。在一个典型的Spring应用中，大部分重要的对象都是普通的JavaBean：数据访问模板对象（data access templates）、数据访问对象（使用数据访问模板对象的对象）、事务管理对象及业务对象（使用数据访问对象和事务对象的对象），web表示分解对象、web控制对象（使用业务对象的对象）等等。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">2. 应用配置中的资源定义</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">    为了避免应用对象将资源查找的代码硬编码，Spring允许在应用配置中将一个如JDBC DataSource或者Hibernate SessionFactory定义为一个Bean。应用对象如果需要访问资源只需要通过Bean引用（DAO定义在下一部分说明）接受先前定义的实例的引用。以下的内容引用自一个应用配置定义，显示了如何建立一个JDBC DataSource和一个Hibernate的SessionFactory：</font>
				</font>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<p>
												<font size="2">
														<font color="#a52a2a"> &lt;beans&gt;<br /><br />&lt;bean id="myDataSource" class="org.springframework.jndi</font>
												</font>
										</p>
										<p>
												<font size="2">
														<font color="#a52a2a">.JndiObjectFactoryBean"&gt;<br />&lt;property name="jndiName"&gt;<br />&lt;value&gt;jdbc/myds&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br /><br />&lt;bean id="mySessionFactory" class="org.springframework.orm.hibernate</font>
												</font>
										</p>
										<p>
												<font size="2">
														<font color="#a52a2a">.LocalSessionFactoryBean"&gt;<br />&lt;property name="mappingResources"&gt;<br />&lt;list&gt;<br />&lt;value&gt;product.hbm.xml&lt;/value&gt;<br />&lt;/list&gt;<br />&lt;/property&gt;<br />&lt;property name="hibernateProperties"&gt;<br />&lt;props&gt;<br />&lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.dialect</font>
												</font>
										</p>
										<p>
												<font size="2">
														<font color="#a52a2a">.MySQLDialect&lt;/prop&gt;<br />&lt;/props&gt;<br />&lt;/property&gt;<br />&lt;property name="dataSource"&gt;<br />&lt;ref bean="myDataSource"/&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br /><br />...<br /><br />&lt;/beans&gt;</font>
												</font>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">      注意选择是用JNDI来定位数据源还是从一个象Jakarta Commons DBCP BasicDataSource这样的本地定义取得一个数据源，只是一个改变配置的事：</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<p>
												<font size="2">
														<font color="#a52a2a">&lt;bean id="myDataSource"<br />      class="org.apache.commons</font>
												</font>
										</p>
										<p>
												<font size="2">
														<font color="#a52a2a">.dbcp.BasicDataSource" destroy-method="close"&gt;<br />&lt;property name="driverClassName"&gt;<br />&lt;value&gt;org.hsqldb.jdbcDriver&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="url"&gt;<br />&lt;value&gt;jdbc:hsqldb:hsql://localhost:9001&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="username"&gt;<br />&lt;value&gt;sa&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="password"&gt;<br />&lt;value&gt;&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;</font>
												</font>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">       你也可以使用一个JNDI查找SessionFactory，但是通常对于EJB环境之外的应用来说并不是需要的（参考"container resources vs local resources"部分的讨论）。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">3. 倒置控制（Inversion of Control）: 模板和回调</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">    模板的基本编程模式就象你将在下面看到那样，至于方法就如同任何定制的数据访问对象或者业务的对象的方法一样。除了需要向其提供一个Hibernate的SessionFactory之外，再没有对周围执行对象的信赖的限制。虽然最好是从一个Spring的应用配置中经由一个简单setSessionFactory bean的属性设置使用Bean引用来获得它，但随后你可以从任何地方获得它。随后的引用片段包括一段在Spring应用配置中对DAO定义的配置，其中引用了在其前面定义的SessionFactory，和一段DAO方法的实现的例子。</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<font color="#a52a2a" size="2">&lt;beans&gt;

&lt;bean id="myProductDao" class="product.ProductDaoImpl"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

...

&lt;/beans&gt;</font>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<font color="#a52a2a" size="2">public class ProductDaoImpl implements ProductDao {

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory </font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">   sessionFactory) {
this.sessionFactory = sessionFactory;
}

public List loadProductsByCategory(final String </font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">  category) {
HibernateTemplate hibernateTemplate =
new HibernateTemplate(this.sessionFactory);

return (List) hibernateTemplate.execute(
new HibernateCallback() {
public Object doInHibernate(Session session) throws</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2"> HibernateException {
List result = session.find(
"from test.Product product where product.category=?",
category, Hibernate.STRING);
// do some further stuff with the result list
return result;
}
}
);
}
}</font>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">       一个回调的实现可以被有效地用在任何Hibernate数据访问中。在任何情况下都由HibernateTemplate来管理Session的开闭和自动的多方事务。模板实例是线程安全和可重用的，因此它们可以做为其他类的变量。</font>
				</font>
		</p>
		<p>
				<br />
				<font size="2">
						<font color="#a52a2a">       对于简单的单步的动作，象find, load, saveOrUpdate或者delete的调用，HibernateTemplate提供更为便利的选择以代替象一行的回调的执行。此外，Spring提供了一个方便的基本类，就是HibernateDaoSupport类，它提供了setSessionFactory方法来接受一个SessionFactory，同时提供了getSessionFactory和getHibernateTemplate方法供其继承类使用。将这些结合起来，允许对于典型的需求给出了非常简单的DAO实现：</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<font color="#a52a2a" size="2">public class ProductDaoImpl extends HibernateDaoSupport implements</font>
														</pre>
														<pre class="code">
																<font color="#a52a2a" size="2"> ProductDao {

public List loadProductsByCategory(String category) {
return getHibernateTemplate().find(
"from test.Product product where product.category=?", category,
Hibernate.STRING);
}
}</font>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font color="#a52a2a">
				</font>
				<font size="2">
				</font>
		</p>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">4. 应用一个AOP拦截器代替一个模板</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">   除使用HibernateTemplate之外的另一个选择就是使用Spring的AOP HibernateInterceptor。用直接在一个委托的try/catch块中编写Hibernate代码，配合相应的在应用配置中分别的拦截器配置来代替执行回调。下面的片段显示了一个Spring应用配置中的DAO, interceptor和proxy的各自的定义，同时给出了一个DAO方法实现的例子：</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<pre class="code">
																		<font color="#a52a2a" size="2">&lt;beans&gt;

...

&lt;bean id="myHibernateInterceptor"
      class="org.springframework.orm.hibernate</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.HibernateInterceptor"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductDaoTarget" class="product.ProductDaoImpl"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductDao" class="org.springframework.aop</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.framework.ProxyFactoryBean"&gt;
&lt;property name="proxyInterfaces"&gt;
&lt;value&gt;product.ProductDao&lt;/value&gt;
&lt;/property&gt;
&lt;property name="interceptorNames"&gt;
&lt;list&gt;
&lt;value&gt;myHibernateInterceptor&lt;/value&gt;
&lt;value&gt;myProductDaoTarget&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;

...

&lt;/beans&gt;</font>
																</pre>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<font color="#a52a2a" size="2"> </font>
																<pre class="code">
																		<font color="#a52a2a" size="2">public class ProductDaoImpl extends HibernateDaoSupport </font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">   implements ProductDao {

public List loadProductsByCategory(final String category)</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2"> throws MyException {
Session session = SessionFactoryUtils</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.getSession(getSessionFactory(), false);
try {
List result = session.find(
"from test.Product product where product.category=?",
category, Hibernate.STRING);
if (result == null) {
throw new MyException("invalid search result");
}
return result;
}
catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}
}
}
</font>
																</pre>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">        这个方法将只在有一个与它配合的HibernateInterceptor时才能正常工作，HibernateInterceptor为它负责在方法调用前线程绑定Session的开启和方法调用后的关闭。getSession方法调用中的"false"标志是要确认Session必须是已经存在的，如果没有发现任何一个Session，SessionFactoryUtils将会为其创建一个。如果已经有一个Session句柄绑定在本线程上，比如是由一个HibernateTransactionManager事务绑定的，在任何情况下SessionFactoryUtils会自动接入这个Session。HibernateTemplate在底层也使用SessionFactoryUtils，与以上说的方式基本是一样的。</font>
				</font>
		</p>
		<p>
				<font color="#a52a2a" size="2">       HibernateInterceptor的主要益处是它允许在数据访问代码中抛出checked application exception，而HibernateTemplate由于受限于回调只能在其中抛出unchecked exceptions。注意到这点我们可以推迟各自的检验，同时在回调后抛出应用异常。拦截方式的主要缺点是它需要在配置中进行特殊的配置。HibernateTemplate在大多数情况下都是一种简单好用的方法。<br /></font>
		</p>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">5. 程序事务划分</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">   在这种底层的数据访问服务之上，事务处理可以在更高的应用层被划分 ，形成一些操作。这里除了需要一个Spring的PlatformTransactionManager对象外，对于周围运行的业务对象也没有任何限制。同样的，其后你可以从任何地方获得它们，但是经由Bean引用的方式通过setTransactionManage方法获得更为适合，象productDAO要经由一个setProductDao方法获得一样。下面的引用片段显示了在一个Spring应用配置中的事务管理对象和业务对象的定义，并且还提供了一个业务方法实现的例子：</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<pre class="code">
																		<font color="#a52a2a" size="2">&lt;beans&gt;

...

&lt;bean id="myTransactionManager"
      class="org.springframework.orm.hibernate</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.HibernateTransactionManager"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductService" class="product.ProductServiceImpl"&gt;
&lt;property name="transactionManager"&gt;
&lt;ref bean="myTransactionManager"/&gt;
&lt;/property&gt;
&lt;property name="productDao"&gt;
&lt;ref bean="myProductDao"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;/beans&gt;</font>
																</pre>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<font color="#a52a2a" size="2"> </font>
																<pre class="code">
																		<font color="#a52a2a" size="2">public class ProductServiceImpl implements ProductService {

private PlatformTransactionManager transactionManager;
private ProductDao productDao;

public void setTransactionManager(PlatformTransactionManager </font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">  transactionManager) {
this.transactionManager = transactionManager;
}

public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}

public void increasePriceOfAllProductsInCategory(final String </font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">  category) {
TransactionTemplate transactionTemplate =
new TransactionTemplate(this.transactionManager);
transactionTemplate.setPropagationBehavior(TransactionDefinition</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">    .PROPAGATION_REQUIRED);
transactionTemplate.execute(
new TransactionCallbackWithoutResult() {
public void doInTransactionWithoutResult(TransactionStatus </font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">  status) {
List productsToChange = productDAO.loadProductsByCategory(category);
...
}
}
);
}
}</font>
																</pre>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">6. 声明性事务划分</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       我们还可以选择使用Spring的AOP TransactionInterceptor通过在应用配置中定义拦截器配置来代替事务划分代码的事务处理方式。这允许我们保持业务对象独立于每个业务对象中重复的事务划分代码。此外，事务行为和隔离层次的变化可以通过一个配置文件来改变而不需要对业务对象的实现造成影响。</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<font color="#a52a2a" size="2">&lt;beans&gt;

...

&lt;bean id="myTransactionManager"
      class="org.springframework.orm.hibernate</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">.HibernateTransactionManager"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myTransactionInterceptor"
      class="org.springframework.transaction</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">.interceptor.TransactionInterceptor"&gt;
&lt;property name="transactionManager"&gt;
&lt;ref bean="myTransactionManager"/&gt;
&lt;/property&gt;
&lt;property name="transactionAttributeSource"&gt;
&lt;value&gt;
product.ProductService.increasePrice*=PROPAGATION_REQUIRED
product.ProductService.someOtherBusinessMethod=</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">PROPAGATION_MANDATORY
&lt;/value&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductServiceTarget" class="product</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">.ProductServiceImpl"&gt;
&lt;property name="productDao"&gt;
&lt;ref bean="myProductDao"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductService" class="org.springframework.aop</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">.framework.ProxyFactoryBean"&gt;
&lt;property name="proxyInterfaces"&gt;
&lt;value&gt;product.ProductService&lt;/value&gt;
&lt;/property&gt;
&lt;property name="interceptorNames"&gt;
&lt;list&gt;
&lt;value&gt;myTransactionInterceptor&lt;/value&gt;
&lt;value&gt;myProductServiceTarget&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;/beans&gt;</font>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<font color="#a52a2a" size="2"> </font>
												<pre class="code">
														<font color="#a52a2a" size="2">public class ProductServiceImpl implements ProductService {

private ProductDao productDao;

public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}

public void increasePriceOfAllProductsInCategory(final String</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2"> category) {
List productsToChange = this.productDAO</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">.loadProductsByCategory(category);
...
}
}</font>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">      如同使用HibernateInterceptor一样，TransactionInterceptor允许任何checked application exception从回调代码中抛出，而TransactionTemplate受回调限制在其内部抛出unchecked exceptions，在出现一个unchecked application exception的情况时，TransactionTemplate将引发一个回滚或者这个事务由应用（通过事务状态）标记为回滚。TransactionInterceptor默认情况也是同样的行为，但是允许为每一个方法制定回滚策略。<br />       建立声明性事务的一个便利的方式是使用TransactionProxyFactoryBean，特别是如果没有其他AOP拦截器的话，TransactionProxyFactoryBean将联合定义为代理的自身与一个特殊的目标Bean的事务配置。这将减少一个代理Bean对应一个目标Bean的配置情况。此外，你不必指定哪个接口或者哪个类必须定义事务方法。</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<pre class="code">
																		<font color="#a52a2a" size="2">&lt;beans&gt;

...

&lt;bean id="myTransactionManager"
      class="org.springframework.orm.hibernate</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.HibernateTransactionManager"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductServiceTarget" class="product</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.ProductServiceImpl"&gt;
&lt;property name="productDao"&gt;
&lt;ref bean="myProductDao"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductService"
      class="org.springframework.transaction.interceptor</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.TransactionProxyFactoryBean"&gt;
&lt;property name="transactionManager"&gt;
&lt;ref bean="myTransactionManager"/&gt;
&lt;/property&gt;
&lt;property name="target"&gt;
&lt;ref bean="myProductServiceTarget"/&gt;
&lt;/property&gt;
&lt;property name="transactionAttributes"&gt;
&lt;props&gt;
&lt;prop key="increasePrice*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
&lt;prop key="someOtherBusinessMethod"&gt;PROPAGATION_MANDATORY&lt;/prop&gt;
&lt;/props&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;/beans&gt;
</font>
																</pre>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">7. 事务管理策略</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">          对于Hibernate应用来说，无论是TransactionTemplate还是TransactionInterceptor都是委托验实际的事务处理给PlatformTransactionManager实例，可以是一个HibernateTransactionManager（由一个单一的Hibernate的SessionFactory，使用一个ThreadLocal Session）或者可以是一个JtaTransactionManager（代理容器的JTA子系统）。甚至你可以使用一个自定义的PlatformTransactionManager实现。<br />       如果选择从本地Hibernate事务管理转为由JTA来进行事务管理，例如：当你的应用的部署面对分布的事务需求时，也仅仅是改变一下配置的事。只要简单地将Hibernate的事务管理换为JTA事务实现即可。所有的事务划分和数据访问无需做任何变动仍可以继续工作，因为他们使用的都是普通的事务管理API。<br />       对于分布式的事务会跨越多个Hibernate的session factories，仅仅是联合JtaTransactionManager与多个LocalSessionFactoryBean定义作为事务策略。你的每一个DAO将通过它们各自的Bean属性得到一个特殊的SessionFactory的引用。如果这一切都是在下面的JDBC数据源是事务容器，一个业务对象可以划分事务跨越很多DAO和很多session factories而无需做特别的处理，对于使用JtaTransactionManager做为事务策略也是一样的。</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<pre class="code">
																<font color="#a52a2a" size="2"> </font>
																<pre class="code">
																		<font color="#a52a2a" size="2">&lt;beans&gt;

&lt;bean id="myDataSource1" class="org.springframework.jndi</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">.JndiObjectFactoryBean"&gt;
&lt;property name="jndiName"&gt;
&lt;value&gt;jdbc/myds1&lt;/value&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myDataSource2" class="org.springframework.jndi.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">JndiObjectFactoryBean"&gt;
&lt;property name="jndiName"&gt;
&lt;value&gt;jdbc/myds2&lt;/value&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="mySessionFactory1"
      class="org.springframework.orm.hibernate.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">LocalSessionFactoryBean"&gt;
&lt;property name="mappingResources"&gt;
&lt;list&gt;
&lt;value&gt;product.hbm.xml&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;property name="hibernateProperties"&gt;
&lt;props&gt;
&lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.dialect.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">MySQLDialect&lt;/prop&gt;
&lt;/props&gt;
&lt;/property&gt;
&lt;property name="dataSource"&gt;
&lt;ref bean="myDataSource1"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="mySessionFactory2"
      class="org.springframework.orm.hibernate.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">LocalSessionFactoryBean"&gt;
&lt;property name="mappingResources"&gt;
&lt;list&gt;
&lt;value&gt;inventory.hbm.xml&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;property name="hibernateProperties"&gt;
&lt;props&gt;
&lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">dialect.OracleDialect&lt;/prop&gt;
&lt;/props&gt;
&lt;/property&gt;
&lt;property name="dataSource"&gt;
&lt;ref bean="myDataSource2"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myTransactionManager"
      class="org.springframework.transaction.jta.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">JtaTransactionManager"/&gt;

&lt;bean id="myProductDao" class="product.ProductDaoImpl"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory1"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myInventoryDao" class="product.InventoryDaoImpl"&gt;
&lt;property name="sessionFactory"&gt;
&lt;ref bean="mySessionFactory2"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductServiceTarget" class="product.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">ProductServiceImpl"&gt;
&lt;property name="productDao"&gt;
&lt;ref bean="myProductDao"/&gt;
&lt;/property&gt;
&lt;property name="inventoryDao"&gt;
&lt;ref bean="myInventoryDao"/&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="myProductService"
      class="org.springframework.transaction.interceptor.</font>
																</pre>
																<pre class="code">
																		<font color="#a52a2a" size="2">TransactionProxyFactoryBean"&gt;
&lt;property name="transactionManager"&gt;
&lt;ref bean="myTransactionManager"/&gt;
&lt;/property&gt;
&lt;property name="target"&gt;
&lt;ref bean="myProductServiceTarget"/&gt;
&lt;/property&gt;
&lt;property name="transactionAttributes"&gt;
&lt;props&gt;
&lt;prop key="increasePrice*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;
&lt;prop key="someOtherBusinessMethod"&gt;PROPAGATION_MANDATORY&lt;/prop&gt;
&lt;/props&gt;
&lt;/property&gt;
&lt;/bean&gt;

&lt;/beans&gt;</font>
																</pre>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">       无论是HibernateTransactionManager还是JtaTransactionManager允许适当的对Hibernate的在JVM层次的缓存处理-不需要容器-提供特殊的事务查找或者JCA连接器（只要不使用EJB发起事务）。另外，HibernateTransactionManager能输出JDBC连接供通常的JDBC访问代码使用。这样就允许在高层次上的事务划分是混合了Hibernate与JDBC而不要JTA的，只要只是访问一个数据库就可以！</font>
				</font>
		</p>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">8. 使用Spring管理应用的Bean</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">        一个Spring应用配置定义可以被多种配置实现所加载，从FileSystemXmlApplicationContext和ClassPathXmlApplicationContext到XmlWebApplicationContext。这就允许在各种环境下重用Spring管理的数据访问和业务对象。默认情况下，一个Web应用将有它自己的定义在“WEB-INF/applicationContext.xml”中的根配置。<br />       在任何一个Spring应用中，一个应用配置定义在一个XML格式的文件中用来对应用的所有有关的Bean进行装配，从Hibernate的session factory到自定义的数据访问和业务对象（象上面所有的Bean那样）。他们中的大多数不需要Spring容器知道他们，甚至即使是与其他Bean合作时也一样，因为他们只是简单的JavaBean之间的协作。下面的Bean定义可能是一个Spring Web 的MVC配置中用来访问业务对象的配置的一部分。</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<font color="#a52a2a" size="2"> </font>
												<pre class="code">
														<pre class="code">
																<font color="#a52a2a" size="2">&lt;bean id="myProductList" class="product.ProductListController"&gt;
&lt;property name="productService"&gt;
&lt;ref bean="myProductService"/&gt;
&lt;/property&gt;
&lt;/bean&gt;</font>
														</pre>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<font color="#a52a2a">      Spring的Web控制器经由Bean引用拥有它们需要的所有的业务和数据访问对象，因此它们无需在应用配置中做任何手工的Bean查找。但是当使用Spring管理的Beans用于Struts或者是在EJB实现，或者一个applet中时常常是需要必须手工查找一个Bean的。因此Spring的Bean可以被用在任何地方。也许只是需要是一应用配置的引用，或者经由一个web容器的Servlet配置属性，或者从一个文件中或者类路径的资源中创建它。</font>
				</font>
		</p>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<pre class="code">
														<font color="#a52a2a" size="2">ApplicationContext context =WebApplicationContextUtils.</font>
												</pre>
												<pre class="code">
														<font color="#a52a2a" size="2">getWebApplicationContext(servletContext);
ProductService productService =
(ProductService) context.getBean("myProductService");</font>
												</pre>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<font color="#a52a2a" size="2"> ApplicationContext context =
new FileSystemXmlApplicationContext("C:/myContext.xml");
ProductService productService =
(ProductService) context.getBean("myProductService");
</font>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
		</p>
		<table style="BORDER-COLLAPSE: collapse" bordercolor="#cccccc" cellspacing="0" cellpadding="2" width="400" align="center" bgcolor="#cccccc" border="1">
				<tbody>
						<tr>
								<td>
										<pre class="code">
												<font color="#a52a2a" size="2"> ApplicationContext context =
new ClassPathXmlApplicationContext("myContext.xml");
ProductService productService =
(ProductService) context.getBean("myProductService");</font>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font size="2">
						<strong>
								<font color="#a52a2a">9. 容器资源VS本地资源</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       Spring的资源管理允许简单地在一个JNDI SessionFactory和一个本地SessionFactory间做选择，同样允许在一个JNDI DataSource与本地DataSource间做选择，而无需改变应用的一行代码。在容器中保存资源定义还是在应用本地保存，主要是一个事务策略方面的事。比较一个Spring定义的本地SessionFactory与一个手工注册的JNDI SessionFactory没有任何益处。如果经由Hibernate的JCA连接器注册，才会有加入JTA事务的明显益处，特别是对EJB。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       一个重要的Spring事务提供的好处是它不与任何容器绑定。定义包括JTA在内的策略，它都可以独立工作或者在一个试验环境中工作。特别是对典型的一个数据库的事务来说，对于JTA这是一个非常轻量的和强大的选择。当使用本地EJB SLSB的事务时，你将同时依赖EJB容器和JTA-即使你只是访问一个数据库，即使只是使用SLSBs经由CMT来声明事务。选择使用 JTA编程也需要一个J2EE环境。</font>
				</font>
		</p>
		<p>
				<font color="#a52a2a" size="2">       就JTA自身和JNDI数据源来说JTA不只是包括容器依赖。对于不使用Spring的JTA驱动的Hibernate事务，你必须使用HibernateJCA连接器或者在合适的JVM缓冲层专门写Hibernate的事务代码配置JTA事务。在只访问一个数据库的情况下，Spring驱动的事务可以与一个本地定义的Hibernate的SessionFactory配合良好，就如同与一个本地JDBC数据源相配合一样。因此当面对分布的事务需求时，你只需要转换为Spring的JTA事务策略即可。 </font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       要注意一个JCA连接器需要特别的容器的部署步骤，并且显然首先得支持JCA。这比使用本地资源定义和Spring驱动事务来部署一个简单的Web应用有更多的争议。而且你常常需要企业版本的容器支持，象WebLogic Express就不提供JCA。一个只用一个数据库的使用本地资源和事务的Spring应用可以在任何J2EE的Web容器中工作，Web容器不必支持JTA, JCA和EJB，如：Tomcat, Resin甚至最小的Jetty。另外，这样一个中间层就可以很容易地在桌面应用或者在测试套件中被重用。</font>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">       所有考虑过的事情包括：如果你不使用EJB，坚持使用本地SessionFactory，使用SpringHibernateTransactionManager或者JtaTransactionManager，你将获得包括适当处理的JVM层的缓存和分布事务的所有益处，而无需引起任何关于容器部署的争论。经由JCA连接器的一个Hibernate的SessionFactory的JNDI注册只是在使用EJB的情况中才会有明显的附加值。</font>
				</font>
		</p>
		<p>
				<br />
				<font size="2">
						<strong>
								<font color="#a52a2a">10. Skeletons和例子</font>
						</strong>
				</font>
		</p>
		<p>
				<font size="2">
						<font color="#a52a2a">      配置使用Spring和HIbernate的一个J2EE的Web应用的注释和细节最好去看看在Spring Framework的例子中的“典型的Web应用”Skeletons，它给出了适合于JDBC 和 Hibernate应用的多种数据源及事务管理的配置项，仔细看一下事务拦截器的配置，它也同样向你展示了如何配置AOP拦截器。</font>
				</font>
		</p>
		<p>
				<font color="#a52a2a" size="2">      在Spring的1.0 M2版中，例子Petclinic提供了JDBC和Hibernate的DAO实现和应用配置的选择。Petclinic<br />可以作为一个可工作的简单应用说明如何在一个Spring web 应用中使用Hibernate，同样也包括根据不同的事务策略来声明事务划分。<br /></font>
		</p>
		<h2>
				<font color="#a52a2a" size="2">Links</font>
		</h2>
		<p>
				<a href="http://www.springframework.org/" target="_blank">
						<font color="#a52a2a" size="2">Spring Framework website</font>
				</a>
				<font size="2">
				</font>
		</p>
		<p>
				<a href="http://www.springframework.org/documentation.html" target="_blank">
						<font color="#a52a2a" size="2">Spring Framework documentation</font>
				</a>
				<font size="2">
				</font>
		</p>
<img src ="http://www.blogjava.net/cmd/aggbug/54308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-06-21 17:17 <a href="http://www.blogjava.net/cmd/archive/2006/06/21/54308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>液晶面板小知识</title><link>http://www.blogjava.net/cmd/archive/2006/04/17/41495.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Mon, 17 Apr 2006 11:01:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/04/17/41495.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/41495.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/04/17/41495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/41495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/41495.html</trackback:ping><description><![CDATA[
		<font size="2">VA型：VA型液晶面板在目前的显示器产品中应用较为广泛，16.7M色彩和大可视角度是它最为明显的技术特点，目前VA型面板分为两种，一种为MVA
型，另一种为PVA型。其中MVA是富士通主导的一种面板类型，它的全称为(Multi-domain Vertical
Alignment)，是一种多象限垂直配向技术。它是利用突出物使液晶静止时并非传统的直立式，而是偏向某一个角度静止；当施加电压让液晶分子改变成水
平以让背光通过则更为快速，这样便可以大幅度缩短显示时间，也因为突出物改变液晶分子配向，让视野角度更为宽广。在视角的增加上可达160度以上，反应时
间缩短至20ms以内。<br />　　而PVA则是三星推出的一种面板类型，它在富士康MVA面板的基础上有了进一步的发展和提高，是一种图像垂直调整技
术，该技术直接改变液晶单元结构，让显示效能大幅提升可以获得优于MVA的亮度输出和对比度。此外在这两种类型基础上又延出改进型S-PVA和P-MVA
两种面板类型，在技术发展上更趋向上，可视角度可达170度，响应时间被控制在20毫秒以内（采用Overdrive加速达到8ms
GTG），而对比度可轻易超过700:1的高水准，三星自产品牌的大部份产品都为PVA液晶面板。<br />IPS型：它也是目前主要的一种液晶面板类型，
由日本日立于2001年推出，液晶分子平面切换的方式来改善视角，利用空间厚度、摩擦强度并有效利用横向电场驱动的改变让液晶分子做最大的平面旋转角度来
增加视角；在商品的制造上不须额外加补偿膜，显示视觉上对比也很高。在视角的提升上可达到160度，响应时间缩短至40ms以内。所以IPS型液晶面板具
有可视角度大、颜色细腻等优点，看上去比较通透，不过响应时间较慢和对比度较难提高也是这类型面板一个比较明显的缺点。IPS即第一代IPS技术，它已经
实现了较好的可视角度。而S-IPS则为第二代IPS技术，它又引入了一些新的技术，以改善IPS模式在某些特定角度的灰阶逆转现象。
其LG-飞利浦自主的面板制造商也是以IPS为技术特点推出的液晶面板。<br />TN型：这种类型的液晶面板应该算是应用于入门级和中端的面板产品，最为
重要的有一点就是价格实惠、低廉，成为众多厂商选用的产品。在技术上，与前两种类型的液晶面板相比在技术性能上略为逊色，它不能表现出16.7M艳丽色
彩，并且可视角度也受到了一定的限制。之所以TN型这种面板产品仍然是众多厂商采用的主力还是因为由于他的输出灰接级数较少，液晶分子偏转速度快，致使它
的响应时间容易提高，据资料显示一些现在市场上一般在8ms响应时间以内的产品大多都采用的是TN液晶面板。<br /><br />在白屏情况下为纯黑色的点或者在黑屏下为纯白色的点。在切换至红、绿、蓝三色显示模式下此点始终在同一位置上并且始终为纯黑色或纯白色的点。这种情况说明该像素的R、G、B三个子像素点均已损坏，此类点称为坏点。<br />亮点<br />　　在黑屏的情况下呈现的R、G、B（红、绿、蓝）点叫做亮点。<br />亮点的出现分为两种情况：<br />①	在黑屏的情况下单纯地呈现R或者G或者B色彩的点。<br />黑屏下的红点<br />②在切换至红、绿、蓝三色显示模式下，只有在R或者G或者B中的一种显示模式下有白色点，同时在另外两种模式下均有其他色点的情况，这种情况是在同一像素中存在两个亮点。<br />●暗点<br />在白屏的情况下出现非单纯R、G、B的色点叫做暗点。<br />暗点的出现分为两种情况： <br />①在切换至红、绿、蓝三色显示模式下，在同一位置只有在R或者G或者B一种显示模式下有黑点的情况，这种情况表明此像素内只有一个暗点。 <br />②在切换至红、绿、蓝三色显示模式下，在同一位置上在R或者G或者B中的两种显示模式下都有黑点的情况，这种情况表明此像素内有两个暗点。<br />黑屏下的红点<br />②在切换至红、绿、蓝三色显示模式下，只有在R或者G或者B中的一种显示模式下有白色点，同时在另外两种模式下均有其他色点的情况，这种情况是在同一像素中存在两个亮点。<br />●暗点<br />在白屏的情况下出现非单纯R、G、B的色点叫做暗点。<br />暗点的出现分为两种情况： <br />①在切换至红、绿、蓝三色显示模式下，在同一位置只有在R或者G或者B一种显示模式下有黑点的情况，这种情况表明此像素内只有一个暗点。 <br />②在切换至红、绿、蓝三色显示模式下，在同一位置上在R或者G或者B中的两种显示模式下都有黑点的情况，这种情况表明此像素内有两个暗点。</font>
<img src ="http://www.blogjava.net/cmd/aggbug/41495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-04-17 19:01 <a href="http://www.blogjava.net/cmd/archive/2006/04/17/41495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN使用技巧</title><link>http://www.blogjava.net/cmd/archive/2006/04/17/41401.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Sun, 16 Apr 2006 18:29:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/04/17/41401.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/41401.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/04/17/41401.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/41401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/41401.html</trackback:ping><description><![CDATA[
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">程序员编写程序的过程中，每个程序都会有很多不同的版本，这就需要程序员很好的管理代码，在需要的时间可以取出需要的版本，并且每个版本都有一个完整的说明。</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">我们使用</span>Sub Version<span style="font-family: 宋体;">（简称</span>SVN<span style="font-family: 宋体;">）作为版本管理工具。这里着重介绍</span>SVN<span style="font-family: 宋体;">作为跨平台的多人协作使用方法。在多个程序员管理同一段代码的过程中，版本的管理显得尤为重要，使用</span>SVN<span style="font-family: 宋体;">可以方便的进行分支、合并，记录下所有的版本。</span></font>
		</p>
		<font size="2">
				<a name="_Toc121547261">
				</a>
				<span>
						<span style="font-family: 宋体;">基本配置</span>
				</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在开始某项软件、文档的开发与撰写时，首先由配置管理负责人建立</span>SVN<span style="font-family: 宋体;">仓库、用户名及其权限，并通知相关人员</span>SVN<span style="font-family: 宋体;">仓库地址、</span>SVN<span style="font-family: 宋体;">仓库负责人。</span></font>
		</p>
		<font size="2">
				<a name="_Toc121547262">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">SVN<span style="font-family: 宋体;">仓库的负责人把工程的</span>tsvn:logminisize<span style="font-family: 宋体;">设置为</span>1<span style="font-family: 宋体;">，以便强制注释。设置方法：在你的工程文件夹右键</span>-&gt;<span style="font-family: 宋体;">属性中，进入</span>Subversion<span style="font-family: 宋体;">标签，选中</span>tsvn: logminisize<span style="font-family: 宋体;">，确保复选框</span>recursive<span style="font-family: 宋体;">选中，然后点击</span>Set<span style="font-family: 宋体;">按钮把它的值设为</span>1<span style="font-family: 宋体;">，其意思是指提交的注释最短长度为一个字。如图：</span></font>
		</p>
		<p style="margin-left: 60pt; text-indent: 24pt;" class="a">
				<font size="2">
						<img src="http://xyzboard.com/xyz_img/devlop/image002.jpg" border="0" height="541" width="397" />
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>1</span>
						</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547263">
				</a>
				<span>
						<span style="font-family: 宋体;">软件配置</span>
				</span>
		</font>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">忽略文件</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在</span>
						<span>SVN </span>
						<span style="font-family: 宋体;">的</span>
						<span>[Setting]</span>
						<span style="font-family: 宋体;">的</span>
						<span>[General]</span>
						<span style="font-family: 宋体;">中</span>
						<span style="font-family: 宋体;">，</span>
						<span style="font-family: 宋体;">设置需要忽略的文件以便忽略掉一些临时的、无用的文件</span>
						<span style="font-family: 宋体;">，</span>
						<span style="font-family: 宋体;">常被忽略的文件有</span>
						<span>*.opt *.ncb *.suo *.plg *.pch *.idb *.pdb *.scc *.obj Debug Release *.o *.bin *.out *.ilk *.aps debug release *.clw *.bak</span>
						<span style="font-family: 宋体;">。每个程序员可以根据自己的需要进行修改忽略文件，上面只是使用</span>VC++<span style="font-family: 宋体;">与</span>Tornado<span style="font-family: 宋体;">编程时常用的一些忽略文件。</span><img src="http://xyzboard.com/xyz_img/devlop/image004.jpg" border="0" height="371" width="586" /></font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>2</span>
						</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">以上说的忽略文件是指全局的忽略文件。</span>SVN<span style="font-family: 宋体;">还能在特定的目录中指定需要忽略的文件。忽略文件支持通配符。</span></font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">合并比较工具</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在</span>Merge Tool<span style="font-family: 宋体;">中可以选择用来合并的工具，强烈推荐用</span>Araxis Merge<span style="font-family: 宋体;">。在</span>[Setting]-&gt;[Diff]<span style="font-family: 宋体;">中填入</span>"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe"<span style="font-family: 宋体;">；在</span>[Setting]-&gt;[Merge]<span style="font-family: 宋体;">的选项中，填入</span>"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe" %theirs %mine %merged <span style="font-family: 宋体;">；其中</span>"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe"<span style="font-family: 宋体;">是指合并工具的路径，</span>%theirs %mine %merged<span style="font-family: 宋体;">分别指</span>..<span style="font-family: 宋体;">将要合并到主干的分支，主干，及合并后的结果。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<img src="http://xyzboard.com/xyz_img/devlop/image006.jpg" border="0" height="371" width="586" />
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>3</span>
						</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547264">
				</a>
				<span>
						<span style="font-family: 宋体;">仓库目录结构</span>
				</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">SVN<span style="font-family: 宋体;">仓库的负责人规划好仓库的目录结构。推荐的目录结构如下图所示。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">仓库的一级目录只有两个，分别为</span>code<span style="font-family: 宋体;">和</span>doc<span style="font-family: 宋体;">。其中，</span>doc<span style="font-family: 宋体;">主要用来放置先期的文档，</span>code<span style="font-family: 宋体;">主要用来放置工程的代码，也可以包含后期的文档。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">仓库的二级目录只可以是</span>branch<span style="font-family: 宋体;">与</span>trunk<span style="font-family: 宋体;">两个目录，分别存放主干与分支。</span>trunk<span style="font-family: 宋体;">目录下直接存放工程文件。</span>branch<span style="font-family: 宋体;">目录下包括一些子目录分别对应各个分支。</span></font>
		</p>
		<p style="text-align: center;" class="MsoNormal" align="center">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image008.jpg" border="0" height="445" width="586" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>4</span>
						</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547265">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">从</span>
						<span>SVN</span>
						<span style="font-family: 宋体;">仓库中取出代码时</span>
						<span style="font-family: 宋体;">，一定</span>
						<span style="font-family: 宋体;">不要把整个仓库取出来</span>
						<span style="font-family: 宋体;">，</span>
						<span style="font-family: 宋体;">而应该只取出</span>
						<span>trunk</span>
						<span style="font-family: 宋体;">目录</span>
						<span style="font-family: 宋体;">，</span>
						<span style="font-family: 宋体;">或只取出</span>
						<span>branch</span>
						<span style="font-family: 宋体;">下的某个分支目录</span>
						<span style="font-family: 宋体;">（比</span>
						<span style="font-family: 宋体;">如上图中的</span>
						<span>svn:\\code\branch\xw_051206</span>
						<span style="font-family: 宋体;">）</span>
						<span style="font-family: 宋体;">。</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547266">
				</a>
				<a name="_Toc121547267">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">一个项目会有多个人共同合作开发完成。基本流程是：</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">各开发成员建立自己的分支，并在此分支上开发；</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">各开发成员把分支合并到主干上并形成较为稳定的版本；</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">各个成员重新从主干上建立新的分支，在此分支上开发</span>
						<span>(</span>
						<span style="font-family: 宋体;">即回到第一步</span>
						<span>)</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">循环往复，直到工程结束。</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">下面我用一个例子来说明合作开发的基本流程。</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">现在</span>xb<span style="font-family: 宋体;">与</span>lzj<span style="font-family: 宋体;">两个开发人员要共同开发一个工程</span>onlytest<span style="font-family: 宋体;">，其这个工程的主干的</span>SVN<span style="font-family: 宋体;">仓库地址如下图。</span></font>
		</p>
		<p style="text-align: center;" class="MsoNormal" align="center">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image010.jpg" border="0" height="309" width="450" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>5</span>
						</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547268">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">xb<span style="font-family: 宋体;">与</span>lzj<span style="font-family: 宋体;">分别在</span>onlytest<span style="font-family: 宋体;">这个工程中建立两个分支，分别为</span>xb _051115<span style="font-family: 宋体;">和</span>lz_051115<span style="font-family: 宋体;">。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在这里分支命名要采用</span>[<span style="font-family: 宋体; color: rgb(51, 153, 102);">姓名缩写</span><span style="color: rgb(51, 153, 102);">_6</span><span style="font-family: 宋体; color: rgb(51, 153, 102);">个数的日期</span><span style="color: rgb(51, 153, 102);">_</span><span style="font-family: 宋体; color: rgb(51, 153, 102);">后缀</span>(<span style="font-family: 宋体;">可选</span>)]<span style="font-family: 宋体;">的形式，比如</span>xb_051208_1<span style="font-family: 宋体;">，</span>xb_051212<span style="font-family: 宋体;">之类的。创建完分支后我们可以看到这个工程的目录结构如下图所示：</span></font>
		</p>
		<p style="text-align: center;" class="MsoNormal" align="center">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image012.jpg" border="0" height="426" width="586" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>6</span>
						</span>
						<span style="font-family: 宋体;">分支目录</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">建完之后，</span> xb<span style="font-family: 宋体;">和</span>lzj<span style="font-family: 宋体;">分别在本地取出对应的分支进行开发。</span></font>
		</p>
		<font size="2">
				<a name="_Toc121547269">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">当</span>
						<span style="font-family: 宋体;">程序到达一个比较稳定的阶段，就需要把分支合并到主干上，下面讲述一下合并的流程。</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在本节中继续使用上一节中所示的工程与</span>SVN<span style="font-family: 宋体;">仓库讲解。</span></font>
		</p>
		<font size="2">
				<span>
						<span>1.2.3.1 </span>
				</span>
				<span>xb</span>
				<span style="font-family: 黑体;">与</span>
				<span>lzj</span>
				<span style="font-family: 黑体;">分别修改自己分支上的代码</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">现在</span>
						<span style="font-family: 宋体;">，</span>
						<span style="font-family: 宋体;">主干上的</span>
						<span>test_SVN.txt</span>
						<span style="font-family: 宋体;">是空文档。</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">由</span>
						<span>xb</span>
						<span style="font-family: 宋体;">与</span>
						<span>lzj</span>
						<span style="font-family: 宋体;">修改提交后</span>
						<span style="font-family: 宋体;">，</span>
						<span style="font-family: 宋体;">两个分支中</span>
						<span>test_SVN.txt</span>
						<span style="font-family: 宋体;">分别如下两图所示</span>
						<span style="font-family: 宋体;">：</span>
				</font>
		</p>
		<p style="text-align: center;" class="MsoNormal" align="center">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image014.jpg" border="0" height="130" width="321" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>7</span>
						</span>
						<span> xb_051129</span>
						<span style="font-family: 宋体;">分支下的</span>
						<span>test_SVN.txt</span>
				</font>
		</p>
		<p style="text-align: center;" class="MsoNormal" align="center">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image016.jpg" border="0" height="130" width="321" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>8</span>
						</span>
						<span> lzj_051129</span>
						<span style="font-family: 宋体;">分支下的</span>
						<span>test_SVN.txt</span>
				</font>
		</p>
		<font size="2">
				<span>
						<span>1.2.3.2 </span>
				</span>
				<span>xb</span>
				<span style="font-family: 黑体;">将</span>
				<span>xb_051129</span>
				<span style="font-family: 黑体;">分支合并到主干</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span>xb</span>
						<span style="font-family: 宋体;">先把主干</span>
						<span>check out</span>
						<span style="font-family: 宋体;">到本地。然后在主干的目录上右键</span>
						<span style="font-family: 宋体;">选择</span>svn-&gt;merge<span style="font-family: 宋体;">，弹出如下窗口：</span></font>
		</p>
		<p style="text-align: center;" class="MsoNormal" align="center">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image018.jpg" border="0" height="466" width="524" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>9</span>
						</span>
						<span style="font-family: 宋体;">合并对话框</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">此对话框的含义是把</span>From<span style="font-family: 宋体;">指定的分支版本到</span>To<span style="font-family: 宋体;">指定的分支版本之间的差异合并到主干上。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在这里分支选的是</span>xb_051129<span style="font-family: 宋体;">。版本号的选定方法是点击</span>From<span style="font-family: 宋体;">中的</span>Show Log<span style="font-family: 宋体;">，在</span>Log<span style="font-family: 宋体;">窗口中按住</span>Ctrl<span style="font-family: 宋体;">键，点击选择</span>”made a copy”<span style="font-family: 宋体;">之上的那个版本，以及最顶上的那个版本，如</span><span style="font-family: 宋体;">图</span><span>2</span>.<span>11</span><span style="font-family: 宋体;">所示。然后点击确定回到上图中的对话框，会自动填写</span>From<span style="font-family: 宋体;">与</span>To<span style="font-family: 宋体;">中的</span>Revision<span style="font-family: 宋体;">号。</span></font>
		</p>
		<p style="text-indent: 21pt;" class="MsoNormal">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image020.jpg" border="0" height="581" width="585" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<a name="_Ref121716988">
						</a>
						<span>
								<span>
										<span>2</span>
								</span>
						</span>
						<span>
								<span>.</span>
						</span>
						<span>
								<span>
										<span>10</span>
								</span>
						</span>
						<span style="font-family: 宋体;">选择需要合并的版本</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">然后直接点击</span>merge<span style="font-family: 宋体;">进行合并，你也可以通过</span>dry run<span style="font-family: 宋体;">来看是不是两者之间有差异。由于没有其它人修改主干，所以合并的很顺利，下图是</span>xb_051115<span style="font-family: 宋体;">与主干合并后的结果。合并完毕之后，由</span>xb<span style="font-family: 宋体;">对主干进行提交。</span></font>
		</p>
		<p style="text-align: center; text-indent: 24pt;" class="a" align="center">
				<font size="2">
						<img src="http://xyzboard.com/xyz_img/devlop/image022.jpg" border="0" height="130" width="321" />
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>11</span>
						</span>
						<span style="font-family: 宋体;">合并后，主干上的</span>
						<span>test_SVN.txt</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2"> </font>
		</p>
		<font size="2">
				<span>
						<span>1.2.3.3 </span>
				</span>
				<span>lzj</span>
				<span style="font-family: 黑体;">将</span>
				<span>lzj_051129</span>
				<span style="font-family: 黑体;">分支合并到主干，解决冲突</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">xb<span style="font-family: 宋体;">合并完毕之后，</span>lzj<span style="font-family: 宋体;">要将他的分支合并到主干上去，方法同上。但是由于</span>xb<span style="font-family: 宋体;">已经修改过主干，所以产生了冲突，会弹出一个冲突对话框。双击对话框中的产生冲突的文件名，就可以调出工具对此文件进行合并，下图是我们用</span>merge<span style="font-family: 宋体;">工具显示的界面。</span></font>
		</p>
		<p class="MsoNormal">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image023.jpg" border="0" height="382" width="585" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>2</span>
						</span>
						<span>.</span>
						<span>
								<span>12</span>
						</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">首先比较第一个窗口与第二个窗口，把结果修改合并到第二个窗口。</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">然后确保光标处于第二个窗口时，点击上图中红色圈圈所示的按钮。这样会把第二个窗口的内容全部复制到第三个容口。之后保存，退出。</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">然后在工程目录上点右键，进行</span>SVN-&gt;Resolved<span style="font-family: 宋体;">。这样会删除无用的临时文件。</span></font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span style="font-family: Wingdings;">
								<span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">最后提交所作的修改，并添加详细的注释。</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547270">
				</a>
				<a name="_Toc121547271">
				</a>
				<span>
						<span style="font-family: 宋体;">中的标签</span>
				</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">与</span>CVS<span style="font-family: 宋体;">不同，使用</span>SVN<span style="font-family: 宋体;">时不用专门为目录添加标签，因为</span>SVN<span style="font-family: 宋体;">也对目录进行版本管理。</span></font>
		</p>
		<p style="text-indent: 21pt;" class="MsoNormal">
				<font size="2">
						<span style="font-family: 宋体;">我们在提交时写好注释（比如重要的版本提交时使用</span>
						<span>051201</span>
						<span style="font-family: 宋体;">之类的日期作为开头），就可以通过注释来查找比较重要的目录版本号，相当于</span>
						<span>CVS</span>
						<span style="font-family: 宋体;">或</span>
						<span>VSS</span>
						<span style="font-family: 宋体;">中的标签。</span>
				</font>
		</p>
		<p style="text-indent: 21pt;" class="MsoNormal">
				<font size="2">
						<span style="font-family: 宋体;">另外，每个工程都会有一个版本说明文件，通过此文件可以查找关键版本。</span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547272">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">你可以重命名、移动或删除你的文件或文件夹，但请使用</span>SVN<span style="font-family: 宋体;">进行这些操作，否则之前的版本信息会丢失。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">使用</span>SVN<span style="font-family: 宋体;">删除、移动与重命名文件夹的方法是在文件</span>/<span style="font-family: 宋体;">文件夹上点右键进行</span>SVN<span style="font-family: 宋体;">操作，或直接在资源浏览器中使用右键拖放（会弹出</span>SVN<span style="font-family: 宋体;">选项）。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">文件的删除、移动与重命名之前，必须保证工作目录是最新的版本；进行这些操作之后，需要进行提交。</span>
				</font>
		</p>
		<font size="2">
				<span>
						<span>1.3.3 </span>
				</span>
				<span style="font-family: 宋体;">版本的回退</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">在代码的编写过程中，难免会有不尽人意的地方，你也许需要回退到某一个版本，但是在这个过程中可能有一些文件你想保留，也有一些文件你不想保留，这就牵扯到很复杂的版本管理过程，在这里给大家推荐几种方法。</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span>
								<span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">若是你编辑了工程，在没有提交的前提下，你想放弃这些修改，你可以直接选择</span>
						<span>revert</span>
						<span style="font-family: 宋体;">就可以更新到工程的最新的版本。</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span>
								<span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">若是你想退回到某一个版本，你就可以直接选择</span>
						<span>update to reversion</span>
						<span style="font-family: 宋体;">如图</span>
						<span>,</span>
						<span style="font-family: 宋体;">这样我们就可以把我们的版本回退到你选中的版本去，这种情况下</span>
						<span>SVN</span>
						<span style="font-family: 宋体;">并没有显示出有什么冲突，并且新建立的文件也还在，但是在这种情况下你并不能直接在你回退后的版本上进行编辑，因为</span>
						<span>SVN</span>
						<span style="font-family: 宋体;">的版本控制还是在最新的主干上。我们需要</span>
						<span>update</span>
						<span style="font-family: 宋体;">并解决冲突。</span>
						<span>
						</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span>
								<span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">你可以直接选择</span>
						<span>revert changes from this revision</span>
						<span style="font-family: 宋体;">如图，这样的话你可以直接解决冲突并提交。不过这种方法的不足是，你新建的文件都没有了，整个工程都回退到之前的版本了。</span>
				</font>
		</p>
		<p style="margin-left: 45pt; text-indent: -21pt;" class="a">
				<font size="2">
						<span>
								<span>4.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        </span></span>
						</span>
						<span style="font-family: 宋体;">我推荐的一种方法是，直接</span>
						<span>export</span>
						<span style="font-family: 宋体;">一个你需要的版本，然后用你</span>
						<span>export</span>
						<span style="font-family: 宋体;">的版本覆盖你的最新的版本，这样你就可以不丢失你新建的文件，同时获得</span>
						<span>head</span>
						<span style="font-family: 宋体;">的</span>
						<span>SVN</span>
						<span style="font-family: 宋体;">控制文件。</span>
				</font>
		</p>
		<p style="margin-left: 24pt; text-indent: 0pt;" class="a">
				<font size="2">
						<span>
								<img src="http://xyzboard.com/xyz_img/devlop/image025.jpg" border="0" height="563" width="586" />
						</span>
				</font>
		</p>
		<p class="MsoCaption">
				<font size="2">
						<span style="font-family: 宋体;">图</span>
						<span>
								<span>13</span>
						</span>
				</font>
		</p>
		<p class="MsoNormal">
				<font size="2">
						<span> </span>
				</font>
		</p>
		<font size="2">
				<a name="_Toc121547273">
				</a>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">每个工程会有很多个小模块，当某个模块达到稳定的时候，你就需要提交一次，以免写下个模块代码的时候出现不可恢复的错误。</span>
				</font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">每一次提交需要前，需要通过</span>pclint<span style="font-family: 宋体;">检查，保证是一个编译没有错误的版本。当提交比较稳定的版本的时候，同时要修改你的版本号。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<a name="_Toc121547274">
						</a>
				</font>
		</p>
		<font size="2">
				<span>
						<span>
								<span>1.3.5 </span>
						</span>
						<span style="font-family: 宋体;">版本说明文件</span>
				</span>
		</font>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">版本说明文件为</span>xml<span style="font-family: 宋体;">表格，可用</span>excel<span style="font-family: 宋体;">编辑，它会记录下关键的版本信息。</span></font>
		</p>
		<p style="text-indent: 24pt;" class="a">
				<font size="2">
						<span style="font-family: 宋体;">版本说明文件内容如下表。发布版本是指用户对外公布的版本号，后文中有详细描述；</span>Revision<span style="font-family: 宋体;">是</span>SVN<span style="font-family: 宋体;">内部的工程文件夹的版本号。一个发布版本可能对应多个</span>Revision<span style="font-family: 宋体;">：</span></font>
		</p>
		<table style="border: medium none ; border-collapse: collapse;" class="MsoTableGrid" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td style="border: 1pt solid windowtext; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">
														<span style="font-family: 宋体;">发布版本</span>
												</font>
										</p>
								</td>
								<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">Revision </font>
										</p>
								</td>
								<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">
														<span style="font-family: 宋体;">详细说明</span>
												</font>
										</p>
								</td>
						</tr>
						<tr>
								<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0pt 5.4pt; width: 65.4pt;" rowspan="3" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">1,0,0,12</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">76</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify;" class="MsoNormal">
												<font size="2">
														<span style="font-family: 宋体;">加入了抗干扰日志，需长时间测试</span>
												</font>
										</p>
										<p style="text-align: justify;" class="MsoNormal">
												<font size="2">
														<span style="font-family: 宋体;">程序代码进行了重构，已经调试通过</span>
												</font>
										</p>
								</td>
						</tr>
						<tr>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">77</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify;" class="MsoNormal">
												<font size="2">
														<span>xxx @#$%^&amp;</span>
												</font>
										</p>
								</td>
						</tr>
						<tr>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">78</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">
														<span style="font-family: 宋体;">啥</span>...</font>
										</p>
								</td>
						</tr>
						<tr>
								<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">1,0,0,13</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">81</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">
														<span style="font-family: 宋体;">测试过的稳定版本</span>
												</font>
										</p>
								</td>
						</tr>
						<tr>
								<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">1,0,0,14</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">99</font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2">fix some bug<span style="font-family: 宋体;">，没有测试</span></font>
										</p>
								</td>
						</tr>
						<tr>
								<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2"> </font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 65.4pt;" valign="top" width="87">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2"> </font>
										</p>
								</td>
								<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0pt 5.4pt; width: 312.6pt;" valign="top" width="417">
										<p style="text-align: justify; text-indent: 0pt;" class="a">
												<font size="2"> </font>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<font size="2">
				<span> </span>
		</font>
		<table id="attachments">
				<tbody>
						<tr>
								<th>
										<font size="2">附件</font>
								</th>
								<th>
										<font size="2">大小</font>
								</th>
						</tr>
						<tr class="dark">
								<td>
										<font size="2">
												<a href="http://xyzboard.com/files/svn%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E6%95%99%E7%A8%8B.rar">svn版本管理教程.rar</a>
										</font>
								</td>
								<td>
										<font size="2">474.51 KB</font>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/cmd/aggbug/41401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-04-17 02:29 <a href="http://www.blogjava.net/cmd/archive/2006/04/17/41401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>战神</title><link>http://www.blogjava.net/cmd/archive/2006/04/15/41284.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Sat, 15 Apr 2006 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/04/15/41284.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/41284.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/04/15/41284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/41284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/41284.html</trackback:ping><description><![CDATA[
		<font size="2">我是阿瑞斯，战神阿瑞斯。<br />    在被宙斯父神亲自任命为战神的那一刻，我真的很开心，平生首次当众向那个老头子表达了谢意。<br />    战争是我所喜爱的东西，因为那里有我最爱的鲜血与毁灭。<br />    
英勇的战士们一个个倒下，脸上写满各色有趣的表情：有荣誉、有悲伤、有不甘、有平静、有恐惧，还有更多的无奈？兵戈相接的激烈碰撞，战车的马蹄纵横交错，
伴随着死者的哀号和生者的呐喊，混杂着响彻天际的战鼓和号角，如同潮水奔腾般席卷大地。空气中弥散着浓重的血腥和尸臭，大地上燃烧着不尽的战火和军械，直
到心满意足的我挑选出最后的胜者，在无数尸堆的高高顶点上竖起不同色泽的旗帜，发出同一个单词，那也是我最爱的战争结语：VICTORY（胜利）！<br />    我仔细地看，仔细地听，仔细地闻，仔细地说，仔细地尝。<br />    这里的每一个细节都能让我陶醉不已，虽然仅限于战场。<br />    我喜欢享受这种毁灭的快感，那才是最适合我的美学。<br />    <br />    在很久以前，我就发现了一个事实：武力，才是解决问题最快的、也是最有效的办法。<br />    战斗，才是我们奥林匹斯神存在的意义。<br />    在神界，这样的例子举不胜举：老头子的父亲联合十二泰坦神发动叛乱，弑父赢得了世界；老头子又发动泰坦战争，同样将自己的父亲赶下了王座，并把自己的敌人统统锁进了塔耳塔洛斯地狱。<br />    他们打下了天下，靠的是什么？当然是武力！<br />    可是，这种传统的光耀正被现在的神灵们所扭曲。每当我燃起战火时，他们都喜欢耍些小诡计来破坏。在几次挑起战争失败后，我的怒火终于燃到了顶点。<br />    “一群胆小如鼠的神！难道不敢堂堂正正地在战场上决一胜负吗？同样身为奥林匹斯神，我真为有你们这样的兄妹感到蒙羞！”我的愤怒使声线猛然升高八度，整个奥林匹斯山都为之颤抖。<br />    
“请闭上你的嘴巴，平息你的怒火，我的兄弟！你只是渴望着流血和牺牲的发生罢了，并不是跟我们一样追求着至高的荣誉！看看你现在的丑态，跟下界那些好战的
野蛮人有什么不同？你如果不服就让我们请出伟大的父神来评判裁决，让奥林匹斯神这个光荣称号蒙羞的究竟是谁？”智慧女神雅典娜针锋相对地反驳我，作为我死
对头的她虽是一介女流，但却有着难以置信的力量和雄辩滔滔的口才。<br />    我一直对她很反感，因为她代表了我的反面一切。<br />    最让我无法容忍的是，我最尊崇的战争游戏，却被她当成了夸耀自己阴谋诡计的舞台剧本。<br />    我迟早会杀了她的，只要有机会。<br />    但眼前的决战良机我不得不放弃。因为父神出现了，后面跟着老头子的跑腿赫耳墨斯和伊里斯。哼，这两个家伙在战场上不见身影，通风报信倒是一等一的快。<br />    
父神其实早知众神中的不和，但颁布了严禁私斗的禁令后就开始装聋作哑，对众神里的明争暗斗睁一只眼闭一只眼。即使他是奥林匹斯山上的最高主神，两次泰坦大
战的大英雄，但战后他的衰退是明显的。现在的他在我眼里，只是个喜欢搞些阴谋诡计、爱沾花惹草的好色老头子罢了。只是摄于他的权势和神力，整个神界没有谁
敢跟老头子正面作对。<br />    切，还不是靠着武力？不过，只要我有那种力量的话……<br />    “阿瑞斯！”父神的愤怒声音让这种危险的想法很快消失了。因为我已经感到了现在的危险，狡猾的雅典娜已经成功地挑起了父神的愤怒。我不得不跪在父神面前请求他的宽恕，也不得不再听一遍他那千篇一律的训斥。<br />    如果我有父神那种力量的话……当时这个假设虽然没有继续下去，但在我的心底，已经埋下了世袭的叛逆种子。<br />    <br />    轰轰烈烈的特洛伊之战结束了。阿波罗的城池终于在希腊人潮水般的进攻下化为灰烬，作为特洛伊守护神的我也终于迎来了与雅典守护神雅典娜的决战。但纵横沙场的我却惨败于她手，而且是两次。<br />    
我输得无话可说。虽然第一次她用了些卑鄙手段，躲在狄俄墨得斯的身后暗算我；但第二次我却是明刀明枪地败于她手。获胜的她还得意地嘲弄我：“我可怜的兄
弟，你还不明白自己为什么会输吗？战争不在乎对与错，只在乎胜与败！武力是要靠智慧来弥补的，成天只知打打杀杀的你，怎么能和我佑佐半神英雄的伟大智慧相
提并论呢？”<br />    我本就不善雄辩，现在身为败军之将更是无言以对。<br />    <br />    蒙受败耻的我继续着最爱的战争，不过我也首次开始寻找战场之外的乐趣。我曾迷恋过爱情，阿弗洛狄忒的美貌一度让我心动不已。我曾踏遍整个奥林匹斯山脉，只为她寻找一束七十七朵花瓣的金色花朵。我们一时热恋如火。<br />    那时的我们都忘记了一件事情：阿弗洛狄忒是有夫之妻。她的丈夫就是跛足火神赫淮斯托斯。但热恋中的我们已经不在乎这个事实了。<br />    很快，赫淮斯托斯的报复就来了：他趁我们熟睡的时候，打造了一张金网罩住了我们，然后连同床铺一起放置在众神的大殿，使我们沦为了众神的一时笑柄。<br />    事后我和阿弗洛狄忒都低调了许多，偷情就是偷偷地调情，我们终于明白。<br />    <br />    无所事事的我，一面与爱神继续谈情说爱，一面继续我的战场生活。在一个偶然的战场上，我发现了一个名叫奎托斯的斯巴达战士。他武艺高强，勇猛过人，更重要的是对着流血的胜利充满了近乎疯狂的渴望。那种执着于胜利的疯狂，和以前的我一摸一样。<br />    我在他身上看到了自己过去的影子，从此我便开始关注这个斯巴达人，我开始关心他的成长，分享着他的胜利。<br />    事实上，我是在等待着他的失败，期待着他的堕落。<br />    那才是我真正的目的——毁灭的快感。<br />    
一次与蛮族的战斗里，他第一次尝到了失败的滋味。无数次的胜利固然重要，但决定性的一次失败就能让你先前的努力全部付诸东流。他虽见败局已定，但仍逞匹夫
之勇继续孤军奋战，向我发出最后的请求：“战神阿瑞斯啊，我愿意将自己的生命奉献与你，只求你让我获得这场战斗的胜利！”<br />    经过短暂的思考，我决定给这个斯巴达人一个机会。我在天空中现出神躯，将众神之祖CHAOS的混沌之刃赐与他，契约达成了。借助神器的力量，他轻易地将敌人斩杀殆尽。从此他就成为了我最忠实的仆人。<br />    我终于明白了让父神和雅典娜沉迷其中的东西是什么，我也开始这种享受战场外的乐趣，那其实是雅典娜教给我的：玩弄人心的快感。<br />    <br />    奎托斯的确是个优秀的战士，出色地完成了我授予他的各种困难任务。<br />    但我仍不满足，我还是期待着他的堕落。<br />    其实我很喜欢这个仆人，但我更喜欢看到他的毁灭。<br />    我已经对这种任务游戏玩腻了。经过考虑之后我决定把这个玩具推向深渊。我故意狂性大发的他去屠杀雅典娜的神庙。当他清醒后发现手上沾满妻儿的鲜血时，脸上那种万念俱灰的痛苦神情……<br />    真是太美了！我真后悔没让那些缪斯丫头们看看，那才是真正的艺术！<br />我心满意足地离开了奎托斯。但我仍把混沌之刃暂时留给了他。我承认他是个出色的战士，即使作为一个破坏的玩具，他仍是个出色的玩具。他还对我有用。<br />    玩乐到此为止了。从奎托斯的身上，我发现自己真正渴望的东西其实一直没有变过，那就是——强大的武力。我决定直面自己内心的欲望，当年的叛逆种子终于破土而出：既然克罗洛斯做得到，老头子也做得到，那么我战神阿瑞斯为什么就做不到呢？<br />    <br />    不久之后的一次神界宴会上，在我的刻意安排下，被灌醉的阿波罗终于泄露了宙斯的秘密：原来在神界的泰坦战争之后，狡猾的老头子就担心世袭的万年神力被窃，于是将神力封印在潘多拉魔盒的最底部，让潘多拉借惩罚人界为名，将其藏到了大地的沙漠深处。<br />    简单来说，只要我得到潘多拉魔盒，我的野心就能实现了。<br />    但是，神是不能进入那片被诅咒的沙漠的。我想到了以前那个忠实的仆人。<br />    奎托斯为了洗刷自己的罪孽，正被雅典娜利用着，现在他为其效力已近十年。<br />    哼哼，我的死敌雅典娜啊，现在轮到我来算计你和我从前的仆人了。<br />    <br />    我故意袭击了她的雅典城。暴怒的女神虽然限于禁令，无法对我做出什么实质的报复；但却指示她的仆人，立即前往失魂沙漠寻找潘多拉魔盒，她准备把那个玩具培养成弑神者来对付我。真是个毫不留情的可怕女人，不愧是我的死敌。<br />    但她的这种反应早就在我意料之中。我藏在暗处，默默观察着奎托斯的举动。<br />    奎托斯不愧是先后被我和雅典娜看上的斯巴达战士，获得众神帮助的他经历了三界的考验，顺利地完成了雅典娜交给他的任务，取得了潘多拉魔盒。<br />    我冷笑着在他面前现身，虽然他得到了众神的力量，本领比以前大有长进，但毕竟只是个人类的战士罢了，跟身为战神的我还是相差得太远。我轻易地将他打入地狱，毫不费力地得到了梦寐以求的潘多拉魔盒。<br />    很好，现在我终于可以做长久以来我一直想做的事情了。<br />    <br />    我摧毁了雅典城，干得就象他们摧毁特洛伊城一样彻底。<br />    雅典娜根本不敢和拥有魔盒的我决战，只能在奥林匹斯山上咬牙旁观。<br />    我嘲弄着她的胆小怯懦，长年的怨气终于一泻而出。<br />    正当我准备杀上奥林匹斯山的时候，一个矮小的身影趁我不备，一道闪电魔法打落了我手中的魔盒。我愤怒地寻找偷袭的鼠辈，但他的面容让我一愣。<br />    竟然是已经被我打入地狱的奎托斯！真有他的，强烈的求生意识和复仇意志，居然使他逃过了哈迪斯的追捕，从冥界逃了回来！<br />    我在心底开怀大笑，平静看着他抢先打开了潘多拉魔盒，获得了宙斯封印的神力。神力使他的肉躯迅速扩大，竟然和我的神躯势均力敌。众神赋予他的各种神力也成倍增长，现在的他已经成为了可怕的弑神者。雅典娜的计划终于成功了。<br />    “阿瑞斯！我们的恩怨也该有个了结了！”英勇的斯巴达战士怒吼着向我发出了挑战。<br />    我的血液突然不听控制般地沸腾起来，那时我才发现，这才是我一直渴望着的战斗。<br />    这其实才是我刚才没有阻止他抢夺潘多拉魔盒的真正理由。<br />    我真正想要的究竟是什么？<br />    力量？<br />    权力？<br />    爱情？<br />    还仅仅只是纯粹的战斗？<br />    我不知道答案，我很困惑。<br />    但我用不着知道了。因为我已不在乎。<br />    我现在唯一在乎的，就是尽情地享受眼前这场痛快淋漓的决战！<br />    来吧，弑神者，不，奎托斯！<br />    我战神阿瑞斯对斯提克斯河起誓：只要你能击败我，你就是——新的战神！<br />    <br />    尾声<br />    冥界。塔尔塔洛斯地狱。<br />    “阿瑞斯，今后这里就是你的住所。你在这里一定会找到些志同道合的家伙们。因为被关在这里的，全部都是宙斯的敌人。”冥王哈迪斯一半是例行公事，另一半则是冷嘲热讽。<br />    我静静地听着，不发一言。<br />    “哼，架子比宙斯还大呢。不过，听说那个战胜你的人类现在非常受宙斯的宠爱，现在已经被他册封为新的战神了。哼哼……”哈迪斯似乎今天心情很好，说话也罗里罗嗦的。<br />    “是吗？那我应该为他庆贺，还是应该为他悲哀？”我淡淡地开口。<br />    “你的笑话很蹩脚啊，阿瑞斯。不过……”冥王的话突然一转。<br />    “宙斯不需要你，波赛冬也不需要你，但我哈迪斯需要你！阿瑞斯！”<br />    我望向冥王，他藏在暗处的脸上没有任何表情，和当年第二次泰坦战争里他逃到奥林匹斯山上向我们求助时的表情一摸一样。<br />    没有谁能猜得到他到底在想些什么。<br />    我突然笑了起来，而且一发不可收拾。<br />    哼哼哼，哈哈哈，哈哈哈哈哈哈～～～<br />    整个地狱都充斥着我的狂笑。<br />    <br />    战神完<br /></font>
<img src ="http://www.blogjava.net/cmd/aggbug/41284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-04-15 23:15 <a href="http://www.blogjava.net/cmd/archive/2006/04/15/41284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成长中必知的20个故事[转]</title><link>http://www.blogjava.net/cmd/archive/2006/03/23/37090.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Thu, 23 Mar 2006 12:06:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/03/23/37090.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/37090.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/03/23/37090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/37090.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/37090.html</trackback:ping><description><![CDATA[
		<font size="2">
				<strong>1、断箭不相信自己的意志，永远也做不成将军。</strong>  <br /><br />春秋战国时代，一位父亲和他的儿子出征打战。父亲已做了将军，儿子还只是马前卒。又一阵号角吹响，战鼓雷鸣了，父亲庄严地托起一个箭囊，其中插着一只箭。父亲郑重对儿子说：“这是家袭宝箭，配带身边，力量无穷，但千万不可抽出来。”  <br />那是一个极其精美的箭囊，厚牛皮打制，镶着幽幽泛光的铜边儿，再看露出的箭尾。一眼便能认定用上等的孔雀羽毛制作。儿子喜上眉梢，贪婪地推想箭杆、箭头的模样，耳旁仿佛嗖嗖地箭声掠过，敌方的主帅应声折马而毙。  <br />果然，配带宝箭的儿子英勇非凡，所向披靡。当鸣金收兵的号角吹响时，儿子再也禁不住得胜的豪气，完全背弃了父亲的叮嘱，强烈的欲望驱赶着他呼一声就拔出宝箭，试图看个究竟。骤然间他惊呆了。  <br />一只断箭，箭囊里装着一只折断的箭。  <br />我一直刳着只断箭打仗呢！儿子吓出了一身冷汗，仿佛顷刻间失去支柱的房子，轰然意志坍塌了。  <br />结果不言自明，儿子惨死于乱军之中。  <br />拂开蒙蒙的硝烟，父亲拣起那柄断箭，沉重地啐一口道：“不相信自己的意志，永远也做不成将军。”  <br />把胜败寄托在一只宝箭上，多么愚蠢，而当一个人把生命的核心与把柄交给别人，又多么危险！比如把希望寄托在儿女身上；把幸福寄托在丈夫身上；把生活保障寄托在单位身上……  <br /><br />温馨提示：自己才是一只箭，若要它坚韧，若要它锋利，若要它百步穿杨，百发百中，磨砺它，拯救它的都只能是自己。  <br /><br /><strong>2、生命的价值不要让昨日的沮丧令明天的梦想黯然失色</strong>！  <br /><br />在一次讨论会上，一位著名的演说家没讲一句开场白，手里却高举着一张20美元的钞票。  <br />面对会议室里的200个人，他问：“谁要这20美元？”一只只手举了起来。他接着说：“我打算把这20美元送给你们中的一位，但在这之前，请准许我做一件事。”他说着将钞票揉成一团，然后问：“谁还要？”仍有人举起手来。  <br />他又说：“那么，假如我这样做又会怎么样呢？”他把钞票扔到地上，又踏上一只脚，并且用脚碾它。尔后他拾起钞票，钞票已变得又脏又皱。  <br />“现在谁还要？”还是有人举起手来。  <br />“朋
友们，你们已经上了一堂很有意义的课。无论我如何对待那张钞票，你们还是想要它，因为它并没贬值，它依旧值20美元。人生路上，我们会无数次被自己的决定
或碰到的逆境击倒、欺凌甚至碾得粉身碎骨。我们觉得自己似乎一文不值。但无论发生什么，或将要发生什么，在上帝的眼中，你们永远不会丧失价值。在他看来，
肮脏或洁净，衣着齐整或不齐整，你们依然是无价之宝。” <br /><br />温馨提示：生命的价值不依赖我们的所作所为，也不仰仗我们结交的人物，而是取决于我们本身！我们是独特的——永远不要忘记这一点！  <br /><br /><strong>3、昂起头来真美别看它是一条黑母牛，牛奶一样是白的。</strong>  <br /><br />珍妮是个总爱低着头的小女孩，她一直觉得自己长得不够漂亮。有一天，她到饰物店去买了只绿色蝴蝶结，店主不断赞美她戴上蝴蝶结挺漂亮，珍妮虽不信，但是挺高兴，不由昂起了头，急于让大家看看，出门与人撞了一下都没在意。  <br />珍妮走进教室，迎面碰上了她的老师，“珍妮，你昂起头来真美！”老师爱抚地拍拍她的肩说。  <br />那一天，她得到了许多人的赞美。她想一定是蝴蝶结的功劳，可往镜前一照，头上根本就没有蝴蝶结，一定是出饰物店时与人一碰弄丢了。  <br />自信原本就是一种美丽，而很多人却因为太在意外表而失去很多快乐。  <br /><br />温馨提示：无论是贫穷还是富有，无论是貌若天仙，还是相貌平平，只要你昂起头来，快乐会使你变得可爱——人人都喜欢的那种可爱。  <br /><br /><strong>4、为生命画一片树叶只要心存相信，总有奇迹发生，希望虽然渺茫，但它永存人世。</strong>  <br /><br />美
国作家欧；亨利在他的小说《最后一片叶子》里讲了个故事：病房里，一个生命垂危的病人从房间里看见窗外的一棵树，在秋风中一片片地掉落下来。病人望着眼前
的萧萧落叶，身体也随之每况愈下，一天不如一天。她说：“当树叶全部掉光时，我也就要死了。”一位老画家得知后，用彩笔画了一片叶脉青翠的树叶挂在树枝
上。  <br />最后一片叶子始终没掉下来。只因为生命中的这片绿，病人竟奇迹般地活了下来。  <br /><br />温馨提示：人生可以没有很多东西，却唯独不能没有希望。希望是人类生活的一项重要的价值。有希望之处，生命就生生不息！  <br /><br /><strong>5、飞翔的蜘蛛信念是一种无坚不催的力量，当你坚信自己能成功时，你必能成功。</strong>  <br /><br />一
天，我发现，一只黑蜘蛛在后院的两檐之间结了一张很大的网。难道蜘蛛会飞？要不，从这个檐头到那个檐头，中间有一丈余宽，第一根线是怎么拉过去的？后来，
我发现蜘蛛走了许多弯路——从一个檐头起，打结，顺墙而下，一步一步向前爬，小心翼翼，翘起尾部，不让丝沾到地面的沙石或别的物体上，走过空地，再爬上对
面的檐头，高度差不多了，再把丝收紧，以后也是如此。  <br /><br />温馨提示：蜘蛛不会飞翔，但它能够把网凌结在半空中。它是勤奋、敏
感、沉默而坚韧的昆虫，它的网制得精巧而规矩，八卦形地张开，仿佛得到神助。这样的成绩，使人不由想起那些沉默寡言的人和一些深藏不露的智者。于是，我记
住了蜘蛛不会飞翔，但它照样把网结在空中。奇迹是执着者造成的。  <br /><br /><strong>6、阴影是条纸龙人生中，经常有无数来自外部的打击，但这些打击究竟会对你产生怎样的影响，最终决定权在你手中。  <br /></strong><br />祖
父用纸给我做过一条长龙。长龙腹腔的空隙仅仅只能容纳几只蝗虫，投放进去，它们都在里面死了，无一幸免！祖父说：“蝗虫性子太躁，除了挣扎，它们没想过用
嘴巴去咬破长龙，也不知道一直向前可以从另一端爬出来。因而，尽管它有铁钳般的嘴壳和锯齿一般的大腿，也无济于事。  <br />“当祖父把几只同样大小的青虫从龙头放进去，然后关上龙头，奇迹出现了：仅仅几分钟，小青虫们就一一地从龙尾爬了出来。 <br /><br /> 温馨提示：命运一直藏匿在我们的思想里。许多人走不出人生各个不同阶段或大或小的阴影，并非因为他们天生的个人条件比别人要差多远，而是因为他们没有思想要将阴影纸龙咬破，也没有耐心慢慢地找准一个方向，一步步地向前，直到眼前出现新的洞天。 <br /><br /><strong>7、成功并不像你想像的那么难并不是因为事情难我们不敢做，而是因为我们不敢做事情才难的。</strong>  <br /><br />1965
年，一位韩国学生到剑桥大学主修心理学。在喝下午茶的时候，他常到学校的咖啡厅或茶座听一些成功人士聊天。这些成功人士包括诺贝尔奖获得者，某一些领域的
学术权威和一些创造了经济神话的人，这些人幽默风趣，举重若轻，把自己的成功都看得非常自然和顺理成章。时间长了，他发现，在国内时，他被一些成功人士欺
骗了。那些人为了让正在创业的人知难而退，普遍把自己的创业艰辛夸大了，也就是说，他们在用自己的成功经历吓唬那些还没有取得成功的人。  <br />作
为心理系的学生，他认为很有必要对韩国成功人士的心态加以研究。1970年，他把《成功并不像你想像的那么难》作为毕业论文，提交给现代经济心理学的创始
人威尔；布雷登教授。布雷登教授读后，大为惊喜，他认为这是个新发现，这种现象虽然在东方甚至在世界各地普遍存在，但此前还没有一个人大胆地提出来并加以
研究。惊喜之余，他写信给他的剑桥校友——当时正坐在韩国政坛第一把交椅上的人——朴正熙。他在信中说，“我不敢说这部著作对你有多大的帮助，但我敢肯定
它比你的任何一个政令都能产生震动。”  <br />后来这本书果然伴随着韩国的经济起飞了。这本书鼓舞了许多人，因为他们从一个新的角
度告诉人们，成功与“劳其筋骨，饿其体肤”、“三更灯火五更鸡”、“头悬梁，锥刺股”没有必然的联系。只要你对某一事业感兴趣，长久地坚持下去就会成功，
因为上帝赋予你的时间和智慧够你圆满做完一件事情。后来，这位青年也获得了成功，他成了韩国泛业汽车公司的总裁。  <br /><br />温馨提示：人世中的许多事，只要想做，都能做到，该克服的困难，也都能克服，用不着什么钢铁般的意志，更用不着什么技巧或谋略。只要一个人还在朴实而饶有兴趣地生活着，他终究会发现，造物主对世事的安排，都是水到渠成的。  <br /><br /><strong>8、永远的坐票生活真是有趣：如果你只接受最好的，你经常会得到最好的。</strong>  <br /><br />有一个人经常出差，经常买不到对号入坐的车票。可是无论长途短途，无论车上多挤，他总能找到座位。  <br />他
的办法其实很简单，就是耐心地一节车厢一节车厢找过去。这个办法听上去似乎并不高明，但却很管用。每次，他都做好了从第一节车厢走到最后一节车厢的准备，
可是每次他都用不着走到最后就会发现空位。他说，这是因为像他这样锲而不舍找座位的乘客实在不多。经常是在他落座的车厢里尚余若干座位，而在其他车厢的过
道和车厢接头处，居然人满为患。  <br />他说，大多数乘客轻易就被一两节车厢拥挤的表面现象迷惑了，不大细想在数十次停靠之中，从
火车十几个车门上上下下的流动中蕴藏着不少提供座位的机遇；即使想到了，他们也没有那一份寻找的耐心。眼前一方小小立足之地很容易让大多数人满足，为了一
两个座位背负着行囊挤来挤去有些人也觉得不值。他们还担心万一找不到座位，回头连个好好站着的地方也没有了。与生活中一些安于现状不思进取害怕失败的人，
永远只能滞留在没有成功的起点上一样，这些不愿主动找座位的乘客大多只能在上车时最初的落脚之处一直站到下车。  <br /><br />温馨提示：自信、执着、富有远见、勤于实践，会让你握有一张人生之旅永远的坐票。  <br /><br /><strong>9、心中的顽石阻碍我们去发现、去创造的，仅仅是我们心理上的障碍和思想中的顽石。</strong>  <br /><br /><br />从前有一户人家的菜园摆着一颗大石头，宽度大约有四十公分，高度有十公分。到菜园的人，不小心就会踢到那一颗大石头，不是跌倒就是擦伤。  <br /><br /><br />儿子问：“爸爸，那颗讨厌的石头，为什么不把它挖走？”  <br /><br /><br />爸爸这么回答：“你说那颗石头喔？从你爷爷时代，就一直放到现在了，它的体积那么大，不知道要挖到到什么时候，没事无聊挖石头，不如走路小心一点，还可以训练你的反应能力。”  <br /><br /><br />过了几年，这颗大石头留到下一代，当时的儿子娶了媳妇，当了爸爸。  <br /><br /><br />有一天媳妇气愤地说：“爸爸，菜园那颗大石头，我越看越不顺眼，改天请人搬走好了。”  <br /><br /><br />爸爸回答说：“算了吧！那颗大石头很重的，可以搬走的话在我小时候就搬走了，哪会让它留到现在啊？”  <br /><br /><br />媳妇心底非常不是滋味，那颗大石头不知道让她跌倒多少次了。  <br /><br /><br />有一天早上，媳妇带着锄头和一桶水，将整桶水倒在大石头的四周。  <br /><br /><br />十几分钟以后，媳妇用锄头把大石头四周的泥土搅松。  <br /><br /><br />媳妇早有心理准备，可能要挖一天吧，谁都没想到几分钟就把石头挖起来，看看大小，这颗石头没有想像的那么大，都是被那个巨大的外表蒙骗了。  <br /><br /><br />温馨提示：你抱着下坡的想法爬山，便无从爬上山去。如果你的世界沉闷而无望，那是因为你自己沉闷无望。改变你的世界，必先改变你自己的心态。  <br /><br /><br /><strong>10、追求忘我不要把自己当做鼠，否则肯定被猫吃。</strong>  <br /><br /><br />1858年，瑞典的一个富豪人家生下了一个女儿。然而不久，孩子染患了一种无法解释的瘫痪症，丧失了走路的能力。  <br /><br /><br />一
次，女孩和家人一起乘船旅行。船长的太太给孩子讲船长有一只天堂鸟，她被这只鸟的描述迷住了，极想亲自看一看。于是保姆把孩子留在甲板上，自己去找船长。
孩子耐不住性子等待，她要求船上的服务生立即带她去看天堂鸟。那服务生并不知道她的腿不能走路，而只顾带着她一道去看那只美丽的小鸟。奇迹发生了，孩子因
为过度地渴望，竟忘我地拉住服务生的手，慢慢地走了起来。从此，孩子的病便痊愈了。女孩子长大后，又忘我地投入到文学创作中，最后成为第一位荣获诺贝尔文
学奖的女性，也就是茜尔玛；拉格萝芙。  <br /><br /><br />温馨提示：忘我是走向成功的一条捷径，只有在这种环境中，人才会超越自身的束缚，释放出最大的能量。  <br /><br /><br /><strong>11、乐观者与悲观者乐观者在每次危难中都看到了机会，而悲观的人在每个机会中都看到了危难。</strong>  <br /><br /><br />父亲欲对一对孪生兄弟作“性格改造”，因为其中一个过分乐观，而另一个则过分悲观。一天，他买了许多色泽鲜艳的新玩具给悲观孩子，又把乐观孩子送进了一间堆满马粪的车房里。  <br /><br /><br />第二天清晨，父亲看到悲观孩子正泣不成声，便问：“为什么不玩那些玩具呢？”  <br /><br /><br />“玩了就会坏的。”孩子仍在哭泣。  <br /><br /><br />父亲叹了口气，走进车房，却发现那乐观孩子正兴高采烈地在马粪里掏着什么。  <br /><br /><br />“告诉你，爸爸。”那孩子得意洋洋地向父亲宣称，“我想马粪堆里一定还藏着一匹小马呢！”  <br /><br /><br />温馨提示：乐观者与悲观者之间，其差别是很有趣的：乐观者看到的是油炸圈饼，悲观者看到的是一个窟窿。  <br /><br /><br /><strong>12、勇于冒险对于那些害怕危险的人，危险无处不在。</strong>  <br /><br /><br />有
一天，龙虾与寄居蟹在深海中相遇，寄居蟹看见龙虾正把自己的硬壳脱掉，只露出娇嫩的身躯。寄居蟹非常紧张地说：“龙虾，你怎可以把唯一保护自己身躯的硬壳
也放弃呢？难道你不怕有大鱼一口把你吃掉吗？以你现在的情况来看，连急流也会把你冲到岩石去，到时你不死才怪呢？”  <br /><br /><br />龙虾气定神闲地回答：“谢谢你的关心，但是你不了解，我们龙虾每次成长，都必须先脱掉旧壳，才能生长出更坚固的外壳，现在面对的危险，只是为了将来发展得更好而作出准备。”  <br /><br /><br />寄居蟹细心思量一下，自己整天只找可以避居的地方，而没有想过如何令自己成长得更强壮，整天只活在别人的护荫之下，难怪永远都限制自己的发展。  <br /><br /><br />温馨提示：每个人都有一定的安全区，你想跨越自己目前的成就，请不要划地自限，勇于接受挑战充实自我，你一定会发展得比想像中更好。  <br /><br /><strong>13、再试一次什么东西比石头还硬，或比水还软？然而软水却穿透了硬石，坚持不懈而已。</strong>  <br /><br /><br />有
个年轻人去微软公司应聘，而该公司并没有刊登过招聘广告。见总经理疑惑不解，年轻人用不太娴熟的英语解释说自己是碰巧路过这里，就贸然进来了。总经理感觉
很新鲜，破例让他一试。面试的结果出人意料，年轻人表现糟糕。他对总经理的解释是事先没有准备，总经理以为他不过是找个托词下台阶，就随口应道：“等你准
备好了再来试吧”。  <br /><br /><br />一周后，年轻人再次走进微软公司的大门，这次他依然没有成功。但比起第一次，他的表现要好得多。而总经理给他的回答仍然同上次一样：“等你准备好了再来试。”就这样，这个青年先后5次踏进微软公司的大门，最终被公司录用，成为公司的重点培养对象。  <br /><br /><br />温
馨提示：也许，我们的人生旅途上沼泽遍布，荆棘丛生；也许我们追求的风景总是山重水复，不见柳暗花明；也许，我们前行的步履总是沉重、蹒跚；也许，我们需
要在黑暗中摸索很长时间，才能找寻到光明；也许，我们虔诚的信念会被世俗的尘雾缠绕，而不能自由翱翔；也许，我们高贵的灵魂暂时在现实中找不到寄放的净
土……那么，我们为什么不可以以勇敢者的气魄，坚定而自信地对自己说一声“再试一次！”  <br /><br /><br />再试一次，你就有可能达到成功的彼岸！  <br /><br /><br /><strong>14、天道酬勤没有人能只依靠天分成功。上帝给予了天分，勤奋将天分变为天才。</strong>  <br /><br /><br />曾
国藩是中国历史上最有影响的人物之一，然他小时候的天赋却不高。有一天在家读书，对一篇文章重复不知道多少遍了，还在朗读，因为，他还没有背下来。这时候
他家来了一个贼，潜伏在他的屋檐下，希望等读书人睡觉之后捞点好处。可是等啊等，就是不见他睡觉，还是翻来复去地读那篇文章。贼人大怒，跳出来说，“这种
水平读什么书？”然后将那文章背诵一遍，扬长而去！  <br /><br /><br />贼人是很聪明，至少比曾先生要聪明，但是他只能成为贼，而曾先生却成为毛泽东主席都钦佩的人：“近代最有大本夫源的人。”  <br /><br /><br />“勤
能补拙是良训，一分辛苦一分才。”那贼的记忆力真好，听过几遍的文章都能背下来，而且很勇敢，见别人不睡觉居然可以跳出来“大怒”，教训曾先生之后，还要
背书，扬长而去。但是遗憾的是，他名不经传，曾先生后来启用了一大批人才，按说这位贼人与曾先生有一面之交，大可去施展一二，可惜，他的天赋没有加上勤
奋，变得不知所终。  <br /><br /><br />温馨提示：伟大的成功和辛勤的劳动是成正比的，有一分劳动就有一分收获，日积月累，从少到多，奇迹就可以创造出来。  <br /><br /><br /><strong>15、好学不倦只有一个洞穴的老鼠很快被捉。</strong>  <br /><br /><br />在一个漆黑的晚上，老鼠首领带领着小老鼠出外觅食，在一家人的厨房内，垃圾桶之中有很多剩余的饭菜，对于老鼠来说，就好像人类发现了宝藏。  <br /><br /><br />正
当一大群老鼠在垃圾桶及附近范围大挖一顿之际，突然传来了一阵令它们肝胆俱裂的声音，那就是一头大花猫的叫声。它们震惊之余，更各自四处逃命，但大花猫绝
不留情，不断穷追不舍，终于有两只小老鼠走避不及，被大花猫捉到，正要向它们吞噬之际，突然传来一连串凶恶的狗吠声，令大花猫手足无措，狼狈逃命。  <br /><br /><br />大花猫走后，老鼠首领施施然从垃圾桶后面走出来说：“我早就对你们说，多学一种语言有利无害，这次我就因而救了你们一命。”  <br /><br /><br />温馨提示：“多一门技艺，多一条路。”不断学习实在是成功人士的终身承诺。  <br /><br /><br /><strong>16、居安思危洪水未到先筑堤，豺狼未来先磨刀。</strong>  <br /><br /><br />一
只野狼卧在草上勤奋地磨牙，狐狸看到了，就对它说：“天气这么好，大家在休息娱乐，你也加入我们队伍中吧！”野狼没有说话，继续磨牙，把它的牙齿磨得又尖
又利。狐狸奇怪地问道：“森林这么静，猎人和猎狗已经回家了，老虎也不在近处徘徊，又没有任何危险，你何必那么用劲磨牙呢？”野狼停下来回答说：“我磨牙
并不是为了娱乐，你想想，如果有一天我被猎人或老虎追逐，到那时，我想磨牙也来不及了。而平时我就把牙磨好，到那时就可以保护自己了。”  <br /><br /><br />温馨提示：做事应该未雨绸缪，居安思危，这样在危险突然降临时，才不至于手忙脚乱。“书到用时方恨少”，平常若不充实学问，临时抱佛脚是来不及的。也有人抱怨没有机会，然而当升迁机会来临时，再叹自己平时没有积蓄足够的学识与能力，以致不能胜任，也只好后悔莫及。  <br /><br /><strong>17、困境即是赐予一个障碍，就是一个新的已知条件，只要愿意，任何一个障碍，都会成为一个超越自我的契机。</strong>  <br /><br /><br />有一天，素有森林之王之称的狮子，来到了天神面前：“我很感谢你赐给我如此雄壮威武的体格、如此强大无比的力气，让我有足够的能力统治这整座森林。”  <br /><br /><br />天神听了，微笑地问：“但是这不是你今天来找我的目的吧！看起来你似乎为了某事而困扰呢！”  <br /><br /><br />狮子轻轻吼了一声，说：“天神真是了解我啊！我今天来的确是有事相求。因为尽管我的能力再好，但是每天鸡鸣的时候，我总是会被鸡鸣声给吓醒。神啊！祈求您，再赐给我一个力量，让我不再被鸡鸣声给吓醒吧！”  <br /><br /><br />天神笑道：“你去找大象吧，它会给你一个满意的答复的。”  <br /><br /><br />狮子兴匆匆地跑到湖边找大象，还没见到大象，就听到大象跺脚所发出的“砰砰”响声。  <br /><br /><br />狮子加速地跑向大象，却看到大象正气呼呼地直跺脚。  <br /><br /><br />狮子问大象：“你干嘛发这么大的脾气？”  <br /><br /><br />大象拼命摇晃着大耳朵，吼着：“有只讨厌的小蚊子，总想钻进我的耳朵里，害我都快痒死了。”  <br /><br /><br />狮子离开了大象，心里暗自想着：“原来体型这么巨大的大象，还会怕那么瘦小的蚊子，那我还有什么好抱怨呢？毕竟鸡鸣也不过一天一次，而蚊子却是无时无刻地骚扰着大象。这样想来，我可比他幸运多了。”  <br /><br /><br />狮子一边走，一边回头看着仍在跺脚的大象，心想：“天神要我来看看大象的情况，应该就是想告诉我，谁都会遇上麻烦事，而它并无法帮助所有人。既然如此，那我只好靠自己了！反正以后只要鸡鸣时，我就当做鸡是在提醒我该起床了，如此一想，鸡鸣声对我还算是有益处呢？”  <br /><br /><br />温馨提示：在人生的路上，无论我们走得多么顺利，但只要稍微遇上一些不顺的事，就会习惯性地抱怨老天亏待我们，进而祈求老天赐给我们更多的力量，帮助我们度过难关。但实际上，老天是最公平的，就像它对狮子和大象一样，每个困境都有其存在的正面价值。  <br /><br /><br /><strong>18、永远的一课面对困难，许多人戴了放大镜，但和困难拼搏一番，你会觉得，困难不过如此。</strong>  <br /><br /><br />那天的风雪真暴，外面像是有无数发疯的怪兽在呼啸厮打。雪恶狠狠地寻找袭击的对象，风呜咽着四处搜索。  <br /><br /><br />大家都在喊冷，读书的心思似乎已被冻住了。一屋的跺脚声。  <br /><br /><br />鼻头红红的欧阳老师挤进教室时，等待了许久的风席卷而入，墙壁上的《中学生守则》一鼓一顿，开玩笑似的卷向空中，又一个跟头栽了下来。  <br /><br /><br />往日很温和的欧阳老师一反常态：满脸的严肃庄重甚至冷酷，一如室外的天气。  <br /><br /><br />乱哄哄的教室静了下来，我们惊异地望着欧阳老师。  <br /><br /><br />“请同学们穿上胶鞋，我们到操场上去。”  <br /><br /><br />几十双眼睛在问。  <br /><br /><br />“因为我们要在操场上立正五分钟。”  <br /><br /><br />即使欧阳老师下了“不上这堂课，永远别上我的课”的恐吓之词，还是有几个娇滴滴的女生和几个很横的男生没有出教室。  <br /><br /><br />操场在学校的东北角，北边是空旷的菜园，再北是一口大塘。  <br /><br /><br />那天，操场、菜园和水塘被雪连成了一个整体。  <br /><br /><br />矮了许多的篮球架被雪团打得“啪啪”作响，卷地而起的雪粒雪团呛得人睁不开眼张不开口。脸上像有无数把细窄的刀在拉在划，厚实的衣服像铁块冰块，脚像是踩在带冰碴的水里。  <br /><br /><br />我们挤在教室的屋檐下，不肯迈向操场半步。  <br /><br /><br />欧阳老师没有说什么，面对我们站定，脱下羽绒衣，线衣脱到一半，风雪帮他完成了另一半。“在操场上去，站好！”欧阳老师脸色苍白，一字一顿地对我们说。  <br /><br /><br />谁也没有吭声，我们老老实实地到操场排好了三列纵队。  <br /><br /><br />瘦削的欧阳老师只穿一件白衬褂，衬褂紧裹着的他更显单薄。  <br /><br /><br />后来，我们规规矩矩地在操场站了五分多钟。  <br /><br /><br />在教室时，同学们都以为自己敌不过那场风雪，事实上，叫他们站半个小时，他们顶得住，叫他们只穿一件衬衫，他们也顶得住。  <br /><br /><br />温馨提示：正如生命中的许多伤痛一样，其实并不如自己想像的那么严重。如果不把它当回事，它是不会很痛的。你觉得痛，那是因为你自以为伤口在痛，害怕伤口的痛。  <br /><br /><br /><strong>19、大海里的船在大海上航行的船没有不带伤的。</strong>  <br /><br /><br />英国劳埃德保险公司曾从拍卖市场买下一艘船，这艘船1894年下水，在大西洋上曾138次遭遇冰山，116次触礁，13次起火，207次被风暴扭断桅杆，然而它从没有沉没过。  <br /><br /><br />劳埃德保险公司基于它不可思议的经历及在保费方面给带来的可观收益，最后决定把它从荷兰买回来捐给国家。现在这艘船就停泊在英国萨伦港的国家船舶博物馆里。  <br /><br /><br />不过，使这艘船名扬天下的却是一名来此观光的律师。当时，他刚打输了一场官司，委托人也于不久前自杀了。尽管这不是他的第一次失败辩护，也不是他遇到的第一例自杀事件，然而，每当遇到这样的事情，他总有一种负罪感。他不知该怎样安慰这些在生意场上遭受了不幸的人。  <br /><br /><br />当他在萨伦船舶博物馆看到这艘船时，忽然有一种想法，为什么不让他们来参观参观这艘船呢？于是，他就把这艘船的历史抄下来和这艘船的照片一起挂在他的律师事务所里，每当商界的委托人请他辩护，无论输赢，他都建议他们去看看这艘船。  <br /><br /><br />它使我们知道：在大海上航行的船没有不带伤的。  <br /><br /><br />温馨提示：虽然屡遭挫折，却能够坚强地百折不挠地挺住，这就是成功的秘密。  <br /><br /><br /><strong>20、驴的哲学人生必须渡过逆流才能走向更高的层次，最重要的是永远看得起自己。</strong>  <br /><br /><br />有一天某个农夫的一头驴子，不小心掉进一口枯井里，农夫绞尽脑汁想办法救出驴子，但几个小时过去了，驴子还在井里痛苦地哀嚎着。  <br /><br /><br />最后，这位农夫决定放弃，他想这头驴子年纪大了，不值得大费周章去把它救出来，不过无论如何，这口井还是得填起来。于是农夫便请来左邻右舍帮忙一起将井中的驴子埋了，以免除它的痛苦。  <br /><br /><br />农夫的邻居们人手一把铲子，开始将泥土铲进枯井中。当这头驴子了解到自己的处境时，刚开始哭得很凄惨。但出人意料的是，一会儿之后这头驴子就安静下来了。农夫好奇地探头往井底一看，出现在眼前的景象令他大吃一惊：  <br /><br /><br />当铲进井里的泥土落在驴子的背部时，驴子的反应令人称奇──它将泥土抖落在一旁，然后站到铲进的泥土堆上面！  <br /><br /><br />就这样，驴子将大家铲倒在它身上的泥土全数抖落在井底，然后再站上去。很快地，这只驴子便得意地上升到井口，然后在众人惊讶的表情中快步地跑开了！  <br /><br /><br />温馨提示：就如驴子的情况，在生命的旅程中，有时候我们难免会陷入“枯井”里，会被各式各样的“泥沙”倾倒在我们身上，而想要从这些“枯井”脱困的秘诀就是：将“泥沙”抖落掉，然后站到上面去！</font>
<img src ="http://www.blogjava.net/cmd/aggbug/37090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-03-23 20:06 <a href="http://www.blogjava.net/cmd/archive/2006/03/23/37090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员每天该做的事 </title><link>http://www.blogjava.net/cmd/archive/2006/03/06/33902.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Mon, 06 Mar 2006 11:19:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/03/06/33902.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/33902.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/03/06/33902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/33902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/33902.html</trackback:ping><description><![CDATA[<font color="#000000" face="arial,sans-serif" size="2"><b>程序员每天该做的事&nbsp;</b><br>1、总结自己一天任务的完成情况&nbsp;<br>最好的方式是写工作日志，把自己今天完成了什么事情，遇见了什么问题都记录下来，日后翻看好处多多&nbsp;<br><br>2、考虑自己明天应该做的主要工作&nbsp;<br>把明天要做的事情列出来，并按照优先级排列，第二天应该把自己效率最高的时间分配给最重要的工作&nbsp;<br><br>3、考虑自己一天工作中失误的地方，并想出避免下一次再犯的方法&nbsp;<br>出错不要紧，最重要的是不要重复犯相同的错误，那是愚蠢&nbsp;<br><br>4、考虑自己一天工作完成的质量和效率能否还能提高&nbsp;<br>一天只提高1%，365天你的效率就能提高多少倍你知道吗？&nbsp;(1+0.01)^365&nbsp;=&nbsp;37&nbsp;倍&nbsp;<br><br>5、看一个有用的新闻网站或读一张有用的报纸，了解业界动态&nbsp;<br>闭门造车是不行的，了解一下别人都在做什么，对自己能带来很多启示&nbsp;<br><br>6、记住一位同事的名字及其特点&nbsp;<br>你认识公司的所有同事吗？你了解他们吗？&nbsp;<br><br>7、清理自己的代码&nbsp;<br>今天完成的代码，把中间的调试信息，测试代码清理掉，按照编码风格整理好，注释都写好了吗？&nbsp;<br><br>8、清理自己的桌面&nbsp;<br>当日事当日毕，保持清洁干劲的桌面才能让你工作时不分心，程序员特别要把电脑的桌面清理干净&nbsp;<br><br>程序员每周该做的事&nbsp;<br>1、向你的老板汇报一次工作&nbsp;<br>让你的老板知道你在做什么，这很重要。可以口头、书面、邮件，看你老板的工作方式而定&nbsp;<br><br>2、进行一次自我总结（非正式）&nbsp;<br>这周之内自己表现得怎么样？该加分还是扣分？&nbsp;<br><br>3、制定下周计划&nbsp;<br>把下周要做的事情列出来，一样要分清楚优先级&nbsp;<br><br>4、整理自己的文件夹、书柜和电脑文件&nbsp;<br>把桌面以外的地方也要清理干净，电脑的文件夹，收到的邮件，把过时的垃圾全部清理掉&nbsp;<br><br>5、与一个非公司的朋友沟通&nbsp;<br>它山之石，可以攻玉&nbsp;<br><br>6、看一本杂志&nbsp;<br>找一本适合自己的专业杂志&nbsp;<br><br>7、纠正自己或同事一个细节上的不正确做法&nbsp;<br>《细节决定成败》看过了吗？没看过强烈建议先看看&nbsp;<br><br><b>程序员每月该做的事&nbsp;</b><br>1、至少和一个同事一起吃饭或喝茶&nbsp;<br>不光了解自己工作伙伴的工作，还要了解他们的生活&nbsp;<br><br>2、自我考核一次&nbsp;<br>相对正式地考核自己一下，你对得起这个月的工资吗？&nbsp;<br><br>3、对你的同事考核一次&nbsp;<br>你的同事表现怎么样？哪些人值得学习，哪些人需要帮助？&nbsp;<br><br>3、制定下月的计划，确定下月的工作重点&nbsp;<br><br>4、总结自己工作质量改进状况&nbsp;<br>自己的质量提高了多少？&nbsp;<br><br>5、有针对性地对一项工作指标做深入地分析并得出改进的方案&nbsp;<br>可以是对自己的，也可以是对公司的，一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话，做的成事，工作上功夫要做足。&nbsp;<br><br>6、与老板沟通一次&nbsp;<br>最好是面对面地沟通，好好表现一下自己，虚心听取老板的意见，更重要的是要了解老板当前关心的重点&nbsp;<br><br><b>程序员每年该做的事&nbsp;</b><br>1、年终总结&nbsp;<br>每个公司都会做的事情，但你真正认真地总结过自己吗？&nbsp;<br><br>2、兑现给自己、给家人的承诺&nbsp;<br>给老婆、儿子的新年礼物买了没有？给自己的呢？&nbsp;<br><br>3、下年度工作规划&nbsp;<br>好好想想自己明年的发展目标，争取升职/加薪、跳槽还是自己出来干？&nbsp;<br><br>4、掌握一项新技术&nbsp;<br>至少是一项，作为程序员一年要是一项新技术都学不到手，那就一定会被淘汰。&nbsp;<br>掌握可不是看本书就行的，要真正懂得应用，最好你能够写一篇教程发表到你的blog&nbsp;<br><br>5、推出一种新产品&nbsp;<br>可以是一个真正的产品，也可以只是一个类库，只要是你创造的东西就行，让别人使用它，也为世界作点贡献。当然如果真的很有价值，收点注册费也是应该的&nbsp;<br><br>6、与父母团聚一次&nbsp;<br>常回家看看，常回家看看 <br></font><img src ="http://www.blogjava.net/cmd/aggbug/33902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-03-06 19:19 <a href="http://www.blogjava.net/cmd/archive/2006/03/06/33902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>曝光模式</title><link>http://www.blogjava.net/cmd/archive/2006/03/06/33826.html</link><dc:creator>静夜思</dc:creator><author>静夜思</author><pubDate>Mon, 06 Mar 2006 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/cmd/archive/2006/03/06/33826.html</guid><wfw:comment>http://www.blogjava.net/cmd/comments/33826.html</wfw:comment><comments>http://www.blogjava.net/cmd/archive/2006/03/06/33826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cmd/comments/commentRss/33826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cmd/services/trackbacks/33826.html</trackback:ping><description><![CDATA[<font id="zoom" class="f14" size="2">曝光英文名称为Exposure，<strong>曝光模式即计算机采用自然光源的模式，通常分为多种，包括：快门优先、光圈优先、手动曝光、AE锁等模式</strong>。照片的好坏与曝光量有关，也就是说应该通多少的光线使CCD能够得到清晰的图像。曝光量与通光时间（快门速度决定），通光面积（光圈大小决定）有关。</font>
<p><font id="zoom" class="f14" size="2"><strong>快门和光圈优先：</strong></font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;
为了得到正确的曝光量，就需要正确的快门与光圈的组合。快门快时，光圈就要大些；快门慢时，光圈就要小些。快门优先是指由机器自动测光系统计算出暴光量的
值，然后根据你选定的快门速度自动决定用多大的光圈。光圈优先是指由机器自动测光系统计算出暴光量的值，然后根据你选定的光圈大小自动决定用多少的快门。
拍摄的时候，用户应该结合实际环境把使曝光与快门两者调节平衡，相得益彰。</font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;&nbsp;
光圈越大，则单位时间内通过的光线越多，反之则越少。光圈的一般表示方法为字母“F+数值”，例如F5.6、F4等等。这里需要注意的是数值越小，表示光
圈越大，比如F4就要比F5.6的光圈大，并且两个相邻的光圈值之间相差两倍，也就是说F4比F5.6所通过的光线要大两倍。相对来说快门的定义就很简单
了，也就是允许光通过光圈的时间，表示的方式就是数值，例如1/30秒、1/60秒等，同样两个相邻快门之间也相差两倍</font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;&nbsp;
光圈和快门的组合就形成了曝光量，在曝光量一定的情况下，这个组合不是惟一的。例如当前测出正常的曝光组合为F5.6、1/30秒，如果将光圈增大一级也
就是F4，那么此时的快门值将变为1/60，这样的组合同样也能达到正常的曝光量。不同的组合虽然可以达到相同的曝光量，但是所拍摄出来的图片效果是不相
同的。</font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;
快门优先是在手动定义快门的情况下通过相机测光而获取光圈值。举例说明，快门优先多用于拍摄运动的物体上，特别是在体育运动拍摄中最常用。很多朋友在拍摄
运动物体时发现，往往拍摄出来的主体是模糊的，这多半就是因为快门的速度不够快。在这种情况下你可以使用快门优先模式，大概确定一个快门值，然后进行拍
摄。因为快门快了，进光量可能减少，色彩偏淡，这就需要增加曝光来加强图片亮度。物体的运行一般都是有规律的，那么快门的数值也可以大概估计，例如拍摄行
人，快门速度只需要1/125秒就差不多了，而拍摄下落的水滴则需要1/1000秒。</font></p>
<p><font id="zoom" class="f14" size="2"><strong>手动曝光模式：</strong></font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;&nbsp;
手控曝光模式每次拍摄时都需手动完成光圈和快门速度的调节，这样的好处是方便摄影师在制造不同的图片效果。如需要运动轨迹的图片，可以加长曝光时间，把快
门加快，曝光增大；如需要制造暗淡的效果，快门要加快，曝光要减少。虽然这样的自主性很高，但是很不方便，对于抓拍瞬息即逝的景象，时间更不允许。</font></p>
<p><font id="zoom" class="f14" size="2"><strong>AE模式：</strong></font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;&nbsp; AE全称为Auto
Exposure，即自动曝光。模式大约可分为光圈优先AE式，快门速度优先AE式，程式AE式，闪光AE式和深度优先AE式。光圈优先AE式是由拍摄者
人为选择拍摄时的光圈大小，由相机根据景物亮度、CCD感光度以及人为选择的光圈等信息自动选择合适曝光所要求的快门时间的自动曝光模式，也即光圈手动、
快门时间自动的曝光方式。这种曝光方式主要用在需优先考虑景深的拍摄场合，如拍摄风景、肖像或微距摄影等。</font></p>
<p><font id="zoom" class="f14" size="2"><strong>多点测光：</strong></font></p>
<p><font id="zoom" class="f14" size="2">&nbsp;&nbsp;&nbsp;
多点测光是通过对景物不同位置的亮度，通过闪光灯补偿等办法，达到最佳的摄影效果，特别适合拍摄别光物体。首先，用户要对景物背景，一般为光源物体进行测
光，然后进行AE锁定；第二步是对背光景物进行测光，大部分的专业或准专业相机都会自动分析，并用闪光灯为背光物体进行补光。</font></p><img src ="http://www.blogjava.net/cmd/aggbug/33826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cmd/" target="_blank">静夜思</a> 2006-03-06 12:19 <a href="http://www.blogjava.net/cmd/archive/2006/03/06/33826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>