﻿<?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-丄諦啲仇魜ヤ              -文章分类-spring</title><link>http://www.blogjava.net/Crying/category/25485.html</link><description>如 果 敌 人 让 你 生 气 , 那 说 明 你 没 有 胜 他 的 把 握！ 
</description><language>zh-cn</language><lastBuildDate>Sun, 16 Mar 2008 13:43:51 GMT</lastBuildDate><pubDate>Sun, 16 Mar 2008 13:43:51 GMT</pubDate><ttl>60</ttl><item><title>如何在Spring中配置定时任务 </title><link>http://www.blogjava.net/Crying/articles/186638.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Sun, 16 Mar 2008 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/186638.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/186638.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/186638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/186638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/186638.html</trackback:ping><description><![CDATA[&nbsp; 原文 ：<a href="http://www.blogjava.net/amigoxie/archive/2008/02/29/183046.html">http://www.blogjava.net/amigoxie/archive/2008/02/29/183046.html</a><br />
<br />
<br />
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">首先，如果你在</span><span style="font-size: 10pt; font-family: Verdana">web.xml</span><span style="font-size: 10pt; font-family: 宋体">文件中的配置是这样的：</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">&nbsp;&nbsp;&lt;context-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /WEB-INF/classes/applicationContext-*.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/param-value&gt;<br />
&nbsp;&lt;/context-param&gt;</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">那么需要在工程下创建一个以</span><span style="font-size: 10pt; font-family: Verdana">applicationContext- </span><span style="font-size: 10pt; font-family: 宋体">为开头的</span><span style="font-size: 10pt; font-family: Verdana">xml</span><span style="font-size: 10pt; font-family: 宋体">文件</span><span style="font-size: 10pt; font-family: Verdana">eg:applicationContext-jobconfig.xml</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">xml</span><span style="font-size: 10pt; font-family: 宋体">的头和结尾部分跟其他</span><span style="font-size: 10pt; font-family: Verdana">spring</span><span style="font-size: 10pt; font-family: 宋体">配置文件相似，就不赘述，正文如下：</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">&nbsp;&lt;bean id="youJobName(</span><span style="font-size: 10pt; font-family: 宋体">类别名</span><span style="font-size: 10pt; font-family: Verdana">)" class="com.******.YourJobClassLocation(</span><span style="font-size: 10pt; font-family: 宋体">类的定位</span><span style="font-size: 10pt; font-family: Verdana">)" /&gt;<br />
&nbsp;&lt;bean id="doYourJob(</span><span style="font-size: 10pt; font-family: 宋体">别名</span><span style="font-size: 10pt; font-family: Verdana">)" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;ref bean="youJobName(</span><span style="font-size: 10pt; font-family: 宋体">类别名</span><span style="font-size: 10pt; font-family: Verdana">)""/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;value&gt;runMethodName(</span><span style="font-size: 10pt; font-family: 宋体">定时执行的方法名</span><span style="font-size: 10pt; font-family: Verdana">)&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt; <br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;bean id="youJobNameTrigger(</span><span style="font-size: 10pt; font-family: 宋体">触发器别名</span><span style="font-size: 10pt; font-family: Verdana">)" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;<br />
&nbsp;&nbsp; &lt;property name="jobDetail"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="doYourJob(</span><span style="font-size: 10pt; font-family: 宋体">别名</span><span style="font-size: 10pt; font-family: Verdana">)""/&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="cronExpression"&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;value&gt;0 0/20 * * * ?(</span><span style="font-size: 10pt; color: red; font-family: 宋体">定时的时间配置</span><span style="font-size: 10pt; font-family: Verdana">)&lt;/value&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">&nbsp;&lt;bean id="doScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;<br />
&nbsp;&nbsp; &lt;property name="triggers"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;ref local="youJobNameTrigger(</span><span style="font-size: 10pt; font-family: 宋体">触发器别名</span><span style="font-size: 10pt; font-family: Verdana">)"/&gt;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">这样的配置几本就可以运转了，但是有一个地方可能是你需要根据你的需求来确定的，那就是触发时间。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">下面有一些关于时间配置的说明：</span></p>
<table cellspacing="8" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><strong><span style="font-size: 11pt; font-family: 宋体">字段顺序</span></strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><strong>&nbsp;</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><strong><span style="font-size: 11pt; font-family: 宋体">允许值</span></strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><strong>&nbsp;</strong></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><strong><span style="font-size: 11pt; font-family: 宋体">允许的特殊字符</span></strong></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">秒</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">0-59</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">分</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">0-59</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">小时</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">0-23</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">日期</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">1-31</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * ? / L W C</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">月份</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">1-12&nbsp;</span><span style="font-family: 宋体">或者 JAN-DEC</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">星期</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">1-7&nbsp;</span><span style="font-family: 宋体">或者 SUN-SAT</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * ? / L C #</span></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">年（可选）</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">留空, 1970-2099</span></p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt"></td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p style="text-align: left" align="left"><span style="font-family: 宋体">, - * /</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana"><br />
The '*' character is used to specify all values. For example, "*" in the minute field means "every minute". <br />
&#8220;*&#8221;</span><span style="font-size: 10pt; font-family: 宋体">字符被用来指定所有的值。如：</span><span style="font-size: 10pt; font-family: Verdana">&#8221;*&#8220;</span><span style="font-size: 10pt; font-family: 宋体">在分钟的字段域里表示</span><span style="font-size: 10pt; font-family: Verdana">&#8220;</span><span style="font-size: 10pt; font-family: 宋体">每分钟</span><span style="font-size: 10pt; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; font-family: 宋体">。</span><span style="font-size: 10pt; font-family: Verdana"> <br />
The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification. <br />
&#8220;?&#8221;</span><span style="font-size: 10pt; font-family: 宋体">字符只在日期域和星期域中使用。它被用来指定</span><span style="font-size: 10pt; font-family: Verdana">&#8220;</span><span style="font-size: 10pt; font-family: 宋体">非明确的值</span><span style="font-size: 10pt; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; font-family: 宋体">。当你需要通过在这两个域中的一个来指定一些东西的时候，它是有用的。看下面的例子你就会明白。</span><span style="font-size: 10pt; font-family: Verdana"> <br />
</span><span style="font-size: 10pt; font-family: 宋体">月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号</span><span style="font-size: 10pt; font-family: Verdana">(?)</span><span style="font-size: 10pt; font-family: 宋体">来表明不想设置那个字段</span><span style="font-size: 10pt; font-family: Verdana"><br />
<br />
The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12". <br />
&#8220;-&#8221;</span><span style="font-size: 10pt; font-family: 宋体">字符被用来指定一个范围。如：</span><span style="font-size: 10pt; font-family: Verdana">&#8220;10-12&#8221;</span><span style="font-size: 10pt; font-family: 宋体">在小时域意味着</span><span style="font-size: 10pt; font-family: Verdana">&#8220;10</span><span style="font-size: 10pt; font-family: 宋体">点、</span><span style="font-size: 10pt; font-family: Verdana">11</span><span style="font-size: 10pt; font-family: 宋体">点、</span><span style="font-size: 10pt; font-family: Verdana">12</span><span style="font-size: 10pt; font-family: 宋体">点</span><span style="font-size: 10pt; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; font-family: 宋体">。</span><span style="font-size: 10pt; font-family: Verdana"> <br />
<br />
The ',' character is used to specify additional values. For example "MON,WED,FRI" in the day-of-week field means "the days Monday, Wednesday, and Friday". <br />
&#8220;,&#8221;</span><span style="font-size: 10pt; font-family: 宋体">字符被用来指定另外的值。如：</span><span style="font-size: 10pt; font-family: Verdana">&#8220;MON,WED,FRI&#8221;</span><span style="font-size: 10pt; font-family: 宋体">在星期域里表示</span><span style="font-size: 10pt; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; font-family: 宋体">星期一、星期三、星期五</span><span style="font-size: 10pt; font-family: Verdana">&#8221;. <br />
<br />
The '/' character is used to specify increments. For example "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". Specifying '*' before the '/' is equivalent to specifying 0 is the value to start with. Essentially, for each field in the expression, there is a set of numbers that can be turned on or off. For seconds and minutes, the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to 31, and for months 1 to 12. The "/" character simply helps you turn on every "nth" value in the given set. Thus "7/6" in the month field only turns on month "7", it does NOT mean every 6th month, please note that subtlety. </span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">"/"</span><span style="font-size: 10pt; font-family: 宋体">字符用来指定渐增的值。例如</span><span style="font-size: 10pt; font-family: Verdana">0/15</span><span style="font-size: 10pt; font-family: 宋体">出现在秒字段的时候意味着</span><span style="font-size: 10pt; font-family: Verdana">&#8220;</span><span style="font-size: 10pt; font-family: 宋体">在第</span><span style="font-size: 10pt; font-family: Verdana">0</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Verdana">15</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Verdana">30</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">45</span><span style="font-size: 10pt; font-family: 宋体">秒</span><span style="font-size: 10pt; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; font-family: 宋体">（的时候被触发）。而</span><span style="font-size: 10pt; font-family: Verdana">5/15</span><span style="font-size: 10pt; font-family: 宋体">出现在秒字段的时候意味着</span><span style="font-size: 10pt; font-family: Verdana">&#8220;</span><span style="font-size: 10pt; font-family: 宋体">在第</span><span style="font-size: 10pt; font-family: Verdana">5</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Verdana">20</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Verdana">35</span><span style="font-size: 10pt; font-family: 宋体">和第</span><span style="font-size: 10pt; font-family: Verdana">50</span><span style="font-size: 10pt; font-family: 宋体">秒</span><span style="font-size: 10pt; font-family: Verdana">&#8221;</span><span style="font-size: 10pt; font-family: 宋体">（的时候被触发）。</span><span style="font-size: 10pt; font-family: Verdana">"*/"</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">"0/"</span><span style="font-size: 10pt; font-family: 宋体">的指定是等价的。</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">注：当分子</span><span style="font-size: 10pt; font-family: Verdana">+</span><span style="font-size: 10pt; font-family: 宋体">分母的值大于该字段的最大值，如在秒钟字段出现</span><span style="font-size: 10pt; font-family: Verdana">45/20</span><span style="font-size: 10pt; font-family: 宋体">的时候，表示在第</span><span style="font-size: 10pt; font-family: Verdana">45</span><span style="font-size: 10pt; font-family: 宋体">秒以后的每</span><span style="font-size: 10pt; font-family: Verdana">20</span><span style="font-size: 10pt; font-family: 宋体">会触发一次，但是</span><span style="font-size: 10pt; font-family: Verdana">20</span><span style="font-size: 10pt; font-family: 宋体">秒以后又算做另外的时间段以内了，所以该字段的</span><span style="font-size: 10pt; font-family: Verdana">/20</span><span style="font-size: 10pt; font-family: 宋体">即失效，如改为</span><span style="font-size: 10pt; font-family: Verdana">45/10 </span><span style="font-size: 10pt; font-family: 宋体">则只有</span><span style="font-size: 10pt; font-family: 宋体">第</span><span style="font-size: 10pt; font-family: Verdana">45 </span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">55</span><span style="font-size: 10pt; font-family: 宋体">秒会执行一次。</span><span style="font-size: 10pt; font-family: Verdana"><br />
<br />
The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" means "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results. <br />
<br />
L</span><span style="font-size: 10pt; font-family: 宋体">是</span><span style="font-size: 10pt; font-family: Verdana">&#8216;last&#8217;</span><span style="font-size: 10pt; font-family: 宋体">的省略写法可以表示</span><span style="font-size: 10pt; font-family: Verdana">day-of-month</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">day-of-week</span><span style="font-size: 10pt; font-family: 宋体">域，但在两个字段中的意思不同，例如</span><span style="font-size: 10pt; font-family: Verdana">day-of-month</span><span style="font-size: 10pt; font-family: 宋体">域中表示一个月的最后一天，</span><span style="font-size: 10pt; font-family: Verdana"><br />
</span><span style="font-size: 10pt; font-family: 宋体">如果在</span><span style="font-size: 10pt; font-family: Verdana">day-of-week</span><span style="font-size: 10pt; font-family: 宋体">域表示</span><span style="font-size: 10pt; font-family: Verdana">&#8216;7&#8217;</span><span style="font-size: 10pt; font-family: 宋体">或者</span><span style="font-size: 10pt; font-family: Verdana">&#8216;SAT&#8217;</span><span style="font-size: 10pt; font-family: 宋体">，如果在</span><span style="font-size: 10pt; font-family: Verdana">day-of-week</span><span style="font-size: 10pt; font-family: 宋体">域中前面加上数字，它表示一个月的最后几天，例如</span><span style="font-size: 10pt; font-family: Verdana">&#8216;6L&#8217;</span><span style="font-size: 10pt; font-family: 宋体">就表示一个月的最后一个</span><span style="font-size: 10pt; font-family: Verdana"><br />
</span><span style="font-size: 10pt; font-family: 宋体">星期五，</span><span style="font-size: 10pt; font-family: Verdana"><br />
<br />
The 'W' character is allowed for the day-of-month field. This character is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month". So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify "1W" as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary of a month's days. The 'W' character can only be specified when the day-of-month is a single day, not a range or list of days<br />
. <br />
The 'L' and 'W' characters can also be combined for the day-of-month expression to yield 'LW', which translates to "last weekday of the month". <br />
<br />
The '#' character is allowed for the day-of-week field. This character is used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means the third Friday of the month (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month. <br />
<br />
The 'C' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "calendar". This means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means "the first day included by the calendar on or after the 5th". A value of "1C" in the day-of-week field means "the first day included by the calendar on or after sunday". <br />
</span><span style="font-size: 10pt; font-family: 宋体">关于</span><span style="font-size: 10pt; font-family: Verdana">cronExpression</span><span style="font-size: 10pt; font-family: 宋体">的介绍</span><span style="font-size: 10pt; font-family: Verdana">:<br />
</span><span style="font-size: 10pt; font-family: 宋体">　</span><span style="font-size: 10pt; font-family: Verdana"> <br />
</span><span style="font-size: 10pt; font-family: 宋体">字段</span><span style="font-size: 10pt; font-family: 宋体">允许值</span><span style="font-size: 10pt; font-family: 宋体">允许的特殊字符</span><span style="font-size: 10pt; font-family: Verdana"> <br />
</span><span style="font-size: 10pt; font-family: 宋体">秒</span><span style="font-size: 10pt; font-family: Verdana"> 0-59 , - * / <br />
</span><span style="font-size: 10pt; font-family: 宋体">分</span><span style="font-size: 10pt; font-family: Verdana"> 0-59 , - * / <br />
</span><span style="font-size: 10pt; font-family: 宋体">小时</span><span style="font-size: 10pt; font-family: Verdana"> 0-23 , - * / <br />
</span><span style="font-size: 10pt; font-family: 宋体">日期</span><span style="font-size: 10pt; font-family: Verdana"> 1-31 , - * ? / L W C <br />
</span><span style="font-size: 10pt; font-family: 宋体">月份</span><span style="font-size: 10pt; font-family: Verdana"> 1-12 </span><span style="font-size: 10pt; font-family: 宋体">或者</span><span style="font-size: 10pt; font-family: Verdana"> JAN-DEC , - * / <br />
</span><span style="font-size: 10pt; font-family: 宋体">星期</span><span style="font-size: 10pt; font-family: Verdana"> 1-7 </span><span style="font-size: 10pt; font-family: 宋体">或者</span><span style="font-size: 10pt; font-family: Verdana"> SUN-SAT , - * ? / L C # <br />
</span><span style="font-size: 10pt; font-family: 宋体">年（可选）</span><span style="font-size: 10pt; font-family: 宋体">留空</span><span style="font-size: 10pt; font-family: Verdana">, 1970-2099 , - * / <br />
</span><span style="font-size: 10pt; font-family: 宋体">表达式意义</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 0 12 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">每天中午</span><span style="font-size: 10pt; font-family: Verdana">12</span><span style="font-size: 10pt; font-family: 宋体">点触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 ? * *" </span><span style="font-size: 10pt; font-family: 宋体">每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 * * ? *" </span><span style="font-size: 10pt; font-family: 宋体">每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 * * ? 2005" 2005</span><span style="font-size: 10pt; font-family: 宋体">年的每天上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 * 14 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下午</span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到下午</span><span style="font-size: 10pt; font-family: Verdana">2:59</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">1</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 0/5 14 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下午</span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到下午</span><span style="font-size: 10pt; font-family: Verdana">2:55</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">5</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 0/5 14,18 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下午</span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到</span><span style="font-size: 10pt; font-family: Verdana">2:55</span><span style="font-size: 10pt; font-family: 宋体">期间和下午</span><span style="font-size: 10pt; font-family: Verdana">6</span><span style="font-size: 10pt; font-family: 宋体">点到</span><span style="font-size: 10pt; font-family: Verdana">6:55</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">5</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 0-5 14 * * ?" </span><span style="font-size: 10pt; font-family: 宋体">在每天下午</span><span style="font-size: 10pt; font-family: Verdana">2</span><span style="font-size: 10pt; font-family: 宋体">点到下午</span><span style="font-size: 10pt; font-family: Verdana">2:05</span><span style="font-size: 10pt; font-family: 宋体">期间的每</span><span style="font-size: 10pt; font-family: Verdana">1</span><span style="font-size: 10pt; font-family: 宋体">分钟触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 10,44 14 ? 3 WED" </span><span style="font-size: 10pt; font-family: 宋体">每年三月的星期三的下午</span><span style="font-size: 10pt; font-family: Verdana">2:10</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Verdana">2:44</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 ? * MON-FRI" </span><span style="font-size: 10pt; font-family: 宋体">周一至周五的上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 15 * ?" </span><span style="font-size: 10pt; font-family: 宋体">每月</span><span style="font-size: 10pt; font-family: Verdana">15</span><span style="font-size: 10pt; font-family: 宋体">日上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 L * ?" </span><span style="font-size: 10pt; font-family: 宋体">每月最后一日的上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 ? * 6L" </span><span style="font-size: 10pt; font-family: 宋体">每月的最后一个星期五上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 ? * 6L 2002-2005" 2002</span><span style="font-size: 10pt; font-family: 宋体">年至</span><span style="font-size: 10pt; font-family: Verdana">2005</span><span style="font-size: 10pt; font-family: 宋体">年的每月的最后一个星期五上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
"0 15 10 ? * 6#3" </span><span style="font-size: 10pt; font-family: 宋体">每月的第三个星期五上午</span><span style="font-size: 10pt; font-family: Verdana">10:15</span><span style="font-size: 10pt; font-family: 宋体">触发</span><span style="font-size: 10pt; font-family: Verdana"> <br />
</span><span style="font-size: 10pt; font-family: 宋体">每天早上</span><span style="font-size: 10pt; font-family: Verdana">6</span><span style="font-size: 10pt; font-family: 宋体">点</span><span style="font-size: 10pt; font-family: Verdana"> <br />
0 6 * * * <br />
</span><span style="font-size: 10pt; font-family: 宋体">每两个小时</span><span style="font-size: 10pt; font-family: Verdana"> <br />
0 */2 * * * <br />
</span><span style="font-size: 10pt; font-family: 宋体">晚上</span><span style="font-size: 10pt; font-family: Verdana">11</span><span style="font-size: 10pt; font-family: 宋体">点到早上</span><span style="font-size: 10pt; font-family: Verdana">7</span><span style="font-size: 10pt; font-family: 宋体">点之间每两个小时，早上八点</span><span style="font-size: 10pt; font-family: Verdana"> <br />
0 23-7/2</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Verdana">8 * * * <br />
</span><span style="font-size: 10pt; font-family: 宋体">每个月的</span><span style="font-size: 10pt; font-family: Verdana">4</span><span style="font-size: 10pt; font-family: 宋体">号和每个礼拜的礼拜一到礼拜三的早上</span><span style="font-size: 10pt; font-family: Verdana">11</span><span style="font-size: 10pt; font-family: 宋体">点</span><span style="font-size: 10pt; font-family: Verdana"> <br />
0 11 4 * 1-3 <br />
1<span style="font-family: 宋体">月</span>1<span style="font-family: 宋体">日早上</span>4<span style="font-family: 宋体">点</span> <br />
0 4 1 1 *</span></p>
<p style="background: white; margin: 7.5pt 0cm; text-align: left" align="left"><span style="font-size: 10pt; font-family: Verdana">quartz</span><span style="font-size: 10pt; font-family: 宋体">的高级特性不仅如此</span><span style="font-size: 10pt; font-family: Verdana"> <br />
1 </span><span style="font-size: 10pt; font-family: 宋体">数据库存储</span><span style="font-size: 10pt; font-family: Verdana"> <br />
2 </span><span style="font-size: 10pt; font-family: 宋体">集群支持</span><span style="font-size: 10pt; font-family: Verdana"> <br />
3 </span><span style="font-size: 10pt; font-family: 宋体">数据库持久化任务，</span><span style="font-size: 10pt; font-family: Verdana">trigger <br />
4 trigger </span><span style="font-size: 10pt; font-family: 宋体">的停止，运行</span><span style="font-size: 10pt; font-family: Verdana"> <br />
5 </span><span style="font-size: 10pt; font-family: 宋体">任务的任意添加</span><span style="font-size: 10pt; font-family: Verdana"> <br />
6 </span><span style="font-size: 10pt; font-family: 宋体">比</span><span style="font-size: 10pt; font-family: Verdana">corntrigger </span><span style="font-size: 10pt; font-family: 宋体">更详尽的任务安排</span><span style="font-size: 10pt; font-family: Verdana"> <br />
7 </span><span style="font-size: 10pt; font-family: 宋体">线程的内部数据交换</span></p>
<img src ="http://www.blogjava.net/Crying/aggbug/186638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2008-03-16 18:31 <a href="http://www.blogjava.net/Crying/articles/186638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring的事务管理 </title><link>http://www.blogjava.net/Crying/articles/158555.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Tue, 06 Nov 2007 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/158555.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/158555.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/158555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/158555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/158555.html</trackback:ping><description><![CDATA[<p>转贴的 地址忘记了 对不起啊！<br />
</p>
<p>Spring的事务管理是经常用到的，论坛里已经不知讨论了多少变了。 <br />
记录下几个讲的比较清楚的。</p>
<p>spring事务探索 <br />
<a href="http://www.javaeye.com/topic/11190" target="blank">http://www.javaeye.com/topic/11190</a></p>
<p>解惑 spring 嵌套事务 <br />
<a href="http://www.javaeye.com/topic/35907?page=1" target="blank">http://www.javaeye.com/topic/35907?page=1</a></p>
<p>Spring声明式事务管理源码解读 <br />
<a href="http://www.javaeye.com/topic/87426?page=1" target="blank">http://www.javaeye.com/topic/87426?page=1</a></p>
<p>详解spring事务属性 <br />
<a href="http://www.javaeye.com/post/282638" target="blank">http://www.javaeye.com/post/282638</a></p>
<p>附：事务的概念</p>
<p><span style="color: red;">一.原子性（Atomic）</span> <br />
事务由一个或多个行为组成，形成一个工作单元。原子性确保在这个工作单元中的所有操作要么都发生，要么都不发生。任何一个行为失败，整个事务就回滚。</p>
<p><span style="color: red;">二.一致性（Consistent）</span> <br />
一旦一个事务结束了，不管成功与否，系统所处状态和它的也为规则是一致的，就数据应当不会被破坏。</p>
<p><span style="color: red;">三.隔离性（Isolated）</span> <br />
事务应该允许多个用户操作同一个数据，但用户之间不会互相影响。因此，事务必须是隔离的，防止并发读写同一个数据的情况发生。</p>
<p><span style="color: red;">四.持久性（Durable）</span> <br />
一旦事务成功完成，事务的结果就应该被持久化下来。 </p>
<img src ="http://www.blogjava.net/Crying/aggbug/158555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-11-06 14:56 <a href="http://www.blogjava.net/Crying/articles/158555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AOP观念（转载）</title><link>http://www.blogjava.net/Crying/articles/144951.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Thu, 13 Sep 2007 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/144951.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/144951.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/144951.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/144951.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/144951.html</trackback:ping><description><![CDATA[<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">全名为</span><span style="font-family: Arial">Aspect-Oriented Programming</span><span style="font-family: SimSun">，有关于</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">的许多名词术语都过于抽象，单从字面上并不容易理解其名词意义，这边将以之前介绍代理机制的范例来逐一对照以介绍</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">的术语与观念：</span></p>
<span style="font-size: 12pt; font-family: SimSun">
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Arial">Cross-cutting concern</span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">在</span><span style="font-family: Arial">DynamicProxyDemo</span><span style="font-family: SimSun">项目的例子中，记录的动作原先被横切（</span><span style="font-family: Arial">Cross-cutting</span><span style="font-family: SimSun">）入至</span><span style="font-family: Arial">HelloSpeaker</span><span style="font-family: SimSun">本身所负责的业务流程之中，另外类似于记录这类的动作，如安全（</span><span style="font-family: Arial">Security</span><span style="font-family: SimSun">）检查、事务（</span><span style="font-family: Arial">Transaction</span><span style="font-family: SimSun">）等系统层面的服务（</span><span style="font-family: Arial">Service</span><span style="font-family: SimSun">），在一些应用程序之中常被见到安插至各个对象的处理流程之中，这些动作在</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">的术语中被称之为</span><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">。</span><span style="font-family: Arial"><br />
&nbsp;</span></p>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">以图片说明可强调出</span><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">的意涵，例如原来的业务流程是很单纯的：</span></p>
<span style="font-size: 12pt; font-family: SimSun"><img height="306" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/aop-1.jpg" width="350" /><br />
<br />
</span>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">现在为了要加入记录（</span><span style="font-family: Arial">Logging</span><span style="font-family: SimSun">）与安全（</span><span style="font-family: Arial">Security</span><span style="font-family: SimSun">）检查等服务，对象的程序代码中若被硬生生的写入相关的</span><span style="font-family: Arial">Logging</span><span style="font-family: SimSun">、</span><span style="font-family: Arial">Security</span><span style="font-family: SimSun">程序片段，则可使用以下图解表示出</span><span style="font-family: Arial">Cross-cutting</span><span style="font-family: SimSun">与</span><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">的概念：</span></p>
<img height="295" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/aop-2.jpg" width="570" /><br />
<br />
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">若直接撰写在负责某业务的对象之流程中，会使得维护程序的成本增高，例如若您今天要将对象中的记录功能修改或是移除该服务，则必须修改所有撰写曾记录服务的程序代码，然后重新编译，另一方面，</span><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">混杂于业务逻辑之中，使得业务对象本身的逻辑或程序的撰写更为复杂。</span></p>
<ul>
    <li>&nbsp;<span style="font-family: Wingdings">&nbsp;</span>&lt;!--[endif]--&gt;<span style="font-family: Arial">Aspect</span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">将散落于各个业务对象之中的</span><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">收集起来，设计各个独立可重用的对象，这些对象称之为</span><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">，例如在</span><span style="font-family: Arial">DynamicProxyDemo</span><span style="font-family: SimSun">项目中将登录的动作设计为一个</span><span style="font-family: Arial">LogHandler</span><span style="font-family: SimSun">类别，</span><span style="font-family: Arial">LogHandler</span><span style="font-family: SimSun">类别在</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">的术语就是</span><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">的一个具体实例，在</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">中着重于</span><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">的辨认，将之从业务流程中独立出来，在需要该服务的时候，<strong>缝合（</strong></span><strong><span style="font-family: Arial">Weave</span></strong><strong><span style="font-family: SimSun">）</span></strong><span style="font-family: SimSun">至应用程序之上，不需要服务的时候，也可以马上从应用程序中脱离，应用程序中的可重用组件不用作任何的修改，例如在</span><span style="font-family: Arial">DynamicProxyDemo</span><span style="font-family: SimSun">项目中的</span><span style="font-family: Arial">HelloSpeaker</span><span style="font-family: SimSun">所代表的角色就是应用程序中可重用的组件，在它需要记录服务时并不用修改本身的程序代码。</span></p>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">另一方面，对于应用程序中可重用的组件来说，以</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">的设计方式，它不用知道处理提供服务的对象之存在，具体的说，与服务相关的</span><span style="font-family: Arial">API</span><span style="font-family: SimSun">不会出现在可重用的应用程序组件之中，因而可提高这些组件的重用性，您可以将这些组件应用至其它的应用程序之中，而不会因为目前加入了某些服务而与目前的应用程序框架发生耦合。</span></p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Wingdings"><span style="font-family: Arial">Advice</span></span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">的具体实作称之为</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">，以记录的动作而言，</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">中会包括真正的记录程序代码是如何实作的，像是</span><span style="font-family: Arial">DynamicProxyDemo</span><span style="font-family: SimSun">项目中的</span><span style="font-family: Arial">LogHandler</span><span style="font-family: SimSun">类别就是</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">的一个具体实例，</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">中包括了</span><span style="font-family: Arial">Cross-cutting concerns</span><span style="font-family: SimSun">的行为或所要提供的服务。</span>&nbsp;</p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Arial">Joinpoint</span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">在应用程序执行时加入业务流程的点或时机称之为</span><span style="font-family: Arial">Joinpoint</span><span style="font-family: SimSun">，具体来说，就是</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">在应用程序中被呼叫执行的时机，这个时机可能是某个方法被呼叫之前或之后（或两者都有），或是某个例外发生的时候。</span></p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;&lt;!--[endif]--&gt;<span style="font-family: Arial">Pointcut</span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: Arial">Pointcut</span><span style="font-family: SimSun">是一个定义，藉由这个定义您可以指定某个</span><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">在哪些</span><span style="font-family: Arial">Joinpoint</span><span style="font-family: SimSun">时被应用至应用程序之上。具体的说，您可以在某个定义档中撰写</span><span style="font-family: Arial">Pointcut</span><span style="font-family: SimSun">，当中说明了哪些</span><span style="font-family: Arial">Aspect</span><span style="font-family: SimSun">要应用至应用程序中的哪些</span><span style="font-family: Arial">Joinpoint</span><span style="font-family: SimSun">。</span>&nbsp;</p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Wingdings"><span style="font-family: Arial">Target</span></span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">一个</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">被应用的对象或目标对象，例如</span><span style="font-family: Arial">DynamicProxyDemo</span><span style="font-family: SimSun">项目中的</span><span style="font-family: Arial">HelloSpeaker</span><span style="font-family: SimSun">就是</span><span style="font-family: Arial">LogHandler</span><span style="font-family: SimSun">这个</span><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">的</span><span style="font-family: Arial">Target</span><span style="font-family: SimSun">。</span></p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Wingdings">&lt;!--[endif]--&gt;<span style="font-family: Arial">Introduction</span></span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">对于一个现存的类别，</span><span style="font-family: Arial">Introduction</span><span style="font-family: SimSun">可以为其增加行为，而不用修改该类别的程序，具体的说，您可以为某个已撰写、编译完成的类别，在执行时期动态加入一些方法或行为，而不用修改或新增任何一行程序代码。</span></p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Wingdings">&lt;!--[endif]--&gt;<span style="font-family: Arial">Proxy</span></span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">在<strong>《</strong></span><strong><span style="font-family: Arial">Expert One-on-One J2EE Development WIthout EJB</span></strong><strong><span style="font-family: SimSun">》</span></strong><span style="font-family: SimSun">一书中，</span><span style="font-family: Arial">Rod Johnson</span><span style="font-family: SimSun">、</span><span style="font-family: Arial">Juergen Hoeller</span><span style="font-family: SimSun">在第八章中有提到，</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">的实作有五个主要的策略：</span><span style="font-family: Arial">Dynamic Proxies</span><span style="font-family: SimSun">、</span><span style="font-family: Arial">Dynamic Byte Code Generation</span><span style="font-family: SimSun">、</span><span style="font-family: Arial">Java Code Generation</span><span style="font-family: SimSun">、</span><span style="font-family: Arial">Use of a Custon Class Loader</span><span style="font-family: SimSun">、</span><span style="font-family: Arial">Language Extensions</span><span style="font-family: SimSun">。</span></p>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">在之前静态代理与动态代理中，已经使用实际的程序范例介绍过代理机制的实现，</span><span style="font-family: Arial">Spring</span><span style="font-family: SimSun">的</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">主要是透过动态代理来完成。</span></p>
<ul>
    <li>&lt;!--[if !supportLists]--&gt;<span style="font-family: Arial">Weave</span></li>
</ul>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: Arial">Advice</span><span style="font-family: SimSun">被应用至对象之上的过程称之为缝合（</span><span style="font-family: Arial">Weave</span><span style="font-family: SimSun">），在</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">中缝合的方式有几个时间点：编译时期（</span><span style="font-family: Arial">Compile time</span><span style="font-family: SimSun">）、类别加载时期（</span><span style="font-family: Arial">Classload time</span><span style="font-family: SimSun">）、执行时期（</span><span style="font-family: Arial">Runtime</span><span style="font-family: SimSun">）。</span><span style="font-family: Arial"><br />
</span>&nbsp;</p>
<p style="text-indent: 24pt; line-height: 125%; text-align: justify"><span style="font-family: SimSun">结合</span><span style="font-family: Arial">DynamicProxyDemo</span><span style="font-family: SimSun">的实例，将以上介绍过的</span><span style="font-family: Arial">AOP</span><span style="font-family: SimSun">相关名词具体的使用图片来加以表示，有助于您对每一个名词的理解与认识：</span></p>
<p><span style="font-size: 12pt; font-family: SimSun"><img height="405" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/aop-3.jpg" width="581" /></span></span></p>
 <img src ="http://www.blogjava.net/Crying/aggbug/144951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-13 19:33 <a href="http://www.blogjava.net/Crying/articles/144951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Spring邮件抽象层发送简单邮件(转http://www.blogjava.net/shmily432685/archive/2005/12/30/26041.html)</title><link>http://www.blogjava.net/Crying/articles/142701.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Tue, 04 Sep 2007 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/142701.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/142701.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/142701.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/142701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/142701.html</trackback:ping><description><![CDATA[Spring提供了一个发送电子邮件的高级抽象层，它向用户屏蔽了底层邮件系统的一些细节，同时负责低层次的代表客户端的资源处理。Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender和 封装了简单邮件的属性如from, to,cc, subject, text的值对象叫做SimpleMailMessage。 <br />
1、我们定义一个发送邮件的接口:OrderManager.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"><span style="color: #008080">1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;OrderManager&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BaseManager{<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #008000">*email,要发送的邮件地址;<br />
</span><span style="color: #008080">4</span>&nbsp;<span style="color: #008000">*Code:激活码<br />
</span><span style="color: #008080">5</span>&nbsp;<span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;placeOrder(String&nbsp;email);<br />
</span><span style="color: #008080">7</span>&nbsp;<span style="color: #000000">}</span></div>
<p>2、我们需要对该接口进行实现的方法:OrderManagerImpl.java</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"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.mail.Message;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.mail.MessagingException;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.mail.internet.InternetAddress;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.mail.internet.MimeMessage;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.mail.MailException;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.mail.javamail.JavaMailSender;<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.mail.javamail.MimeMessagePreparator;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;service.OrderManager;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;OrderManagerImpl&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BaseManagerImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;OrderManager&nbsp;{<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;JavaMailSender&nbsp;mailsender;<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;MyMailMessage&nbsp;message;<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setMessage(CityMailMessage&nbsp;message)<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;message;<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setMailsender(JavaMailSender&nbsp;mailsender)&nbsp;{<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.mailsender&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mailsender;<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;placeOrder(</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;email</span><span style="color: #000000">)&nbsp;{<br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MimeMessagePreparator&nbsp;preparator&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MimeMessagePreparator()&nbsp;{<br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;prepare(MimeMessage&nbsp;mimeMessage)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;MessagingException&nbsp;{<br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mimeMessage.setRecipient(Message.RecipientType.TO,&nbsp;<br />
</span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InternetAddress(email));<br />
</span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mimeMessage.setFrom(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InternetAddress(message.getFrom()));<br />
</span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**转换编码为GBK*/<br />
</span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mimeMessage.setSubject(message.getSubject(),</span><span style="color: #000000">"</span><span style="color: #000000">GBK</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mimeMessage.setText(email</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">message.getSubject()</span><span style="color: #000000">+message.getText()</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">GBK</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
</span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">{<br />
</span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailsender.send(preparator);<br />
</span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(MailException&nbsp;ex)&nbsp;{<br />
</span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">log&nbsp;it&nbsp;and&nbsp;go&nbsp;on</span><span style="color: #008000"><br />
</span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(ex.getMessage());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">}</span></div>
<br />
<p>3、spring配置发送email的applicationContext-email.xml</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"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//SPRING//DTD&nbsp;BEAN//EN</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&lt;</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mailSender</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.mail.javamail.JavaMailSenderImpl</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">host</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">smtp.</span><span style="color: #000000">163</span><span style="color: #000000">.com</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">username</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">password</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javaMailProperties</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">props</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">prop&nbsp;key</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mail.smtp.auth</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">true</span><span style="color: #000000">&lt;/</span><span style="color: #000000">prop</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">prop&nbsp;key</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mail.smtp.timeout</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">25000</span><span style="color: #000000">&lt;/</span><span style="color: #000000">prop</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">props</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mailMessage</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.mail.SimpleMailMessage</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">from</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;Email</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">subject</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;标题</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">="text</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;内容</span><span style="color: #008000">&lt;/value&gt;</span><span style="color: #008000"><br />
</span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">orderManager</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">cn.cityyouth.service.impl.OrderManagerImpl</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mailsender</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">ref&nbsp;bean</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mailSender</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">message</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">ref&nbsp;bean</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mailMessage</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&lt;/</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span></div>
<p>4、最后配置自己的jsp页面以及action</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"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;cn.cityyouth.web.action;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionForm;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionForward;<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionMapping;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionMessage;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionMessages;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.test.service.OrderManager;<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SendMailAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BaseAction&nbsp;{<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;execute<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;mapping<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;form<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;request<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;response<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;ActionForward<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ActionForward&nbsp;execute(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{<br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OrderManager&nbsp;omi</span><span style="color: #000000">=</span><span style="color: #000000">(OrderManager)</span><span style="color: #0000ff">this</span><span style="color: #000000">.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">orderManager</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;useremail</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">123@163.com</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omi.placeOrder(useremail);<br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">}</span></div>
<p>到此所有的开发以结束。<br />
</p>
<p>Sring邮件抽象层的主要包是：org.springframework.mail 包。它包含叫MailSender为发送邮件的核心接口和包含简单邮件属性例如from,to,cc,subject,text叫SimpleMailMessage的值对象. 这个包也包含一个检查异常的层次，它支持一个更高级别的抽象超过低级别的邮件系统异常伴随根异常存在MailException. 请参考JavaDocs为更多的信息杂邮件异常层次。</p>
<p><a title="心得与体会" href="http://www.blogjava.net/shmily432685"><font color="#5d5d5d"><a title="心得与体会" href="http://www.blogjava.net/shmily432685/archive/2005/12/30/26041.html?catid=4001">spring in action</a> in action</font></a> also provides a sub-interface of MailSender for specialized JavaMail features such as MIME messages, namely org.springframework.mail.javamail.JavaMailSender It also provides a callback interface for preparation of JavaMail MIME messages, namely org.springframework.mail.javamail.MimeMessagePreparator</p>
<p>Spring也支持一个MailSender的专用于JavaMail特征例如MIME消息子接口，命名为org.springframework.javamail.JavaMailerSener。它也支持一个为JavaMail MIME信息的准备回调接口，命名为org.springframework.mail.JavaMail.MimeMessagePreparator.<br />
</p>
<img src ="http://www.blogjava.net/Crying/aggbug/142701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-04 17:35 <a href="http://www.blogjava.net/Crying/articles/142701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring IOC</title><link>http://www.blogjava.net/Crying/articles/142028.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Sun, 02 Sep 2007 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/142028.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/142028.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/142028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/142028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/142028.html</trackback:ping><description><![CDATA[&nbsp;
<div><font size="3">假设我们要设计一个Girl和一个Boy类，其中Girl有kiss方法，即Girl想要Kiss一个Boy。那么，我们的问题是，Girl如何能够认识这个Boy？ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">在我们中国，常见的MM与GG的认识方式有以下几种 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">1 青梅竹马； 2 亲友介绍； 3 父母包办 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">那么哪一种才是最好呢？ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">青梅竹马：Girl从小就知道自己的Boy。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">public class Girl { </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">void kiss(){ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">Boy boy = new Boy(); </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">} </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">} </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font size="3">然而从开始就创建的Boy缺点就是无法在更换。并且要负责Boy的整个生命周期。如果我们的Girl想要换一个怎么办？（严重不支持Girl经常更换Boy,#_#） </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">亲友介绍：由中间人负责提供Boy来见面 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">public class Girl { </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">void kiss(){ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">Boy boy = BoyFactory.createBoy(); </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">} </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">} </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font size="3">亲友介绍，固然是好。如果不满意，尽管另外换一个好了。但是，亲友BoyFactory经常是以Singleton的形式出现，不然就是，存在于Globals，无处不在，无处不能。实在是太繁琐了一点，不够灵活。我为什么一定要这个亲友掺和进来呢？为什么一定要付给她介绍费呢？万一最好的朋友爱上了我的男朋友呢？ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">父母包办：一切交给父母，自己不用费吹灰之力，只需要等着Kiss就好了。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">public class Girl { </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">void kiss(Boy boy){ </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">// kiss boy </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">boy.kiss(); </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">} </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">} </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font size="3">Well，这是对Girl最好的方法，只要想办法贿赂了Girl的父母，并把Boy交给他。那么我们就可以轻松的和Girl来Kiss了。看来几千年传统的父母之命还真是有用哦。至少Boy和Girl不用自己瞎忙乎了。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">这就是IOC，将对象的创建和获取提取到外部。由外部容器提供需要的组件。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font size="3">我们知道好莱坞原则：&#8220;Do not call us, we will call you.&#8221; 意思就是，You, girlie, do not call the boy. We will feed you a boy。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">我们还应该知道依赖倒转原则即 Dependence Inversion Princinple，DIP </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">Eric Gamma说，要面向抽象编程。面向接口编程是面向对象的核心。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">组件应该分为两部分，即 Service, 所提供功能的声明 Implementation, Service的实现 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto">好处是：多实现可以任意切换，防止 &#8220;everything depends on everything&#8221; 问题．即具体依赖于具体。 </font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font class="lightFont" title="发光字" style="filter: glow(color=#0033FF,strength=3); color: #0033ff; height: auto"></font></div>
<div><font size="3">所以，我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话，还可以kiss可爱的kitten和慈祥的grandmother。 </font></div>
 <img src ="http://www.blogjava.net/Crying/aggbug/142028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-02 09:10 <a href="http://www.blogjava.net/Crying/articles/142028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring简介</title><link>http://www.blogjava.net/Crying/articles/142027.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Sun, 02 Sep 2007 01:08:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/142027.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/142027.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/142027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/142027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/142027.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;
<div><font size="3">Spring 框架</font> </div>
<div><font size="3">Spring 框架是一个分层架构，由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上，核心容器定义了创建、配置和管理 bean 的方式，如图 1 所示。</font> </div>
<div>&shy;</div>
<div><strong><font size="3">图 1. Spring 框架的 7 个模块</font></strong> </div>
<div><font size="3"><img height="288" src="http://www.ibm.com/developerworks/cn/java/wa-spring1/spring_framework.gif" width="555" border="0"  alt="" /> </div>
<div></font></div>
<div><font size="3">组成 Spring 框架的每个模块（或组件）都可以单独存在，或者与其他一个或多个模块联合实现。每个模块的功能如下： </font><font size="3"></font></div>
<div><font size="3"><strong>核心容器</strong>：核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory，它是工厂模式的实现。BeanFactory 使用<em>控制反转</em> （IOC） 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 </font></div>
<div><font size="3"></font></div>
<div><font size="3"><strong>Spring 上下文</strong>：Spring 上下文是一个配置文件，向 Spring 框架提供上下文信息。Spring 上下文包括企业服务，例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 </font></div>
<div><font size="3"></font></div>
<div><font size="3"><strong>Spring AOP</strong>：通过配置管理特性，Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以，可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP，不用依赖 EJB 组件，就可以将声明性事务管理集成到应用程序中。 </font></div>
<div><font size="3"></font></div>
<div><font size="3"><strong>Spring DAO</strong>：JDBC DAO 抽象层提供了有意义的异常层次结构，可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理，并且极大地降低了需要编写的异常代码数量（例如打开和关闭连接）。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 </font></div>
<div><font size="3"></font></div>
<div><font size="3"><strong>Spring ORM</strong>：Spring 框架插入了若干个 ORM 框架，从而提供了 ORM 的对象关系工具，其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 </font></div>
<div><font size="3"></font></div>
<div><font size="3"><strong>Spring Web 模块</strong>：Web 上下文模块建立在应用程序上下文模块之上，为基于 Web 的应用程序提供了上下文。所以，Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 </font></div>
<div><font size="3"></font></div>
<div><font size="3"><strong>Spring MVC 框架</strong>：MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口，MVC 框架变成为高度可配置的，MVC 容纳了大量视图技术，其中包括 JSP、Velocity、Tiles、iText 和 POI。 </font></div>
<div>&shy;</div>
<div><font size="3">Spring 框架的功能可以用在任何 J2EE 服务器中，大多数功能也适用于不受管理的环境。Spring 的核心要点是：支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问，这样的对象可以在不同 J2EE 环境 （Web 或 EJB）、独立应用程序、测试环境之间重用。 </font></div>
<div>&shy;</div>
<div><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" border="0"  alt="" /> </div>
<div><img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"  alt="" /> </div>
<div>&shy;</div>
<div>&shy;</div>
<div><font size="3">IOC 和 AOP</font> </div>
<div><font size="3">控制反转模式（也称作依赖性介入）的基本概念是：不创建对象，但是描述创建它们的方式。在代码中不直接与对象和服务连接，但在配置文件中描述哪一个组件需要哪一项服务。容器 （在 Spring 框架中是 IOC 容器） 负责将这些联系在一起。</font> </div>
<div><font size="3">在典型的 IOC 场景中，容器创建了所有对象，并设置必要的属性将它们连接在一起，决定什么时间调用方法。下表列出了 IOC 的一个实现模式。</font> </div>
<div>类型 1服务需要实现专门的接口，通过接口，由对象提供这些服务，可以从对象查询依赖性（例如，需要的附加服务）类型 2通过 JavaBean 的属性（例如 setter 方法）分配依赖性类型 3依赖性以构造函数的形式提供，不以 JavaBean 属性的形式公开 </div>
<div><font size="3">Spring 框架的 IOC 容器采用类型 2 和类型3 实现。</font> </div>
<div><strong><font size="3">面向方面的编程</font></strong> </div>
<div><font size="3"><em>面向方面的编程</em>，即 AOP，是一种编程技术，它允许程序员对横切关注点或横切典型的职责分界线的行为（例如日志和事务管理）进行模块化。AOP 的核心构造是<em>方面</em>，它将那些影响多个类的行为封装到可重用的模块中。</font> </div>
<div><font size="3">AOP 和 IOC 是补充性的技术，它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中，可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中，可以反过来将日志服务<em>模块化</em>，并以声明的方式将它们应用到需要日志的组件上。当然，优势就是 Java 类不需要知道日志服务的存在，也不需要考虑相关的代码。所以，用 Spring AOP 编写的应用程序代码是松散耦合的。</font> </div>
<div><font size="3">AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。</font> </div>
<div><font size="3">IOC 容器</font> </div>
<div><font size="3">Spring 设计的核心是 org.springframework.beans 包，它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用，而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是 BeanFactory 接口，它是工厂设计模式的实现，允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。</font> </div>
<div><font size="3">BeanFactory 支持两个对象模型。</font> </div>
<div><font size="3"><strong>单态</strong> 模型提供了具有特定名称的对象的共享实例，可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。 </font><font size="3"><strong>原型</strong> 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时，原型模型最适合。 </font><font size="3">bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责任从应用程序代码转移到框架。正如我将在下一个示例中演示的那样，Spring 框架使用 JavaBean 属性和配置数据来指出必须设置的依赖关系。</font> </div>
<div><font size="3"></div>
<div></font>&nbsp;&nbsp;</div>
<img src ="http://www.blogjava.net/Crying/aggbug/142027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-02 09:08 <a href="http://www.blogjava.net/Crying/articles/142027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>