﻿<?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-SoA爱好者-随笔分类-Spring</title><link>http://www.blogjava.net/51AOP/category/10477.html</link><description>关注SoA发展</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:31:36 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:31:36 GMT</pubDate><ttl>60</ttl><item><title>Spring in Action 笔记 (IV) -- i18n问题和自定义属性编辑器</title><link>http://www.blogjava.net/51AOP/archive/2006/05/29/48700.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Mon, 29 May 2006 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/51AOP/archive/2006/05/29/48700.html</guid><wfw:comment>http://www.blogjava.net/51AOP/comments/48700.html</wfw:comment><comments>http://www.blogjava.net/51AOP/archive/2006/05/29/48700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/51AOP/comments/commentRss/48700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/51AOP/services/trackbacks/48700.html</trackback:ping><description><![CDATA[<p>Spring in Action 笔记 (IV) -- i18n问题和自定义属性编辑器</p>
		<p>  BY: icess Blog: <a href="http://blog.matrix.org.cn/page/icess">http://blog.matrix.org.cn/page/icess</a> </p>
		<p>   在Spring中处理I18N问题和使用Java里面的类基本上是一样的.使用<font color="#2a00ff" size="2">org.springframework.context.support.ResourceBundleMessageSource</font></p>
		<p>然后注入资源文件(一个名字为basename的属性),然后就可以在Context中使用资源文件了, 如下为一个配置示例: test.xml</p>
		<font color="#008080" size="2">
				<p align="left">&lt;?</p>
		</font>
		<font color="#3f7f7f" size="2">xml </font>
		<font color="#7f007f" size="2">version</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"1.0" </font>
		<font color="#7f007f" size="2">encoding</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"UTF-8"</font>
		<font color="#008080" size="2">?&gt;<p align="left">&lt;!</p></font>
		<font color="#3f7f7f" size="2">DOCTYPE </font>
		<font color="#000080" size="2">beans </font>
		<font color="#808080" size="2">PUBLIC </font>
		<font color="#000080" size="2">"-//SPRING//DTD BEAN//EN" </font>
		<font color="#3f7f5f" size="2">"spring-beans.dtd" </font>
		<font color="#008080" size="2">&gt;<p align="left">&lt;</p></font>
		<font color="#3f7f7f" size="2">beans</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">bean </font>
		<font color="#7f007f" size="2">id</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"messageSource" </font>
		<font color="#7f007f" size="2">class</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"org.springframework.context.support.ResourceBundleMessageSource"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">property </font>
		<font color="#7f007f" size="2">name</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"basename"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#3f5fbf" size="2">&lt;!-- 注意此处设置 资源 名字 和路径 --&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">value</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">test/i18n/test</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">value</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">property</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">bean</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">
				<p align="left">&lt;/</p>
		</font>
		<font color="#3f7f7f" size="2">beans</font>
		<font color="#008080" size="2">&gt;</font>
		<p>下面为资源文件 test.properties</p>
		<font size="2">
				<p align="left">name = </p>
		</font>
		<font color="#2a00ff" size="2">\u51B0\u96E8</font>
		<font size="2">
				<p align="left">
				</p>
				<p>sex = </p>
		</font>
		<font color="#2a00ff" size="2">\u5148\u751F</font>
		<p>test_zh.properties</p>
		<font size="2">
				<p align="left">name = </p>
		</font>
		<font color="#2a00ff" size="2">\u51B0\u96E8</font>
		<font size="2">
				<p align="left">
				</p>
				<p>sex = </p>
		</font>
		<font color="#2a00ff" size="2">\u5148\u751F</font>
		<p>test_en_US.properties</p>
		<font size="2">
				<p align="left">name = </p>
		</font>
		<font color="#2a00ff" size="2">ice</font>
		<font size="2">
		</font>
		<font color="#2a00ff" size="2">rain</font>
		<font size="2">
				<p align="left">
				</p>
				<p>sex = </p>
		</font>
		<font color="#2a00ff" size="2">male</font>
		<p>下面是一个简单的测试类:</p>
		<font color="#7f0055" size="2">
				<b>
						<p align="left">package</p>
				</b>
		</font>
		<font size="2"> test.i18n;<p align="left"></p></font>
		<font color="#7f0055" size="2">
				<b>
						<p align="left">import</p>
				</b>
		</font>
		<font size="2"> java.util.Locale;<p align="left"></p></font>
		<font color="#7f0055" size="2">
				<b>
						<p align="left">import</p>
				</b>
		</font>
		<font size="2"> org.springframework.context.ApplicationContext;</font>
		<font color="#7f0055" size="2">
				<b>
						<p align="left">import</p>
				</b>
		</font>
		<font size="2"> org.springframework.context.support.ClassPathXmlApplicationContext;<p align="left"></p></font>
		<font color="#7f0055" size="2">
				<b>
						<p align="left">public</p>
				</b>
		</font>
		<font size="2">
		</font>
		<font color="#7f0055" size="2">
				<b>class</b>
		</font>
		<font size="2"> TestI18n {<p align="left"></p><p align="left"></p></font>
		<font color="#3f5fbf" size="2">/**</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#3f5fbf" size="2">*</font>
		<font size="2">
		</font>
		<font color="#7f9fbf" size="2">
				<b>@param</b>
		</font>
		<font size="2">
		</font>
		<font color="#3f5fbf" size="2">args</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#3f5fbf" size="2">*/</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#7f0055" size="2">
				<b>  public</b>
		</font>
		<font size="2">
		</font>
		<font color="#7f0055" size="2">
				<b>static</b>
		</font>
		<font size="2">
		</font>
		<font color="#7f0055" size="2">
				<b>void</b>
		</font>
		<font size="2"> main(String[] args) {<p align="left"></p></font>
		<font color="#3f7f5f" size="2">    // </font>
		<font color="#7f9fbf" size="2">
				<b>TODO</b>
		</font>
		<font color="#3f7f5f" size="2"> Auto-generated method stub</font>
		<font size="2">
				<p align="left">    ApplicationContext context = </p>
		</font>
		<font color="#7f0055" size="2">
				<b>new</b>
		</font>
		<font size="2"> ClassPathXmlApplicationContext(</font>
		<font color="#2a00ff" size="2">"test/i18n/test.xml"</font>
		<font size="2">);<p align="left"></p><p align="left">    String text = context.getMessage(</p></font>
		<font color="#2a00ff" size="2">"sex"</font>
		<font size="2">, </font>
		<font color="#7f0055" size="2">
				<b>new</b>
		</font>
		<font size="2"> Object[0], Locale.</font>
		<font color="#0000c0" size="2">
				<i>US</i>
		</font>
		<font size="2">);<p align="left">    String textZH = context.getMessage(</p></font>
		<font color="#2a00ff" size="2">"sex"</font>
		<font size="2">, </font>
		<font color="#7f0055" size="2">
				<b>new</b>
		</font>
		<font size="2"> Object[0], Locale.</font>
		<font color="#0000c0" size="2">
				<i>CHINA</i>
		</font>
		<font size="2">);<p align="left">    System.</p></font>
		<font color="#0000c0" size="2">
				<i>out</i>
		</font>
		<font size="2">.println(text + </font>
		<font color="#2a00ff" size="2">" 中文:"</font>
		<font size="2"> +textZH);<p align="left">  }</p><p align="left"></p><p>}</p></font>
		<p>很简单,这样就可以了.</p>
		<p>下面来看看Spring中的属性自定义编辑器,这个和Hibernate中的自定义属性差不多 的. 例如下面我们要看到了例子,映射一个电话号码,有<font size="2">areaCode</font>,prefix和 number, 如果不使用自定义属性编辑器那么就要分别注入上面的3个代码,麻烦. 如果使用自定义属性编辑器,直接注入一个-分开的数字序列就可以了 如</p>
		<font size="2">
				<p>888-666-9999</p>
		</font>
		<p>.在下面的例子中的Contact.java类有个PhoneNumber属性,里面保存了上面的3个代码,两个类的代码如下:</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.propertyEditor;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">Contact {</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">PhoneNumber phoneNumber;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String name;</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">Contact() {}</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">String getName() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">name;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setName(String name) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.name = name;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">PhoneNumber getPhoneNumber() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">phoneNumber;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setPhoneNumber(PhoneNumber phoneNumber) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.phoneNumber = phoneNumber;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>
				<font color="#000000" size="5">
						<code style="FONT-WEIGHT: 700; FONT-FAMILY: 'Courier New', Courier">PhoneNumber.java</code>
				</font>
		</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.propertyEditor;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">PhoneNumber {</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String areaCode;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String prefix;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String number;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">PhoneNumber() {</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">PhoneNumber(String areaCode,String prefix,String number) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.areaCode = areaCode;</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.prefix = prefix;</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.number = number;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">String getAreaCode() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">areaCode;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setAreaCode(String areaCode) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.areaCode = areaCode;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">String getNumber() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">number;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setNumber(String number) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.number = number;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">String getPrefix() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">prefix;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setPrefix(String prefix) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.prefix = prefix;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>然后定义一个用来编辑PhoneNumber的编辑器PhoneEditor.java 如下:</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.propertyEditor;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">java.beans.PropertyEditorSupport;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">PhoneEditor </font>
						<font color="#7f0055">
								<b>extends </b>
						</font>
						<font color="#000000">PropertyEditorSupport {</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setAsText(String textValue) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">String stripped = stripNonNumber(textValue);</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">String areaCode = stripped.substring(</font>
						<font color="#990000">0</font>
						<font color="#000000">,</font>
						<font color="#990000">3</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">String prefix = stripped.substring(</font>
						<font color="#990000">3</font>
						<font color="#000000">,</font>
						<font color="#990000">6</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">String number = stripped.substring(</font>
						<font color="#990000">6</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">PhoneNumber phone = </font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">PhoneNumber(areaCode,prefix,number);</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">setValue(phone);</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String stripNonNumber(String original) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">StringBuilder allNumeric = </font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">StringBuilder();</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>for</b>
						</font>
						<font color="#000000">(</font>
						<font color="#7f0055">
								<b>int </b>
						</font>
						<font color="#000000">i = </font>
						<font color="#990000">0</font>
						<font color="#000000">; i &lt; original.length(); i ++) {</font>
						<br />
						<font color="#ffffff">      </font>
						<font color="#7f0055">
								<b>char </b>
						</font>
						<font color="#000000">c = original.charAt(i);</font>
						<br />
						<font color="#ffffff">      </font>
						<font color="#7f0055">
								<b>if</b>
						</font>
						<font color="#000000">(Character.isDigit(c)) {</font>
						<br />
						<font color="#ffffff">        </font>
						<font color="#000000">allNumeric.append(c);</font>
						<br />
						<font color="#ffffff">      </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">allNumeric.toString();</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>继承java里面的属性编辑器,实现里面的一个方法就可以了, 下面就是在配置文件中注册该编辑器.如下:</p>
		<p>testPropertyEditor.xml</p>
		<font color="#008080" size="2">
				<p align="left">&lt;?</p>
		</font>
		<font color="#3f7f7f" size="2">xml </font>
		<font color="#7f007f" size="2">version</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"1.0" </font>
		<font color="#7f007f" size="2">encoding</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"UTF-8"</font>
		<font color="#008080" size="2">?&gt;<p align="left">&lt;!</p></font>
		<font color="#3f7f7f" size="2">DOCTYPE </font>
		<font color="#000080" size="2">beans </font>
		<font color="#808080" size="2">PUBLIC </font>
		<font color="#000080" size="2">"-//SPRING//DTD BEAN//EN" </font>
		<font color="#3f7f5f" size="2">"spring-beans.dtd" </font>
		<font color="#008080" size="2">&gt;<p align="left">&lt;</p></font>
		<font color="#3f7f7f" size="2">beans</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">bean </font>
		<font color="#7f007f" size="2">id</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"customEditorConfigurer" </font>
		<font color="#7f007f" size="2">class</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"org.springframework.beans.factory.config.CustomEditorConfigurer"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">property </font>
		<font color="#7f007f" size="2">name</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"customEditors"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">map</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">entry </font>
		<font color="#7f007f" size="2">key</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"test.propertyEditor.PhoneNumber"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">bean </font>
		<font color="#7f007f" size="2">id</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"phoneEditor" </font>
		<font color="#7f007f" size="2">class</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"test.propertyEditor.PhoneEditor"</font>
		<font color="#008080" size="2">&gt;&lt;/</font>
		<font color="#3f7f7f" size="2">bean</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">entry</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">map</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">property</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">bean</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#3f5fbf" size="2">&lt;!-- 如果不注册上面自定义Editor的实现, 需要注册一个PhoneNumber的bean,设置其属性然后再注册<p align="left">Contact的PhoneNumber的属性</p><p align="left">--&gt;</p></font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">bean </font>
		<font color="#7f007f" size="2">id</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"contact" </font>
		<font color="#7f007f" size="2">class</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"test.propertyEditor.Contact"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">property </font>
		<font color="#7f007f" size="2">name</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"phoneNumber"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">value</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">888-666-9999</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">value</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">property</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">bean</font>
		<font color="#008080" size="2">&gt;<p align="left">&lt;/</p></font>
		<font color="#3f7f7f" size="2">beans</font>
		<font color="#008080" size="2">&gt;</font>
		<p>最后来测试一下注册的结果是否正确:</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.propertyEditor;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.context.ApplicationContext;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.context.support.ClassPathXmlApplicationContext;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">TestPropertyEditor {</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#3f5fbf">/**</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f5fbf">* </font>
						<font color="#7f9fbf">@param </font>
						<font color="#3f5fbf">args</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f5fbf">*/</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public static void </b>
						</font>
						<font color="#000000">main(String[] args) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#3f7f5f">// TODO Auto-generated method stub</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">ApplicationContext context = </font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">ClassPathXmlApplicationContext(</font>
						<font color="#2a00ff">"test/propertyEditor/testPropertyEditor.xml"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">Contact c = (Contact) context.getBean(</font>
						<font color="#2a00ff">"contact"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(c.getPhoneNumber().getAreaCode());</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(c.getPhoneNumber().getPrefix());</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(c.getPhoneNumber().getNumber());</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>ok, 很简单,下一次来看看,Spring提供的一下比较有意思的功能.如定时,发送Email等.</p><img src ="http://www.blogjava.net/51AOP/aggbug/48700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/51AOP/" target="_blank">冰雨</a> 2006-05-29 11:24 <a href="http://www.blogjava.net/51AOP/archive/2006/05/29/48700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring in Action 笔记(III) -- 在Spring下的Hibernate数据操作 </title><link>http://www.blogjava.net/51AOP/archive/2006/05/27/48456.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Sat, 27 May 2006 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/51AOP/archive/2006/05/27/48456.html</guid><wfw:comment>http://www.blogjava.net/51AOP/comments/48456.html</wfw:comment><comments>http://www.blogjava.net/51AOP/archive/2006/05/27/48456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/51AOP/comments/commentRss/48456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/51AOP/services/trackbacks/48456.html</trackback:ping><description><![CDATA[<p>
				<a id="spring_in_action_iii" name="spring_in_action_iii">
				</a> 
</p>
		<p align="center">
				<strong>Spring in Action 笔记(III)</strong>
		</p>
		<p>By: icess blog: <a href="http://blog.matrix.org.cn/page/icess">http://blog.matrix.org.cn/page/icess</a></p>
		<p>这次来看看使用Spring的Hibernate模板来操作数据, Spring提供了Hibernate的一层包装,使Hibernate使用起来更加方便,尤其是结合Hibernate Annotation时, 配置文件更少,维护更加简单. 下面来看看吧.</p>
		<p>下面是一个测试数据实体类<font color="#000000"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier">TestData.java 和前一篇提到的实体类一样,只不过用了Annotation注释. </code></font></p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.orm.hibernate.model;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">javax.persistence.Basic;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">javax.persistence.Entity;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">javax.persistence.Id;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">javax.persistence.Table;</font>
						<br />
						<br />
						<br />
						<font color="#000000">@Entity</font>
						<br />
						<font color="#000000">@Table(name = </font>
						<font color="#2a00ff">"test"</font>
						<font color="#000000">,schema = </font>
						<font color="#2a00ff">"APP"</font>
						<font color="#000000">)</font>
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">TestData {</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private int </b>
						</font>
						<font color="#000000">id;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String name;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">TestData(</font>
						<font color="#7f0055">
								<b>int </b>
						</font>
						<font color="#000000">id, String name) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.id = id;</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.name = name;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">TestData() {}</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">@Id</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public int </b>
						</font>
						<font color="#000000">getId() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">id;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setId(</font>
						<font color="#7f0055">
								<b>int </b>
						</font>
						<font color="#000000">id) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.id = id;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">@Basic</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">String getName() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">name;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setName(String name) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.name = name;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>下面是测试Hibernate模板的类, <font color="#000000"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier">TestHibernateTemplate.java</code></font></p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.orm.hibernate;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">java.sql.SQLException;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.hibernate.HibernateException;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.hibernate.Session;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.orm.hibernate3.HibernateCallback;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.orm.hibernate3.HibernateTemplate;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">test.orm.hibernate.model.TestData;</font>
						<br />
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">TestHibernateTemplate {</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">HibernateTemplate hibernateTemplate;</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">TestHibernateTemplate() {}</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">HibernateTemplate getHibernateTemplate() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">hibernateTemplate;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setHibernateTemplate(HibernateTemplate hibernateTemplate) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.hibernateTemplate = hibernateTemplate;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#3f7f5f">//测试使用HibernateTemplate来操作数据</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">TestData getTestData(</font>
						<font color="#7f0055">
								<b>final int </b>
						</font>
						<font color="#000000">id) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">(TestData) hibernateTemplate.execute(</font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">HibernateCallback() {</font>
						<br />
						<br />
						<font color="#ffffff">      </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">Object doInHibernate(Session s) </font>
						<font color="#7f0055">
								<b>throws </b>
						</font>
						<font color="#000000">HibernateException, SQLException {</font>
						<br />
						<font color="#ffffff">        </font>
						<font color="#3f7f5f">// TODO Auto-generated method stub</font>
						<br />
						<font color="#ffffff">        </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">s.get(TestData.class, id);</font>
						<br />
						<font color="#ffffff">      </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">      </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">});</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#3f7f5f">//  上面查询数据的方法 使用了HibernateCallBack接口,对于这样简单的查询,可以使用下面由HibernateTemplate 提供的更简单的方法</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">TestData getTestData2(</font>
						<font color="#7f0055">
								<b>final int </b>
						</font>
						<font color="#000000">id) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>return </b>
						</font>
						<font color="#000000">(TestData) hibernateTemplate.get(TestData.class, id);</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#3f7f5f">/* 如果上面的两处方法使用Load 方法的时, 抛出延迟加载属性异常, Spring管理Session的问题, 应该是Spring用完Session 然后就关闭了,</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f7f5f">* 所以不可以延迟加载, 也就不可以使用load 方法了,,????? 为什么????*/</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#3f7f5f">// 其他操作数据方法 如: 插入,修改.... 和使用Hibernate session 差不多, HibernateTemplate只是Session的包装</font>
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>可以看到使用Hibernate模板来操作数据,是多么简单, </p>
		<p>注意: 上面注释中,提到了在使用Load方法时候,会有问题, Session in view 时候使用load是不会出问题的, 这里Spring提供的方法应该是按照Hibernate的语义写的吧.</p>
		<p>下面就是用来测试上面的类是否正常工作的测试类了.<font color="#000000"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier">TestApp.java</code></font></p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.orm.hibernate;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.context.ApplicationContext;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.context.support.ClassPathXmlApplicationContext;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">test.jdbc.DatabaseUtils;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">test.orm.hibernate.model.TestData;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">TestApp {</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#3f5fbf">/**</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f5fbf">* </font>
						<font color="#7f9fbf">@param </font>
						<font color="#3f5fbf">args</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f5fbf">*/</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public static void </b>
						</font>
						<font color="#000000">main(String[] args) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#3f7f5f">// TODO Auto-generated method stub</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">DatabaseUtils dataUtils = </font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">DatabaseUtils();</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">dataUtils.connect();</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(</font>
						<font color="#2a00ff">"Open database:!"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">ApplicationContext context = </font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">ClassPathXmlApplicationContext(</font>
						<font color="#2a00ff">"test/orm/hibernate/spring-hibernate.xml"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">TestHibernateTemplate hibernateTemplate = (TestHibernateTemplate) context.getBean(</font>
						<font color="#2a00ff">"testDao"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(</font>
						<font color="#2a00ff">"name : " </font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">TestData data = hibernateTemplate.getTestData(</font>
						<font color="#990000">9</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(</font>
						<font color="#2a00ff">"name : " </font>
						<font color="#000000">+ data.getName());</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">data = hibernateTemplate.getTestData2(</font>
						<font color="#990000">3</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(</font>
						<font color="#2a00ff">"name 2: " </font>
						<font color="#000000">+ data.getName());</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">dataUtils.disconnect();</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>　</p>
		<p>注意: 本测试中用到了上一篇使用到的<font color="#000000"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier">DatabaseUtils.java 工具类来操作Derby数据库.</code></font></p>
		<p>
				<code>
						<font size="2">
								<span style="FONT-FAMILY: 'Courier New', Courier">由</span>
						</font>
				</code>
				<font color="#000000">
						<code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier">以上实例可以看出,在Spring中使用Hibernate,效率更高一些. 你不这样认为吗?</code>
				</font>
		</p>
		<p>
				<code>
						<font size="2">
								<span style="FONT-FAMILY: 'Courier New', Courier">同时</span>
						</font>
				</code>
				<font color="#000000">
						<code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New', Courier">Spring也提供了 JDO等其他一些数据操作框架的包装,使用上基本上 是一样的这里就不在详述了.</code>
				</font>
		</p>
		<p>
				<code>
						<font size="2">
								<span style="FONT-FAMILY: 'Courier New', Courier">下一次我们来看看Spring的I18N处理,和自定义属性编辑器的实现.</span>
						</font>
				</code>
		</p><img src ="http://www.blogjava.net/51AOP/aggbug/48456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/51AOP/" target="_blank">冰雨</a> 2006-05-27 11:01 <a href="http://www.blogjava.net/51AOP/archive/2006/05/27/48456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring in Action 笔记(II)</title><link>http://www.blogjava.net/51AOP/archive/2006/05/25/47918.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Wed, 24 May 2006 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/51AOP/archive/2006/05/25/47918.html</guid><wfw:comment>http://www.blogjava.net/51AOP/comments/47918.html</wfw:comment><comments>http://www.blogjava.net/51AOP/archive/2006/05/25/47918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/51AOP/comments/commentRss/47918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/51AOP/services/trackbacks/47918.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spring in Action 																												笔记																																(II)																																																		今天来看看使用JDBC来操作数据： 使用的是Derby（J...&nbsp;&nbsp;<a href='http://www.blogjava.net/51AOP/archive/2006/05/25/47918.html'>阅读全文</a><img src ="http://www.blogjava.net/51AOP/aggbug/47918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/51AOP/" target="_blank">冰雨</a> 2006-05-25 00:04 <a href="http://www.blogjava.net/51AOP/archive/2006/05/25/47918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring in Action 笔记(I) </title><link>http://www.blogjava.net/51AOP/archive/2006/05/22/47456.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Mon, 22 May 2006 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/51AOP/archive/2006/05/22/47456.html</guid><wfw:comment>http://www.blogjava.net/51AOP/comments/47456.html</wfw:comment><comments>http://www.blogjava.net/51AOP/archive/2006/05/22/47456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/51AOP/comments/commentRss/47456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/51AOP/services/trackbacks/47456.html</trackback:ping><description><![CDATA[<p>
		</p>
		<p>By : icess ,我的部落格 <a href="http://blog.matrix.org.cn/page/icess">http://blog.matrix.org.cn/page/icess</a></p>
		<p>在考试前匆匆看了一遍Spring in Action 也没有记录什么,考试结束了,要抓紧时间整理一下.要不然就忘了.^_^:</p>
		<p>整理一下我目前可能会用到的模块, 对于那些现在根本用不到的冬冬还是等有时间再研究吧!</p>
		<p>第一个当然是最经典的HelloWorld 了 , 呵呵,简单,但是说明了原理.</p>
		<p>定义一个服务接口</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.helloworld;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public interface </b>
						</font>
						<font color="#000000">GreetingService {</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">sayGreeting();</font>
						<br />
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>下面是其实现:</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.helloworld;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">GreetingServiceImpl </font>
						<font color="#7f0055">
								<b>implements </b>
						</font>
						<font color="#000000">GreetingService {</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>private </b>
						</font>
						<font color="#000000">String greeting;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">GreetingServiceImpl() {}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public </b>
						</font>
						<font color="#000000">GreetingServiceImpl(String greeting) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.greeting = greeting;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">sayGreeting() {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#3f7f5f">//  Auto-generated method stub</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">System.out.println(greeting);</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<font color="#ffffff">  </font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public void </b>
						</font>
						<font color="#000000">setGreeting(String greeting) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#7f0055">
								<b>this</b>
						</font>
						<font color="#000000">.greeting = greeting;</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>然后就是测试 IoC 的测试代码:</p>
		<p>
				<code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New', Courier">
						<font color="#7f0055">
								<b>package </b>
						</font>
						<font color="#000000">test.helloworld;</font>
						<br />
						<br />
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.beans.factory.BeanFactory;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.beans.factory.xml.XmlBeanFactory;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.context.ApplicationContext;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.context.support.ClassPathXmlApplicationContext;</font>
						<br />
						<font color="#7f0055">
								<b>import </b>
						</font>
						<font color="#000000">org.springframework.core.io.FileSystemResource;</font>
						<br />
						<br />
						<font color="#7f0055">
								<b>public class </b>
						</font>
						<font color="#000000">HelloApp {</font>
						<br />
						<br />
						<font color="#ffffff">  </font>
						<font color="#3f5fbf">/**</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f5fbf">* </font>
						<font color="#7f9fbf">@param </font>
						<font color="#3f5fbf">args</font>
						<br />
						<font color="#ffffff">   </font>
						<font color="#3f5fbf">*/</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#7f0055">
								<b>public static void </b>
						</font>
						<font color="#000000">main(String[] args) {</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#3f7f5f">// TODO Auto-generated method stub</font>
						<br />
						<font color="#3f7f5f">//    BeanFactory factory;</font>
						<br />
						<font color="#3f7f5f">//    factory = new XmlBeanFactory(new FileSystemResource("src/test/helloworld/hello.xml"));</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#3f7f5f">// 使用不同的方法得到bean. (BeanFactory or ApplicationContext)</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">ApplicationContext context = </font>
						<font color="#7f0055">
								<b>new </b>
						</font>
						<font color="#000000">ClassPathXmlApplicationContext(</font>
						<font color="#2a00ff">"test/helloworld/hello.xml"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">GreetingService greetingService = (GreetingService) context.getBean(</font>
						<font color="#2a00ff">"greetingService"</font>
						<font color="#000000">);</font>
						<br />
						<font color="#3f7f5f">//    GreetingService greetingService = (GreetingService) factory.getBean("greetingService");</font>
						<br />
						<font color="#ffffff">    </font>
						<font color="#000000">greetingService.sayGreeting();</font>
						<br />
						<font color="#ffffff">  </font>
						<font color="#000000">}</font>
						<br />
						<br />
						<font color="#000000">}</font>
				</code>
		</p>
		<p>还有重要的配置文件如下:hello.xml</p>
		<font color="#008080" size="2">
				<p align="left">&lt;?</p>
		</font>
		<font color="#3f7f7f" size="2">xml </font>
		<font color="#7f007f" size="2">version</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"1.0" </font>
		<font color="#7f007f" size="2">encoding</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"UTF-8"</font>
		<font color="#008080" size="2">?&gt;
<p align="left">&lt;!</p></font>
		<font color="#3f7f7f" size="2">DOCTYPE </font>
		<font color="#000080" size="2">beans </font>
		<font color="#808080" size="2">PUBLIC </font>
		<font color="#000080" size="2">"-//SPRING//DTD BEAN//EN"
<p align="left"></p></font>
		<font color="#3f7f5f" size="2">"http://www.springframework.org/dtd/spring-beans.dtd"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">
				<p align="left">&lt;</p>
		</font>
		<font color="#3f7f7f" size="2">beans</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">bean </font>
		<font color="#7f007f" size="2">id</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"greetingService"
<p align="left"></p></font>
		<font color="#7f007f" size="2">class</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"test.helloworld.GreetingServiceImpl"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">property </font>
		<font color="#7f007f" size="2">name</font>
		<font size="2">=</font>
		<font color="#2a00ff" size="2">"greeting"</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;</font>
		<font color="#3f7f7f" size="2">value</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">ice rain !</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">value</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">property</font>
		<font color="#008080" size="2">&gt;</font>
		<font size="2">
				<p align="left">
				</p>
		</font>
		<font color="#008080" size="2">&lt;/</font>
		<font color="#3f7f7f" size="2">bean</font>
		<font color="#008080" size="2">&gt;
<p align="left">&lt;/</p></font>
		<font color="#3f7f7f" size="2">beans</font>
		<font color="#008080" size="2">&gt;</font>
		<p>呵呵就这么简单,实现了 greeting 属性的 Ioc. </p>
		<p>这是Spring 两大基本支柱其一的工作原理, 关于AoP的内容,在这里不作讨论,因为现在我使用AoP的地方不是很多,简单的应用是很简单的啦.^_^.</p>
		<p>下面一篇我们来看看 在spring包装下的jdbc访问. 详细情况也可以<b><a href="http://blog.matrix.org.cn/page/icess?entry=why_spring_jdbc" target="_blank">参考这里</a></b></p><img src ="http://www.blogjava.net/51AOP/aggbug/47456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/51AOP/" target="_blank">冰雨</a> 2006-05-22 14:13 <a href="http://www.blogjava.net/51AOP/archive/2006/05/22/47456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>