﻿<?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-为学日益,为道日损.损之又损,以至于无为,无为而无不为.-随笔分类-『&lt;span style="color: #F79A01;"&gt;Spring &lt;/span&gt;』</title><link>http://www.blogjava.net/xfan/category/11959.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:52:45 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:52:45 GMT</pubDate><ttl>60</ttl><item><title>图解spring mvc</title><link>http://www.blogjava.net/xfan/archive/2006/06/15/53099.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Thu, 15 Jun 2006 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/15/53099.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/53099.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/15/53099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/53099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/53099.html</trackback:ping><description><![CDATA[
		<img src="http://www.blogjava.net/images/blogjava_net/xfan/12217/r_springmvc.gif" />
		<br />注解：<br />1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。<br />2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.<br />3.DispatcherServlet请请求提交到目标Controller<br />4.Controller进行业务逻辑处理后，会返回一个ModelAndView<br />5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象<br />6.视图对象负责渲染返回给客户端<img src ="http://www.blogjava.net/xfan/aggbug/53099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-15 22:44 <a href="http://www.blogjava.net/xfan/archive/2006/06/15/53099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quartz的cron表达式</title><link>http://www.blogjava.net/xfan/archive/2006/06/14/52801.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Wed, 14 Jun 2006 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/14/52801.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/52801.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/14/52801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/52801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/52801.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍Quartz的cron表达式&nbsp;&nbsp;<a href='http://www.blogjava.net/xfan/archive/2006/06/14/52801.html'>阅读全文</a><img src ="http://www.blogjava.net/xfan/aggbug/52801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-14 17:36 <a href="http://www.blogjava.net/xfan/archive/2006/06/14/52801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在spring利用javamail，quartz定时发送邮件</title><link>http://www.blogjava.net/xfan/archive/2006/06/13/52577.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Tue, 13 Jun 2006 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/13/52577.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/52577.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/13/52577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/52577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/52577.html</trackback:ping><description><![CDATA[     在web开发中，我们经常需要定时完成一些功能。比如定义统计报表啊，统计用户排名等等。利用spring就可以轻松地做到这些任务。下面我就以定时发送邮件来来展示如何利用spring定时发送邮件，以及spring对JavaMail的简化。<br />MailService.java类<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.quartz;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.mail.MailException;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.mail.MailSender;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.mail.SimpleMailMessage;<br /><img id="Codehighlighter1_192_610_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_610_Open_Text.style.display='none'; Codehighlighter1_192_610_Closed_Image.style.display='inline'; Codehighlighter1_192_610_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_192_610_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_192_610_Closed_Text.style.display='none'; Codehighlighter1_192_610_Open_Image.style.display='inline'; Codehighlighter1_192_610_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MailService </span><span id="Codehighlighter1_192_610_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_192_610_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> MailSender mailSender;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> SimpleMailMessage mailMessage;//邮件模板<br /><img id="Codehighlighter1_290_589_Open_Image" onclick="this.style.display='none'; Codehighlighter1_290_589_Open_Text.style.display='none'; Codehighlighter1_290_589_Closed_Image.style.display='inline'; Codehighlighter1_290_589_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_290_589_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_290_589_Closed_Text.style.display='none'; Codehighlighter1_290_589_Open_Image.style.display='inline'; Codehighlighter1_290_589_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> sendMail() </span><span id="Codehighlighter1_290_589_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_290_589_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-----------发送邮件!---------</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        SimpleMailMessage msg</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SimpleMailMessage(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mailMessage);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        msg.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is a test mail</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_452_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_452_481_Open_Text.style.display='none'; Codehighlighter1_452_481_Closed_Image.style.display='inline'; Codehighlighter1_452_481_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_452_481_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_452_481_Closed_Text.style.display='none'; Codehighlighter1_452_481_Open_Image.style.display='inline'; Codehighlighter1_452_481_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_452_481_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_452_481_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            mailSender.send(msg);<br /><img id="Codehighlighter1_507_535_Open_Image" onclick="this.style.display='none'; Codehighlighter1_507_535_Open_Text.style.display='none'; Codehighlighter1_507_535_Closed_Image.style.display='inline'; Codehighlighter1_507_535_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_507_535_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_507_535_Closed_Text.style.display='none'; Codehighlighter1_507_535_Open_Image.style.display='inline'; Codehighlighter1_507_535_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (MailException e) </span><span id="Codehighlighter1_507_535_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_507_535_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-----------发送成功!---------</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">省略set,get方法</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span></div>在web.xml里添加以下代码<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">listener</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">listener-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.springframework.web.context.ContextLoaderListener</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">listener-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">listener</span><span style="COLOR: #0000ff">&gt;</span></div>在WEB-INF目录下添加applicationContext.xml文件<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mailSender"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        class</span><span style="COLOR: #0000ff">="org.springframework.mail.javamail.JavaMailSenderImpl"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="host"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="smtp.163.com"</span><span style="COLOR: #0000ff">/&gt;<br /></span><span style="COLOR: #000000">            <font color="#0000ff">&lt;!-- 有些邮件服务器发送邮件需要认证，所以必须提供帐号  --&gt;</font><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="username"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="填入用户名"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="password"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="填入密码"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="javaMailProperties"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="mail.smtp.auth"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">true</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    &lt;!--一个邮件模板--&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mailMessage"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.mail.SimpleMailMessage"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="to"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="asm_c_yuan@163.com"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="from"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="asm_c_yuan@163.com"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="subject"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;<br /></span><span style="COLOR: #000000">        <span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="ms"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.open.quartz.MailService"</span><span style="COLOR: #ff0000"> autowire</span><span style="COLOR: #0000ff">="byName"</span><span style="COLOR: #0000ff">/&gt;</span><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="reportJob"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="targetObject"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="ms"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="targetMethod"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="sendMail"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;<br /></span><span style="COLOR: #000000">       &lt;!--一个简单的调度器--&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="simpleTrigger"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.SimpleTriggerBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jobDetail"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="reportJob"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="startDelay"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="1"</span><span style="COLOR: #0000ff">/&gt;   在web启动多少毫秒后启动任务</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="repeatInterval"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="100000000"</span><span style="COLOR: #0000ff">/&gt; 表示没隔多少毫秒启动</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;<br /></span><span style="COLOR: #000000">       &lt;!--一个定时的调度器--&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="cronTrigger"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.CronTriggerBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jobDetail"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="reportJob"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="cronExpression"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="0 0 6 * * ?"</span><span style="COLOR: #0000ff">/&gt; 指明每天早上6点启动任务,表达式的解释见下篇文章</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="triggers"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="simpleTrigger"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div>涉及的jar包有:spring.jar,javamail.jar,activation.jar,quartz.jar<br /><img src ="http://www.blogjava.net/xfan/aggbug/52577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-13 22:06 <a href="http://www.blogjava.net/xfan/archive/2006/06/13/52577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring对java远程调用的简化(三)之HTTPinvoker </title><link>http://www.blogjava.net/xfan/archive/2006/06/13/52463.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Tue, 13 Jun 2006 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/13/52463.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/52463.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/13/52463.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/52463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/52463.html</trackback:ping><description><![CDATA[    RMI使用Java标准的对象序列化，但很难穿越防火墙；另一方面，Hessian、Burlap能很好地穿越防火墙，但使用自己私有的一套对象序列化机制，当数据模型非常复杂的话，就不好了。spring的Httpinvoker是基于Http的远程调用，并且使用Java的序列化机制。它的缺点就是，服务端的应用必须基于spring。除了java，还不能移植到其他语言上。<br />   spring的用法跟hessian,burlap一样。把代理类，和服务输出类分别改成<br />org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean<br />org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter<br />就可以了，不用改代码就可以运行第二节的例子<img src ="http://www.blogjava.net/xfan/aggbug/52463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-13 14:02 <a href="http://www.blogjava.net/xfan/archive/2006/06/13/52463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring对java远程调用的简化(二)之Hessian,Burlap</title><link>http://www.blogjava.net/xfan/archive/2006/06/13/52446.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Tue, 13 Jun 2006 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/13/52446.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/52446.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/13/52446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/52446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/52446.html</trackback:ping><description><![CDATA[Hessian,Burlap是Caucho提供的两种基于Http的轻量级远程服务。<br />       Hessian像RMI那样，使用二进制消息来建立客户端和服务端之间的交流。与其他二进制远程技术(想RMI)不同的是，它可以移植到其他非Java的语言。<br />      Burlap是一种基于Xml的远程技术，这使得他可以移植到任何可以解析XML的语言中。比起Hessian，它的可读性更强。和其他基于Xml的远程技术（如SOAP和XML-RPC）不同，它的消息结构尽可能简单，不需要额外的外部定义语言(如WSDL或IDL).<br /> 针对前面的例子，看看spring对Hessian和Burlap是怎么简化。<br />1.Hessian<br />1)客户端的配置，只需要修改bean_client.xml的配置<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">客户端</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="pf" </span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="org.springframework.remoting.caucho.HessianProxyFactoryBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="serviceUrl" </span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="http://192.168.1.8:8080/spring/pay.service"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="serviceInterface"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="com.open.rmi.ex2.PerfectTimeI"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.open.rmi.ex2.DisplayPerfectTime"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="pf"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="pf"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span></div>Hessian和Burlap是基于Http的,<font color="#0000ff">http://192.168.1.8:8080/spring/pay.service<font color="#000000">是服务端的访问地址<br />2)服务端的配置，这里</font></font>采用spring的mvc<br />先在web.xml中增加下面的配置<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 141px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Dispatcher</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.springframework.web.servlet.DispatcherServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Dispatcher</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">*.service</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span></div><br />第一节中的bean_server.xml就改配置Dispatcher-servlet.xml文件中了<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="urlMapping" </span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="mappings"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="/pay.service"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">hessianService</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="hessianService"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.remoting.caucho.HessianServiceExporter"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="service"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="pt"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="serviceInterface"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="com.open.rmi.ex2.PerfectTimeI"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="pt"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.open.rmi.ex2.PerfectTime"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div>跟第一节的相比只是更换了代理类，启动tomcat，在运行TestClient就可以看到输出结果了<br />2.Burlap<br />只要把bean_client.xml中的<font color="#0000ff">HessianProxyFactoryBean</font><font color="#000000">改成BurlapProxyFactoryBean,Dispatcher-servlet.xml中的<font color="#0000ff">HessianServiceExporter</font></font><font color="#000000">改成BurlapServiceExporter，就可以了。<br />      通过上面可以看到，应用从纯RMI转换到Hessian,Burlap是多么容易啊!<br /><br /><br /></font><img src ="http://www.blogjava.net/xfan/aggbug/52446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-13 13:19 <a href="http://www.blogjava.net/xfan/archive/2006/06/13/52446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring对java远程调用的简化(一)之RMI</title><link>http://www.blogjava.net/xfan/archive/2006/06/12/52294.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Mon, 12 Jun 2006 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/12/52294.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/52294.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/12/52294.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/52294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/52294.html</trackback:ping><description><![CDATA[Java开发者可以利用的远程技术有以下几种:<br />1.远程方法调用（RMI）<br />2.Caucho的Hessian和Burlap<br />3.Spring自己的HTTP invoker<br />4.EJB<br />5.Web Services<br />一.RMI<br />它由5个包及3个应用工具组成<br />java.rmi 组织客户端的RMI类、接口和异常<br />java.rmi.server 组织服务器端的RMI类 接口和异常<br />java.rmi.registry 组织用于管理RMI命名服务的类<br />java.rmi.dgc 组织用于管理分布式垃圾收集的类<br />java.rmi.activation 组织用于实现按需激活的RMI服务的类<br />rmic 编译器，它产生RMI使用的存根和框架以完成分布式通信<br />rmiregistry 一个为RMI提供命名服务的服务器，这项服务把名字和对象关联在一起<br />rmid 一个支持RMI激活框架的服务器<br /><br />     如果具体还不知道什么是RMI，可以参考这篇非常不错的文章《<a href="http://www.matrix.org.cn/resource/article/0/229.html">JavaRMI入门实战</a>》<br />注意:<br />    1)要把PerfectTime 和PerfectTimeI类中的<br />   System.setSecurityManager(new RMISecurityManager()); 注释掉（因为这需要配安全策略，比较麻烦）<br />   2)还有在JDK5下，用rmic -d命令的话只会输出一个文件，因为JDK5对RMI进行了优化<br />接下来看看用spring对《<a href="http://www.matrix.org.cn/resource/article/0/229.html">JavaRMI入门实战</a>》例子的简化<br />1.客户端的配置及代码<br />PerfectTimeI接口（不用继承java.rmi.Remote接口了，普通的POJO）<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.rmi.ex2;<br /><img id="Codehighlighter1_57_84_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_84_Open_Text.style.display='none'; Codehighlighter1_57_84_Closed_Image.style.display='inline'; Codehighlighter1_57_84_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_57_84_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_57_84_Closed_Text.style.display='none'; Codehighlighter1_57_84_Open_Image.style.display='inline'; Codehighlighter1_57_84_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> PerfectTimeI  </span><span id="Codehighlighter1_57_84_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_57_84_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> getPerfectTime(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>DisplayPerfectTime类(也是一个普通的类)<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.rmi.ex2;<br /><img id="Codehighlighter1_58_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_234_Open_Text.style.display='none'; Codehighlighter1_58_234_Closed_Image.style.display='inline'; Codehighlighter1_58_234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_58_234_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_58_234_Closed_Text.style.display='none'; Codehighlighter1_58_234_Open_Image.style.display='inline'; Codehighlighter1_58_234_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> DisplayPerfectTime </span><span id="Codehighlighter1_58_234_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_58_234_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> PerfectTimeI pf;<br /><img id="Codehighlighter1_109_210_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_210_Open_Text.style.display='none'; Codehighlighter1_109_210_Closed_Image.style.display='inline'; Codehighlighter1_109_210_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_109_210_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_210_Closed_Text.style.display='none'; Codehighlighter1_109_210_Open_Image.style.display='inline'; Codehighlighter1_109_210_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> display() </span><span id="Codehighlighter1_109_210_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_109_210_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_142_207_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_207_Open_Text.style.display='none'; Codehighlighter1_142_207_Closed_Image.style.display='inline'; Codehighlighter1_142_207_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_142_207_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_207_Closed_Text.style.display='none'; Codehighlighter1_142_207_Open_Image.style.display='inline'; Codehighlighter1_142_207_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_142_207_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_142_207_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PerfectTime:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> pf.getPerfectTime());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">省略了pf的get,set方法</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span></div>客户端配置bean_client.xml<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">客户端</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="pf"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.remoting.rmi.RmiProxyFactoryBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="serviceUrl"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="rmi://192.168.1.8:1099/perfect_time"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="serviceInterface"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="com.open.rmi.ex2.PerfectTimeI"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.open.rmi.ex2.DisplayPerfectTime"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="pf"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="pf"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span></div>2.服务端的配置及代码<br />PerfectTime类(爽吧，简简单单的POJO)<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.rmi.ex2;<br /><img id="Codehighlighter1_76_150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_150_Open_Text.style.display='none'; Codehighlighter1_76_150_Closed_Image.style.display='inline'; Codehighlighter1_76_150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_76_150_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_76_150_Closed_Text.style.display='none'; Codehighlighter1_76_150_Open_Image.style.display='inline'; Codehighlighter1_76_150_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> PerfectTime  </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> PerfectTimeI </span><span id="Codehighlighter1_76_150_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_76_150_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_108_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_108_148_Open_Text.style.display='none'; Codehighlighter1_108_148_Closed_Image.style.display='inline'; Codehighlighter1_108_148_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_108_148_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_108_148_Closed_Text.style.display='none'; Codehighlighter1_108_148_Open_Image.style.display='inline'; Codehighlighter1_108_148_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> getPerfectTime() </span><span id="Codehighlighter1_108_148_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_108_148_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> System.currentTimeMillis();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>配置bean_server.xml<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000">服务端:Spring读取完定义文件,在生成serviceExporter实例后，RMI服务就会启动</span><span style="COLOR: #000000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">serviceExporter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.springframework.remoting.rmi.RmiServiceExporter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">service</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> ref</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">serviceName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">perfect_time</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">serviceInterface</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.open.rmi.ex2.PerfectTimeI</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.open.rmi.ex2.PerfectTime</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span></div>3.测试代码<br />TestServer.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.rmi.ex2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.beans.factory.BeanFactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /><img id="Codehighlighter1_179_331_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_331_Open_Text.style.display='none'; Codehighlighter1_179_331_Closed_Image.style.display='inline'; Codehighlighter1_179_331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_179_331_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_179_331_Closed_Text.style.display='none'; Codehighlighter1_179_331_Open_Image.style.display='inline'; Codehighlighter1_179_331_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TestServer </span><span id="Codehighlighter1_179_331_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_179_331_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_221_329_Open_Image" onclick="this.style.display='none'; Codehighlighter1_221_329_Open_Text.style.display='none'; Codehighlighter1_221_329_Closed_Image.style.display='inline'; Codehighlighter1_221_329_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_221_329_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_221_329_Closed_Text.style.display='none'; Codehighlighter1_221_329_Open_Image.style.display='inline'; Codehighlighter1_221_329_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_221_329_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_221_329_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BeanFactory bf</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClassPathXmlApplicationContext(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bean_server.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        bf.getBean(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">serviceExporter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>TestClient.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.rmi.ex2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.beans.factory.BeanFactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_181_388_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_388_Open_Text.style.display='none'; Codehighlighter1_181_388_Closed_Image.style.display='inline'; Codehighlighter1_181_388_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_181_388_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_181_388_Closed_Text.style.display='none'; Codehighlighter1_181_388_Open_Image.style.display='inline'; Codehighlighter1_181_388_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TestClient </span><span id="Codehighlighter1_181_388_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_181_388_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_223_386_Open_Image" onclick="this.style.display='none'; Codehighlighter1_223_386_Open_Text.style.display='none'; Codehighlighter1_223_386_Closed_Image.style.display='inline'; Codehighlighter1_223_386_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_223_386_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_223_386_Closed_Text.style.display='none'; Codehighlighter1_223_386_Open_Image.style.display='inline'; Codehighlighter1_223_386_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_223_386_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_223_386_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BeanFactory bf </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClassPathXmlApplicationContext(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bean_client.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        DisplayPerfectTime test </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (DisplayPerfectTime)bf.getBean(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        test.display();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>先运行TestServer，输出<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">RmiServiceExporter </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> Could not detect RMI registry </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> creating </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> one</span></div>在运行TestClient就可以看到结果了<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">PerfectTime:</span><span style="COLOR: #000000">1150125107468</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />PerfectTime:</span><span style="COLOR: #000000">1150125107484</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />PerfectTime:</span><span style="COLOR: #000000">1150125107484</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /></span></div>看到没，你根本不用运行rmic -d G:\RMI test.PerfectTime，start rmiregistry 。<br />这就是spring的魅力啊<br /><img src ="http://www.blogjava.net/xfan/aggbug/52294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-12 23:15 <a href="http://www.blogjava.net/xfan/archive/2006/06/12/52294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring中事务的属性</title><link>http://www.blogjava.net/xfan/archive/2006/06/11/52064.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Sun, 11 Jun 2006 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/11/52064.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/52064.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/11/52064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/52064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/52064.html</trackback:ping><description><![CDATA[1.传播行为<br />定义了关于客户端和被调用方法的事务边界。传播规则就是在说明新的事务是否要被启动或是挂起，或者方法是否要在事务环境中运行。<br />spring定义了7种不同的传播行为。<br />1)PROPAGATION_MANDATORY<br />   表明方法必须要在事务中运行。如果事务不存在，抛出异常<br />2)PROPAGATION_NESTED<br />   表示如果当前已经存在一个事务，则该方法应当运行在一个嵌套的事务中。被嵌套的事务可以从当前事务中单独地提交或回滚。如果当前事务不存在，就相当于PROPAGATION_REQUIRED<br />3)PROPAGATION_NEVER<br />  表示当前的方法不应该运行在一个事务上下文中。如果当前存在一个事务，则会抛出一个异常。<br />4)PROPAGATION_NOT_SUPPORTED<br />表示该方法不应该在事务中运行。如果一个现有的事务正在运行中。它将在该方法的运行期间被挂起<br />5)PROPAGATION_REQUIRED<br />表示当前方法必须运行在一个事务中。如果一个现有的事务正在运行中，该方法将运行在这个事务中。否则的话，就要开始一个新的事务。<br />6)PROPAGATION_REQUIRES_NEW<br />表示当前方法必须运行在它自己的事务中。如果一个现有事务在运行的话，将在这个方法运行期间被挂起。<br />7)PROPAGATION_SUPPORTS<br />表示当前方法不需要事务处理环境，但如果有一个事务已经在运行的话，这个方法也可以在这个事务中运行<br />2.隔离级别<br />多个事务并发运行的关系。因为并发会导致以下问题<br />.脏读(Dirty read) 一个事务读取了被另一个事务改写但还没提交的数据。<br />.不可重复读(Nonrepeatable read) 一个事务执行相同的查询两次或两次以上，但每次查询结果都不同时。这由于另一个并发事务在两次查询之间更新了数据<br />.幻读(Phantom read)<br />当一个事务读取几行记录后，另一个并发事务插入一些记录，就发生了幻读<br />spring定义了以下5种隔离关系<br />1)ISOLATION_DEFAULT<br />使用后端数据库默认得隔离级别<br />2)ISOLATION_READ_UNCOMMITTED<br />允许你读取还未提交的改变了的数据。可能导致脏读，不可重复读，幻读<br />3)ISOLATION_READ_COMMITTTED<br />运行在并发事务已经提价后读取。可防止脏读，但不可重复读，幻读都有可能发生<br />4)ISOLATION_REPEATABLE_READ<br />对相同字段的多次读取结果是一致的，除非数据被事务本身。可防止脏读，不可重复读，但幻读仍可能发生。<br />5)ISOLATION_SERIALIZABLE<br />完全服从ACID的隔离级别，确保不发生脏读，不可重复读，幻读。它的典型做法就是完全锁定在事务中涉及的数据表。因此它是最慢地。<br />3.只读提示<br />通过只读属性，数据库可以对事务进行优化。<br />4.事务超时时间<br />设置了的话，事务在超过这个时间后就自动回滚。避免占用资源过久。<img src ="http://www.blogjava.net/xfan/aggbug/52064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-11 22:50 <a href="http://www.blogjava.net/xfan/archive/2006/06/11/52064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务的特点以及spring提供事务管理器的简介</title><link>http://www.blogjava.net/xfan/archive/2006/06/10/51839.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Sat, 10 Jun 2006 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/10/51839.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/51839.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/10/51839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/51839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/51839.html</trackback:ping><description><![CDATA[事务的特点(ACID)<br />1)原子性(Atomic)<br />事务由一个或多个行为绑在一起组成的，好像一个单独的工作单元。事务中的操作要么都发生，要么都不发生。<br />2)一致性(Consistent)一旦一个事务结束了(不管成功与否)，系统所处的状态和它的业务规则是一致的。<br />3)隔离性(Isolated)事务应该允许多个用户操作同一个数据，一个用户的操作不会和其他用户的操作相混浊。<br />4)持久性(Durable)一旦事务完成，事务的结果应该持久化。<br /><br />spring提供了以下事务管理器<br />1)DataSourceTransactionManager      在单一的JDBC DataSource中管理事务<br />2)HibernateTransactionManager 当持久化机制是Hibernate时，用它来管理事务<br />3)JdoTransactionManager 当持久化机制时JDO时，用它来管理事务<br />4)JtaTransactionManager使用一个JTA实行来管理事务。当一个事务跨越多个资源时     必须使用<br />5)PersistenceBrokerTransactionManager当Apache的OJB用作持久化时，用它来管理事务<br />6)TopLinkTransactionManager当oracle的TopLink用作持久化时，用它来管理事务<br />7)JmsTransactionManager用它来管理JMS的事务<br /><br /><img src ="http://www.blogjava.net/xfan/aggbug/51839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-10 14:02 <a href="http://www.blogjava.net/xfan/archive/2006/06/10/51839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ProxyFactoryBean属性介绍</title><link>http://www.blogjava.net/xfan/archive/2006/06/10/51794.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Sat, 10 Jun 2006 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/10/51794.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/51794.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/10/51794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/51794.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/51794.html</trackback:ping><description><![CDATA[今天在看spring in action 的AOP,就把它抄录下来<br />target:代理的目标类<br />proxyInterfaces:代理类应该实现的接口列表<br />interceptorNames:需要应用到目标对象上的通知Bean的名字.可以是拦截器,advisor和其他通知类型的名字。这个属性必须按照在BeanFactory中的顺序设置<br />singleton:<br />aopProxyFactory:使用的ProxyFactoryBean实现。Spring带有两种实现(JDK动态代理和CGLIB)。通常不需要使用这个属性<br />exposeProxy:目标对象是否需要得到当前的代理。通过调用AopContext.getCurrentProxy实现。<br />frozen:一旦工厂被创建，是否可以修改代理的通知。当设置为true时，在运行时就不能修改ProxyFactoryBean了。通常不需要使用这个属性。<br />optimize：是否对创建的代理进行优化(只适用于CGLIB)<br />ProxyTargetClass：是否代理目标类，而不是实现接口。只能在使用CGLIB时使用<br /><br /><img src ="http://www.blogjava.net/xfan/aggbug/51794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-10 11:15 <a href="http://www.blogjava.net/xfan/archive/2006/06/10/51794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring中基础核心接口介绍</title><link>http://www.blogjava.net/xfan/archive/2006/06/09/51654.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Fri, 09 Jun 2006 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/09/51654.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/51654.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/09/51654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/51654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/51654.html</trackback:ping><description><![CDATA[
		<p>spring中基础核心接口总结<br />理解这几个接口，及其实现类就可以快速了解spring,具体的用法参考其他spring资料</p>
		<p>1.BeanFactory最基础最核心的接口<br />重要的实现类有：<br />XmlBeanFactory,以及ApplicationContext接口下的类</p>
		<p>2.Resource接口,可以通用地访问文件资源<br />1)ClassPathResource:读取得形式为"classpath:ApplicationContext.xml"<br />2)FileStstemResource:读取得形式为"file:c:\spring\src\ApplicationContext.xml"<br />3)ServletContextResource:读取得形式为"WEB-INF\ApplicationContext.xml"<br />//ResourceLoader类用于载入Resource</p>
		<p>3.FactoryBean工厂bean<br />它本身在bean factory中定义，同时又是用于创建目标bean的工厂<br />spring有以下实现:<br />1)JndiObjectFactoryBean:通过JNDI查找获取对象<br />2)LocalSessionFactoryBean:用于在本地装配Hibernate SessionFactory<br />3)LocalSessionFactoryBean:用于在本地装配JDO PersistenceManagerFactory<br />4)ProxyFactoryBean:用于获取AOP的代理<br />5)TransactionProxyFactoryBean:用于为对象创建事务代理，用于实现简捷易用的声明性事务代理<br />6)RmiProxyFactoryBean:为通过RMI访问的远程对象创建一个代理</p>
		<p>4.ApplicationContext加强了BeanFactory的功能，支持以下功能<br />1)国际化支持<br />2)资源访问<br />3)事件监听机制<br />它的重要的实现类有：<br />FileSystemXmlApplicationContext,ClassPathXmlApplication,XmlWebApplicationContext</p>
		<p>5.Bean生命周期的回调接口<br />BeanFactoryPostProcessor,InitializingBean,DisposableBean,BeanFactoryAware,ApplicationContextAware,ResourceLoader,BeanPostProcessor</p>
		<p>6.MessageSource接口<br />它的实现类有ResourceBundleMessageSource,ReloadableResourceBundleMessageSource.后者在属性文件修改后会重新载入</p>
		<p>暂时介绍这几个</p>
<img src ="http://www.blogjava.net/xfan/aggbug/51654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-09 11:56 <a href="http://www.blogjava.net/xfan/archive/2006/06/09/51654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最简单的动态代理实例(spring基于接口代理的AOP原理)</title><link>http://www.blogjava.net/xfan/archive/2006/06/09/51628.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Fri, 09 Jun 2006 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/09/51628.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/51628.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/09/51628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/51628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/51628.html</trackback:ping><description><![CDATA[
		<p>JDK的动态代理是基于接口的<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.open.aop;<br /><img id="Codehighlighter1_57_91_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_91_Open_Text.style.display='none'; Codehighlighter1_57_91_Closed_Image.style.display='inline'; Codehighlighter1_57_91_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_57_91_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_57_91_Closed_Text.style.display='none'; Codehighlighter1_57_91_Open_Image.style.display='inline'; Codehighlighter1_57_91_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> BusinessInterface </span>
				<span id="Codehighlighter1_57_91_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_57_91_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> processBusiness();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>目标对象 
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.aop;<br /><img id="Codehighlighter1_79_149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_149_Open_Text.style.display='none'; Codehighlighter1_79_149_Closed_Image.style.display='inline'; Codehighlighter1_79_149_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_79_149_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_79_149_Closed_Text.style.display='none'; Codehighlighter1_79_149_Open_Image.style.display='inline'; Codehighlighter1_79_149_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BusinessObject </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> BusinessInterface </span><span id="Codehighlighter1_79_149_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_79_149_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_112_147_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_147_Open_Text.style.display='none'; Codehighlighter1_112_147_Closed_Image.style.display='inline'; Codehighlighter1_112_147_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_112_147_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_112_147_Closed_Text.style.display='none'; Codehighlighter1_112_147_Open_Image.style.display='inline'; Codehighlighter1_112_147_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> processBusiness() </span><span id="Codehighlighter1_112_147_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_112_147_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">action</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>代理对象<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.aop;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.InvocationHandler;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.Method;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.Proxy;<br /><img id="Codehighlighter1_184_670_Open_Image" onclick="this.style.display='none'; Codehighlighter1_184_670_Open_Text.style.display='none'; Codehighlighter1_184_670_Closed_Image.style.display='inline'; Codehighlighter1_184_670_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_184_670_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_670_Closed_Text.style.display='none'; Codehighlighter1_184_670_Open_Image.style.display='inline'; Codehighlighter1_184_670_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> LogHandler </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> InvocationHandler </span><span id="Codehighlighter1_184_670_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_184_670_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Object delegate;<br /><img id="Codehighlighter1_251_397_Open_Image" onclick="this.style.display='none'; Codehighlighter1_251_397_Open_Text.style.display='none'; Codehighlighter1_251_397_Closed_Image.style.display='inline'; Codehighlighter1_251_397_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_251_397_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_251_397_Closed_Text.style.display='none'; Codehighlighter1_251_397_Open_Image.style.display='inline'; Codehighlighter1_251_397_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object binder(Object delegate) </span><span id="Codehighlighter1_251_397_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_251_397_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.delegate</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">delegate;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Proxy.newProxyInstance(delegate.getClass().getClassLoader(),<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                delegate.getClass().getInterfaces(),</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object invoke(Object proxy, Method method, Object[] args)<br /><img id="Codehighlighter1_485_668_Open_Image" onclick="this.style.display='none'; Codehighlighter1_485_668_Open_Text.style.display='none'; Codehighlighter1_485_668_Closed_Image.style.display='inline'; Codehighlighter1_485_668_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_485_668_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_485_668_Closed_Text.style.display='none'; Codehighlighter1_485_668_Open_Image.style.display='inline'; Codehighlighter1_485_668_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Throwable </span><span id="Codehighlighter1_485_668_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_485_668_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Object obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">对象方法调用前</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_547_591_Open_Image" onclick="this.style.display='none'; Codehighlighter1_547_591_Open_Text.style.display='none'; Codehighlighter1_547_591_Closed_Image.style.display='inline'; Codehighlighter1_547_591_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_547_591_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_547_591_Closed_Text.style.display='none'; Codehighlighter1_547_591_Open_Image.style.display='inline'; Codehighlighter1_547_591_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_547_591_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_547_591_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> method.invoke(delegate, args);<br /><img id="Codehighlighter1_613_617_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_617_Open_Text.style.display='none'; Codehighlighter1_613_617_Closed_Image.style.display='inline'; Codehighlighter1_613_617_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_613_617_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_617_Closed_Text.style.display='none'; Codehighlighter1_613_617_Open_Image.style.display='inline'; Codehighlighter1_613_617_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception e) </span><span id="Codehighlighter1_613_617_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_613_617_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">对象方法调用后</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> obj;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>测试类
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.open.aop;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.InvocationHandler;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.lang.reflect.Proxy;<br /><img id="Codehighlighter1_116_284_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_284_Open_Text.style.display='none'; Codehighlighter1_116_284_Closed_Image.style.display='inline'; Codehighlighter1_116_284_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_116_284_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_284_Closed_Text.style.display='none'; Codehighlighter1_116_284_Open_Image.style.display='inline'; Codehighlighter1_116_284_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test </span><span id="Codehighlighter1_116_284_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_116_284_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_158_282_Open_Image" onclick="this.style.display='none'; Codehighlighter1_158_282_Open_Text.style.display='none'; Codehighlighter1_158_282_Closed_Image.style.display='inline'; Codehighlighter1_158_282_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_158_282_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_158_282_Closed_Text.style.display='none'; Codehighlighter1_158_282_Open_Image.style.display='inline'; Codehighlighter1_158_282_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_158_282_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_158_282_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BusinessInterface bi </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (BusinessInterface) </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LogHandler()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                .binder(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BusinessObject());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        bi.processBusiness();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>输出结果
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">对象方法调用前<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />action<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />对象方法调用后</span></div><img src ="http://www.blogjava.net/xfan/aggbug/51628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xfan/" target="_blank">我一直在努力!</a> 2006-06-09 10:20 <a href="http://www.blogjava.net/xfan/archive/2006/06/09/51628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring复杂属性的配置</title><link>http://www.blogjava.net/xfan/archive/2006/06/08/51303.html</link><dc:creator>我一直在努力!</dc:creator><author>我一直在努力!</author><pubDate>Thu, 08 Jun 2006 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/xfan/archive/2006/06/08/51303.html</guid><wfw:comment>http://www.blogjava.net/xfan/comments/51303.html</wfw:comment><comments>http://www.blogjava.net/xfan/archive/2006/06/08/51303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xfan/comments/commentRss/51303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xfan/services/trackbacks/51303.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.open.bean;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.List;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.Map;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.Properties;<br /><img id="Codehighlighter1_118_277_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_277_Open_Text.style.display='none'; Codehighlighter1_118_277_Closed_Image.style.display='inline'; Codehighlighter1_118_277_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_118_277_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_118_277_Closed_Text.style.display='none'; Codehighlighter1_118_277_Open_Image.style.display='inline'; Codehighlighter1_118_277_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> BeanSet </span>
				<span id="Codehighlighter1_118_277_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_118_277_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String[] str1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String[] str2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> List lst;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Map map;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Properties props;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> ChildBean[] child;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">省略set,get方法</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
		</div>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.open.bean;<br /><img id="Codehighlighter1_45_46_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_46_Open_Text.style.display='none'; Codehighlighter1_45_46_Closed_Image.style.display='inline'; Codehighlighter1_45_46_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_45_46_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_46_Closed_Text.style.display='none'; Codehighlighter1_45_46_Open_Image.style.display='inline'; Codehighlighter1_45_46_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> ChildBean</span>
				<span id="Codehighlighter1_45_46_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_45_46_Open_Text">
						<span style="COLOR: #000000">{}</span>
				</span>
		</div>配置文件
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="bs"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.open.bean.BeanSet"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="str1"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">value1</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">value2</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="str2"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">value3,value4</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="lst"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">value5</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="cc1"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        