﻿<?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-狐狸&amp;花生-文章分类-Spring what I know</title><link>http://www.blogjava.net/czcode/category/17962.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 09:34:59 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 09:34:59 GMT</pubDate><ttl>60</ttl><item><title>spring定时器</title><link>http://www.blogjava.net/czcode/articles/85035.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Sat, 02 Dec 2006 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/articles/85035.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/85035.html</wfw:comment><comments>http://www.blogjava.net/czcode/articles/85035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/85035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/85035.html</trackback:ping><description><![CDATA[
		<font size="4">spring执行定时任务<br />定义一个任务是很简单的实现TimerTask的run方法就可以了.<br />如下:SayHelloTask.java<br /></font>
		<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> <span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> test.timerTask;<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.TimerTask;<br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> SayHelloTask </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> TimerTask {<br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run() {<br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">6</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">测试TimerTask : Hello !!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">7</span> <span style="COLOR: #000000">  }<br /></span><span style="COLOR: #008080">8</span> <span style="COLOR: #000000">} <br /></span><span style="COLOR: #008080">9</span> <span style="COLOR: #000000"></span></div>
		<font size="4">然后是配置文件:</font>
		<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>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;?</span>
				<span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span>
				<span style="COLOR: #0000ff">?&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;!</span>
				<span style="COLOR: #ff00ff">DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" </span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">beans</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="sayHelloTask"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="test.timerTask.SayHelloTask"</span>
				<span style="COLOR: #0000ff">&gt;&lt;/</span>
				<span style="COLOR: #800000">bean</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 5</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="scheduledTask"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.springframework.scheduling.timer.ScheduledTimerTask"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 6</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="timerTask"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 7</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">bean</span>
				<span style="COLOR: #0000ff">="sayHelloTask"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 8</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080"> 9</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000"> 任务执行周期 2m 关于一些任务的参数请参考JDK doc文档和Spring相关文档</span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">10</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="period"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">11</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">2000</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">12</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">13</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000"> 延时1m 执行任务 </span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">14</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="delay"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">15</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">1000</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">16</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">17</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">bean</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">18</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000"> 启动定时器 </span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">19</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="timerBean"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.springframework.scheduling.timer.TimerFactoryBean"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">20</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="scheduledTimerTasks"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">21</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">22</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">bean</span>
				<span style="COLOR: #0000ff">="scheduledTask"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">23</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">24</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">25</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">bean</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">26</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">beans</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">27</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<font size="4">测试类如下:TestApp.java<br /></font>
		<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">
				<font size="4">
						<span style="COLOR: #008080"> 1</span>
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">package</span>
				</font>
				<font size="4">
						<span style="COLOR: #000000"> test.timerTask;<br /></span>
						<span style="COLOR: #008080"> 2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">import</span>
				</font>
				<font size="4">
						<span style="COLOR: #000000"> org.springframework.context.ApplicationContext;<br /></span>
						<span style="COLOR: #008080"> 3</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">import</span>
				</font>
				<font size="4">
						<span style="COLOR: #000000"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /></span>
						<span style="COLOR: #008080"> 4</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_175_516_Open_Image" onclick="this.style.display='none'; Codehighlighter1_175_516_Open_Text.style.display='none'; Codehighlighter1_175_516_Closed_Image.style.display='inline'; Codehighlighter1_175_516_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_175_516_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_175_516_Closed_Text.style.display='none'; Codehighlighter1_175_516_Open_Image.style.display='inline'; Codehighlighter1_175_516_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000"> TestApp </span>
						<span id="Codehighlighter1_175_516_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
				</font>
				<span id="Codehighlighter1_175_516_Open_Text">
						<font size="4">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 5</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_179_204_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_204_Open_Text.style.display='none'; Codehighlighter1_179_204_Closed_Image.style.display='inline'; Codehighlighter1_179_204_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_179_204_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_179_204_Closed_Text.style.display='none'; Codehighlighter1_179_204_Open_Image.style.display='inline'; Codehighlighter1_179_204_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
								<span id="Codehighlighter1_179_204_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						</font>
						<span id="Codehighlighter1_179_204_Open_Text">
								<span style="COLOR: #008000">
										<font size="4">/**</font>
								</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<font size="4">
										<span style="COLOR: #008080"> 6</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   * </span>
										<span style="COLOR: #808080">@param</span>
								</font>
								<font size="4">
										<span style="COLOR: #008000"> args<br /></span>
										<span style="COLOR: #008080"> 7</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   </span>
										<span style="COLOR: #008000">*/</span>
								</font>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<font size="4">
								<span style="COLOR: #008080"> 8</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_247_497_Open_Image" onclick="this.style.display='none'; Codehighlighter1_247_497_Open_Text.style.display='none'; Codehighlighter1_247_497_Closed_Image.style.display='inline'; Codehighlighter1_247_497_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_247_497_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_247_497_Closed_Text.style.display='none'; Codehighlighter1_247_497_Open_Image.style.display='inline'; Codehighlighter1_247_497_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
								<span style="COLOR: #0000ff">public</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">static</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">void</span>
								<span style="COLOR: #000000"> main(String[] args) </span>
								<span id="Codehighlighter1_247_497_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
						</font>
						<span id="Codehighlighter1_247_497_Open_Text">
								<font size="4">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080"> 9</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000"> TODO Auto-generated method stub</span>
								</font>
								<span style="COLOR: #008000">
										<br />
								</span>
								<font size="4">
										<span style="COLOR: #008080">10</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">    ApplicationContext context </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> ClassPathXmlApplicationContext(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">test/timerTask/javaTimer.xml</span>
										<span style="COLOR: #000000">"</span>
								</font>
								<font size="4">
										<span style="COLOR: #000000">);<br /></span>
										<span style="COLOR: #008080">11</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">   ApplicationContext context2 = new ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml");</span>
								</font>
								<span style="COLOR: #008000">
										<br />
								</span>
								<font size="4">
										<span style="COLOR: #008080">12</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
										</span>
										<span style="COLOR: #000000">  }</span>
								</font>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<font size="4">
								<span style="COLOR: #008080">13</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 只要加载配置文件就可以了,</span>
						</font>
						<span style="COLOR: #008000">
								<br />
						</span>
						<font size="4">
								<span style="COLOR: #008080">14</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
								</span>
								<span style="COLOR: #000000">}</span>
						</font>
				</span>
				<font size="4">
						<span style="COLOR: #000000"> <br /></span>
						<span style="COLOR: #008080">15</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						</span>
				</font>
		</div>
		<font size="4">使用Java中的定时器比较简单,其提供的任务也比较简单, 下面来看看使用quartz来执行一个复杂的任务.<br />首先制定一个任务, 实现QuartzJobBean中的方法.</font>
		<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> <span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> test.timerTask;<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.quartz.JobExecutionContext;<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.quartz.JobExecutionException;<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.scheduling.quartz.QuartzJobBean;<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> SayHelloTaskUsingQuartz </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> QuartzJobBean {<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">   </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> executeInternal(JobExecutionContext context)<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> JobExecutionException {<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">使用Quartz 认为调度: Hello!!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">  }<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">} <br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span></div>
		<font size="4">配置代码如下:quartzTimer.xml</font>
		<br />
		<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> <span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="sayHelloJob"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.JobDetailBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jobClass"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">test.timerTask.SayHelloTaskUsingQuartz</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 关键在如下两个触发器的配置 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 类似于Java的简单触发器 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="helloTrigger"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.SimpleTriggerBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jobDetail"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="sayHelloJob"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="startDelay"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="repeatInterval"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">3000</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 复杂触发器 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="helloCronTrigger"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.CronTriggerBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jobDetail"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="sayHelloJob"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="cronExpression"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 关键在配置此表达式 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">0 49 15 * * ?</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="scheduler"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">33</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="triggers"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="helloCronTrigger"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">35</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">36</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">37</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">38</span> <span style="COLOR: #000000"></span></div>
		<font size="4">关于简单触发器和复杂触发器,查考下面的解释:<br />Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型，但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地，如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业，那么SimpleTrigger适合你。另一方面，如果你有许多复杂的作业调度，那么或许需要CronTrigger。<br />CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时，那么应该使用CronTrigger。正如它的名字所暗示的那样，CronTrigger是基于Unix克隆表达式的。<br />作为一个例子，下面的Quartz克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。<br />0 15 10 ? * MON-FRI<br />下面的表达式<br />0 15 10 ? * 6L 2002-2005<br />将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。<br />你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个，但哪个跟合适则取决于你的调度需要。</font>
<img src ="http://www.blogjava.net/czcode/aggbug/85035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-02 16:11 <a href="http://www.blogjava.net/czcode/articles/85035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识AOP</title><link>http://www.blogjava.net/czcode/articles/85031.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Sat, 02 Dec 2006 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/articles/85031.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/85031.html</wfw:comment><comments>http://www.blogjava.net/czcode/articles/85031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/85031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/85031.html</trackback:ping><description><![CDATA[
		<p>
				<font face="System">
				</font>
		</p>
		<p>AOP是被看做Spring框架中的一个重头戏。所以介绍一下。</p>
		<p>
				<font face="System">学习Spring AOP之前,先来了解一下AOP。 <br />AOP应用到项目中的好处,能够将与业务逻辑不相关的代码（如：日志、权限等）分离出来，减小相关业务类负担，并能让一些通用需求（如：事务）得到更广泛的复用。 <br />AOP的实现是利用了java核心的代理机制，分静态代理与动态代理。 <br />静态代理要求代理对象与被代理对象都实现同一个接口 </font>
				<br />
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">接口：</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> IBusiness{<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doBusiness();<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">实现：</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BusinessImpl </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> IBusiness{<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> doBusiness(){<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">                System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">业务主体部分</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">执行器：</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BusinessHandler </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> InvocationHandler{<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> BusinessImpl bi</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> BusinessHandler(BusinessImpl bi){<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.bi</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">bi;<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object invoke(Object proxy,Method method,Object[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Throwable{<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">                System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">事务、日志、权限等操作</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">                method.invoke(bi,args);<br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">                System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">事务、日志、权限等操作</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">应用：</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> AOPAppDemo{<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args){<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000">                BusinessImple bi</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BusinessImple();<br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000">                BusinessHandler bh</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BusinessHandler(bi);<br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000">                IBusiness proxy</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(IBusiness)Proxy.newProxyInstance(bi.getClass().getClassLoader(),bi.getClass().getInterfaces(),bh);<br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000">                  proxy.doBusiness();<br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000">}</span></div>
		<p>上述代码就是通过静态代理实现了AOP，BusinessProxy代理了BusinessImpl的doBusiness方法。但是静态代理一般不能满足我们项目开发的需求，如果业务需求很多它得为每一个业务方法一一做代理，动态代理正好解决了这一缺点，接下来我们来说说动态代理吧。 <br />动态代理，需实现一个InvocationHandler的接口，重写invoke(Object proxy,Method method,Object[] args)方法，代理对象实例由Proxy.newProxyInstance(ClassLoader loader,Class interfaces,InvocationHandler h)方法生成，当代理对象的方法被执行时，通知执行器（InvocationHandler）执行invoke(Object proxy,Method method,Object[] args)方法，invoke方法内调用了method.invoke(Object obj,Object... args)方法，该方法对带有指定参数的指定对象调用由此 Method 对象表示的基础方法，应该这时才真正代理执行了业务逻辑(这里我是这样理解的,不知对不对)。 <br />接下来用代码说明上述动态代理原理,与静态代理相比接口与实现保持不变<br /></p>
		<p>
				<font face="System">
				</font>
		</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">
				<font face="System">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #008000">//</span><span style="COLOR: #008000">接口：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font face="System">
						<span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span></font>
				<font face="System">
						<span style="COLOR: #000000"> IBusiness{<br /></span>
						<span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font face="System">
						<span style="COLOR: #000000"> doBusiness();<br /></span>
						<span style="COLOR: #008080"> 4</span> </font>
				<font face="System">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">实现：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font face="System">
						<span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BusinessImpl </span><span style="COLOR: #0000ff">implements</span></font>
				<font face="System">
						<span style="COLOR: #000000"> IBusiness{<br /></span>
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font face="System">
						<span style="COLOR: #000000"> doBusiness(){<br /></span>
						<span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">                System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">业务主体部分</span><span style="COLOR: #000000">"</span></font>
				<font face="System">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080"> 9</span> </font>
				<font face="System">
						<span style="COLOR: #000000">        }<br /></span>
						<span style="COLOR: #008080">10</span> </font>
				<font face="System">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">11</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">代理：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font face="System">
						<span style="COLOR: #008080">12</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BusinessProxy </span><span style="COLOR: #0000ff">implements</span></font>
				<font face="System">
						<span style="COLOR: #000000"> IBusiness{<br /></span>
						<span style="COLOR: #008080">13</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">private</span></font>
				<font face="System">
						<span style="COLOR: #000000"> BusinessImple bi;<br /></span>
						<span style="COLOR: #008080">14</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span></font>
				<font face="System">
						<span style="COLOR: #000000"> BusinessProxy(BusinessImple bi){<br /></span>
						<span style="COLOR: #008080">15</span> <span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.bi</span><span style="COLOR: #000000">=</span></font>
				<font face="System">
						<span style="COLOR: #000000">bi;<br /></span>
						<span style="COLOR: #008080">16</span> </font>
				<font face="System">
						<span style="COLOR: #000000">        }<br /></span>
						<span style="COLOR: #008080">17</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font face="System">
						<span style="COLOR: #000000"> doBusiness(){<br /></span>
						<span style="COLOR: #008080">18</span> <span style="COLOR: #000000">                System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">事务、日志、权限等操作</span><span style="COLOR: #000000">"</span></font>
				<font face="System">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080">19</span> </font>
				<font face="System">
						<span style="COLOR: #000000">                bi.doBusiness();<br /></span>
						<span style="COLOR: #008080">20</span> <span style="COLOR: #000000">                System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">事务、日志、权限等操作</span><span style="COLOR: #000000">"</span></font>
				<font face="System">
						<span style="COLOR: #000000">);<br /></span>
						<span style="COLOR: #008080">21</span> </font>
				<font face="System">
						<span style="COLOR: #000000">        }<br /></span>
						<span style="COLOR: #008080">22</span> </font>
				<font face="System">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">23</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">应用：</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font face="System">
						<span style="COLOR: #008080">24</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span></font>
				<font face="System">
						<span style="COLOR: #000000"> AOPAppDemo{<br /></span>
						<span style="COLOR: #008080">25</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span></font>
				<font face="System">
						<span style="COLOR: #000000"> main(String[] args){<br /></span>
						<span style="COLOR: #008080">26</span> <span style="COLOR: #000000">                BusinessImpl bi</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span></font>
				<font face="System">
						<span style="COLOR: #000000"> BusinessImple();<br /></span>
						<span style="COLOR: #008080">27</span> <span style="COLOR: #000000">                BusinessProxy proxy</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span></font>
				<font face="System">
						<span style="COLOR: #000000"> BusinessProxy(bi);<br /></span>
						<span style="COLOR: #008080">28</span> </font>
				<font face="System">
						<span style="COLOR: #000000">                proxy.doBusiness();<br /></span>
						<span style="COLOR: #008080">29</span> </font>
				<font face="System">
						<span style="COLOR: #000000">        }<br /></span>
						<span style="COLOR: #008080">30</span> </font>
				<font face="System">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">31</span> <span style="COLOR: #000000"></span></font>
		</div>
<img src ="http://www.blogjava.net/czcode/aggbug/85031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-02 15:52 <a href="http://www.blogjava.net/czcode/articles/85031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>