﻿<?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-bob-文章分类-spring</title><link>http://www.blogjava.net/keweibo/category/25072.html</link><description>一专  Java 多能  Delphi,Powerbuilder ... </description><language>zh-cn</language><lastBuildDate>Fri, 14 Oct 2011 16:06:59 GMT</lastBuildDate><pubDate>Fri, 14 Oct 2011 16:06:59 GMT</pubDate><ttl>60</ttl><item><title>[转]Spring加载resource时classpath*:与classpath:的区别 </title><link>http://www.blogjava.net/keweibo/articles/361260.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 14 Oct 2011 03:58:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/361260.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/361260.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/361260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/361260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/361260.html</trackback:ping><description><![CDATA[<br /><div><div id="blog_content">     <p>Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件.classpath*:的出现是为了从多个jar文件中加载相同的文件.classpath:只能加载找到的第一个文件.</p> <p>比如 resource1.jar中的package 'com.test.rs' 有一个 'jarAppcontext.xml' 文件,内容如下:</p> <p>&lt;bean name="ProcessorImplA" class="com.test.spring.di.ProcessorImplA" /&gt;</p> <p> resource2.jar中的package 'com.test.rs' 也有一个 'jarAppcontext.xml' 文件,内容如下: </p> <p>&lt;bean id="ProcessorImplB" class="com.test.spring.di.ProcessorImplB" /&gt;</p> <p>&nbsp;</p> <p>通过使用下面的代码则可以将两个jar包中的文件都加载进来</p> <p>ApplicationContext ctx = new ClassPathXmlApplicationContext(<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "classpath*:com/test/rs/jarAppcontext.xml");</p> <p>&nbsp;</p> <p>而如果写成下面的代码,就只能找到其中的一个xml文件(顺序取决于jar包的加载顺序)</p> <p>ApplicationContext ctx = new ClassPathXmlApplicationContext(<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "classpath:com/test/rs/jarAppcontext.xml");</p> <p>&nbsp;</p> <p>classpath*:的使用是为了多个component(最终发布成不同的jar包)并行开发,各自的bean定义文件按照一定的规则:package+filename,而使用这些component的调用者可以把这些文件都加载进来.</p> <p>&nbsp;</p> <p>classpath*:的加载使用了classloader的 <code>getResources()</code>  方法,如果是在不同的J2EE服务器上运行,由于应用服务器提供自己的classloader实现，它们在处理jar文件时的行为也许会有所不同。          要测试 <code>classpath*:</code>   是否有效，可以用classloader从classpath中的jar文件里加载文件来进行测试：           <code>getClass().getClassLoader().getResources("&lt;someFileInsideTheJar&gt;")</code> 。(上面的例子是在sun的jre中运行的状态)</p> <p>&nbsp;</p> <p>来自：<a href="http://blog.csdn.net/kkdelta/article/details/5507799" target="_blank">http://blog.csdn.net/kkdelta/article/details/5507799</a></p><p><br /></p>   </div></div><img src ="http://www.blogjava.net/keweibo/aggbug/361260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-10-14 11:58 <a href="http://www.blogjava.net/keweibo/articles/361260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 + spring, 使用session範圍的Bean的配置事項</title><link>http://www.blogjava.net/keweibo/articles/358063.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 06 Sep 2011 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/358063.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/358063.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/358063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/358063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/358063.html</trackback:ping><description><![CDATA[<div>異常信息:<br />Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.</div><br />解決方法:<br /><br />1. 在web.xml文件中添加listener<br /><br /><div>&lt;listener&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;listener-class&gt;org.springframework.web.context.request.RequestContextListener&lt;/listener-class&gt;<br />&lt;/listener&gt;<br /></div>2. 相應的spring bean配置中應加入<strong><span style="color: red;">&lt;aop:scoped-proxy/&gt;</span></strong>此行代碼<br /><br /><div>&lt;bean id="userAction" class="org.gecs.mes.common.action.UserAction" autowire="byName" <strong><span style="color: red;">scope="session"&gt;</span></strong><br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <strong><span style="color: red;">&nbsp;&lt;aop:scoped-proxy/&gt;</span></strong><br />&lt;/bean&gt;<br /><br /></div><img src ="http://www.blogjava.net/keweibo/aggbug/358063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-09-06 10:22 <a href="http://www.blogjava.net/keweibo/articles/358063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring注解入门(轉)</title><link>http://www.blogjava.net/keweibo/articles/295152.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 15 Sep 2009 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/295152.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/295152.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/295152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/295152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/295152.html</trackback:ping><description><![CDATA[<br />
<h1 class="title_txt">轉自：http://blog.csdn.net/huxin1/archive/2008/12/31/3669583.aspx<br />
<cite class="fav_csdnstylebykimi"><a href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();" class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友"></a>
</cite>
</h1>
<script type="text/javascript">
document.body.oncopy = function() {
if (window.clipboardData) {
setTimeout(function() {
var text = clipboardData.getData("text");
if (text && text.length>300) {
text = text + "\r\n\n本文来自CSDN博客，转载请标明出处：" + location.href;
clipboardData.setData("text", text);
}
}, 100);
}
}
</script>
<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
1. 使用Spring注解来注入属性 <br />
1.1. 使用注解以前我们是怎样注入属性的 <br />
类的实现： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserManagerImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserManager&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserManagerImpl implements UserManager {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
</pre>
<br />
配置文件： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 </div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userManagerImpl"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.service.UserManagerImpl"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;ref=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/bean&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.persistence.UserDaoImpl"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=</font></span><span class="string"><font color="#0000ff">"sessionFactory"</font></span><span><font color="#000000">&nbsp;ref=</font></span><span class="string"><font color="#0000ff">"mySessionFactory"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/bean&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl"&gt;
&lt;property name="userDao" ref="userDao" /&gt;
&lt;/bean&gt;
&lt;bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl"&gt;
&lt;property name="sessionFactory" ref="mySessionFactory" /&gt;
&lt;/bean&gt;
</pre>
<br />
<br />
1.2. 引入@Autowired注解（不推荐使用，建议使用@Resource） <br />
类的实现（对成员变量进行标注） <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserManagerImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserManager&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserManagerImpl implements UserManager {
@Autowired
private UserDao userDao;
...
}
</pre>
<br />
或者（对方法进行标注） <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserManagerImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserManager&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserManagerImpl implements UserManager {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
</pre>
<br />
配置文件 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userManagerImpl"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.service.UserManagerImpl"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&lt;bean&nbsp;id=</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.spring.annotation.persistence.UserDaoImpl"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=</font></span><span class="string"><font color="#0000ff">"sessionFactory"</font></span><span><font color="#000000">&nbsp;ref=</font></span><span class="string"><font color="#0000ff">"mySessionFactory"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/bean&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" /&gt;
&lt;bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl"&gt;
&lt;property name="sessionFactory" ref="mySessionFactory" /&gt;
&lt;/bean&gt;
</pre>
<br />
@Autowired可以对成员变量、方法和构造函数进行标注，来完成自动装配的工作。以上两种不同实现方式
中，@Autowired的标注位置不同，它们都会在Spring在初始化userManagerImpl这个bean时，自动装配userDao这个属
性，区别是：第一种实现中，Spring会直接将UserDao类型的唯一一个bean赋值给userDao这个成员变量；第二种实现中，Spring会
调用setUserDao方法来将UserDao类型的唯一一个bean装配到userDao这个属性。 <br />
<br />
1.3. 让@Autowired工作起来 <br />
要使@Autowired能够工作，还需要在配置文件中加入以下代码 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;bean&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"</font></span><span><font color="#000000">&nbsp;/&gt;&nbsp;&nbsp;</font></span></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" /&gt;
</pre>
<br />
<br />
1.4. @Qualifier <br />
@Autowired是根据类型进行自动装配的。在上面的例子中，如果当
Spring上下文中存在不止一个UserDao类型的bean时，就会抛出BeanCreationException异常；如果Spring上下文中
不存在UserDao类型的bean，也会抛出BeanCreationException异常。我们可以使用@Qualifier配合
@Autowired来解决这些问题。 <br />
1. 可能存在多个UserDao实例 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(</font></span><span class="annotation"><font color="#646464">@Qualifier</font></span><span><font color="#000000">(</font></span><span class="string"><font color="#0000ff">"userDao"</font></span><span><font color="#000000">)&nbsp;UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">	@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
</pre>
<br />
这样，Spring会找到id为userDao的bean进行装配。 <br />
2. 可能不存在UserDao实例 <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Autowired</font></span><span><font color="#000000">(required&nbsp;=&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">false</font></strong></span><span><font color="#000000">) &nbsp;&nbsp;</font></span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setUserDao(UserDao&nbsp;userDao)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.userDao&nbsp;=&nbsp;userDao; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">	@Autowired(required = false)
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
</pre>
<br />
<br />
1.5. @Resource（JSR-250标准注解，推荐使用它来代替Spring专有的@Autowired注解） <br />
Spring 不但支持自己定义的@Autowired注解，还支持几个由JSR-250规范定义的注解，它们分别是@Resource、@PostConstruct以及@PreDestroy。 <br />
@Resource
的作用相当于@Autowired，只不过@Autowired按byType自动注入，而@Resource默认按byName自动注入罢了。
@Resource有两个属性是比较重要的，分别是name和type，Spring将@Resource注解的name属性解析为bean的名字，而
type属性则解析为bean的类型。所以如果使用name属性，则使用byName的自动注入策略，而使用type属性时则使用byType自动注入策
略。如果既不指定name也不指定type属性，这时将通过反射机制使用byName自动注入策略。 <br />
@Resource装配顺序 <br />
<ol>
    <li>如果同时指定了name和type，则从Spring上下文中找到唯一匹配的bean进行装配，找不到则抛出异常
    </li>
    <li>如果指定了name，则从上下文中查找名称（id）匹配的bean进行装配，找不到则抛出异常
    </li>
    <li>如果指定了type，则从上下文中找到类型匹配的唯一bean进行装配，找不到或者找到多个，都会抛出异常
    </li>
    <li>如果既没有指定name，又没有指定type，则自动按照byName方式进行装配（见2）；如果没有匹配，则回退为一个原始类型（UserDao）进行匹配，如果匹配则自动装配； </li>
</ol>
<br />
<br />
1.6. @PostConstruct（JSR-250） <br />
在方法上加上注解@PostConstruct，这个方法就会在Bean初始化之后被Spring容器执行（注：Bean初始化包括，实例化Bean，并装配Bean的属性（依赖注入））。 <br />
它的一个典型的应用场景是，当你需要往Bean里注入一个其父类中定义的属性，而你又无法复写父类的属性或属性的setter方法时，如： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserDaoImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">extends</font></strong></span><span><font color="#000000">&nbsp;HibernateDaoSupport&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;{ &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span><font color="#000000">&nbsp;SessionFactory&nbsp;mySessionFacotry; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@Resource</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;setMySessionFacotry(SessionFactory&nbsp;sessionFacotry)&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">this</font></strong></span><span><font color="#000000">.mySessionFacotry&nbsp;=&nbsp;sessionFacotry; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="annotation"><font color="#646464">@PostConstruct</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">void</font></strong></span><span><font color="#000000">&nbsp;injectSessionFactory()&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">super</font></strong></span><span><font color="#000000">.setSessionFactory(mySessionFacotry); &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private SessionFactory mySessionFacotry;
@Resource
public void setMySessionFacotry(SessionFactory sessionFacotry) {
this.mySessionFacotry = sessionFacotry;
}
@PostConstruct
public void injectSessionFactory() {
super.setSessionFactory(mySessionFacotry);
}
...
}
</pre>
<br />
这里通过@PostConstruct，为UserDaoImpl的父类里定义的一个sessionFactory私有属性，注入了
我们自己定义的sessionFactory（父类的setSessionFactory方法为final，不可复写），之后我们就可以通过调用
super.getSessionFactory()来访问该属性了。 <br />
<br />
1.7. @PreDestroy（JSR-250） <br />
在方法上加上注解@PreDestroy，这个方法就会在Bean初始化之后被Spring容器执行。由于我们当前还没有需要用到它的场景，这里不不去演示。其用法同@PostConstruct。 <br />
<br />
1.8. 使用&lt;context:annotation-config /&gt;简化配置 <br />
Spring2.1
添加了一个新的context的Schema命名空间，该命名空间对注释驱动、属性文件引入、加载期织入等功能提供了便捷的配置。我们知道注释本身是不会
做任何事情的，它仅提供元数据信息。要使元数据信息真正起作用，必须让负责处理这些元数据的处理器工作起来。 <br />
AutowiredAnnotationBeanPostProcessor
和CommonAnnotationBeanPostProcessor就是处理这些注释元数据的处理器。但是直接在Spring配置文件中定义这些
Bean显得比较笨拙。Spring为我们提供了一种方便的注册这些BeanPostProcessor的方式，这就
是&lt;context:annotation-config /&gt;： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;beans&nbsp;xmlns=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/beans"</font></span><span><font color="#000000">&nbsp;xmlns:xsi=</font></span><span class="string"><font color="#0000ff">"http://www.w3.org/2001/XMLSchema-instance"</font></span><span><font color="#000000">&nbsp;xmlns:context=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/context"</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation="http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans/spring-beans-2.5.xsd </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context/spring-context-2.5.xsd"&gt; </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;context:annotation-config&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/beans&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;
&lt;context:annotation-config /&gt;
&lt;/beans&gt;
</pre>
<br />
&lt;context:annotationconfig
/&gt;将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、
CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor以及
RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。 <br />
<br />
2. 使用Spring注解完成Bean的定义 <br />
以上我们介绍了通过@Autowired或@Resource来实现在Bean中自动注入的功能，下面我们将介绍如何注解Bean，从而从XML配置文件中完全移除Bean定义的配置。 <br />
<br />
2.1. @Component（不推荐使用）、@Repository、@Service、@Controller <br />
只需要在对应的类上加上一个@Component注解，就将该类定义为一个Bean了： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Component</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserDaoImpl&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">extends</font></strong></span><span><font color="#000000">&nbsp;HibernateDaoSupport&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;UserDao&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">@Component
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
...
}
</pre>
<br />
使用@Component注解定义的Bean，默认的名称（id）是小写开头的非限定类名。如这里定义的Bean名称就是userDaoImpl。你也可以指定Bean的名称： <br />
@Component("userDao") <br />
@Component
是所有受Spring管理组件的通用形式，Spring还提供了更加细化的注解形式：@Repository、@Service、
@Controller，它们分别对应存储层Bean，业务层Bean，和展示层Bean。目前版本（2.5）中，这些注解与@Component的语义
是一样的，完全通用，在Spring以后的版本中可能会给它们追加更多的语义。所以，我们推荐使用@Repository、@Service、
@Controller来替代@Component。 <br />
<br />
2.2. 使用&lt;context:component-scan /&gt;让Bean定义注解工作起来 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;beans&nbsp;xmlns=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/beans"</font></span><span><font color="#000000">&nbsp;xmlns:xsi=</font></span><span class="string"><font color="#0000ff">"http://www.w3.org/2001/XMLSchema-instance"</font></span><span><font color="#000000">&nbsp;xmlns:context=</font></span><span class="string"><font color="#0000ff">"http://www.springframework.org/schema/context"</font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation="http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/beans/spring-beans-2.5.xsd </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;http:</font></span><span class="comment"><font color="#008200">//www.springframework.org/schema/context/spring-context-2.5.xsd"&gt; </font></span><span><font color="#000000">&nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;context:component-scan&nbsp;base-</font></span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.kedacom.ksoa"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/beans&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;
&lt;context:component-scan base-package="com.kedacom.ksoa" /&gt;
&lt;/beans&gt;
</pre>
<br />
这里，所有通过&lt;bean&gt;元素定义Bean的配置内容已经被移除，仅需要添加一
行&lt;context:component-scan /&gt;配置就解决所有问题了——Spring
XML配置文件得到了极致的简化（当然配置元数据还是需要的，只不过以注释形式存在罢了）。&lt;context:component-scan
/&gt;的base-package属性指定了需要扫描的类包，类包及其递归子包中所有的类都会被处理。 <br />
&lt;context:component-scan /&gt;还允许定义过滤器将基包下的某些类纳入或排除。Spring支持以下4种类型的过滤方式： <br />
<ul>
    <li>过滤器类型 表达式范例 说明
    </li>
    <li>注解 org.example.SomeAnnotation 将所有使用SomeAnnotation注解的类过滤出来
    </li>
    <li>类名指定 org.example.SomeClass 过滤指定的类
    </li>
    <li>正则表达式 com\.kedacom\.spring\.annotation\.web\..* 通过正则表达式过滤一些类
    </li>
    <li>AspectJ表达式 org.example..*Service+ 通过AspectJ表达式过滤一些类 </li>
</ul>
<br />
以正则表达式为例，我列举一个应用实例： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><font color="#000000">&lt;context:component-scan&nbsp;base-</font></span><span class="keyword"><strong><font color="#7f0055">package</font></strong></span><span><font color="#000000">=</font></span><span class="string"><font color="#0000ff">"com.casheen.spring.annotation"</font></span><span><font color="#000000">&gt; &nbsp;&nbsp;</font></span></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&lt;context:exclude-filter&nbsp;type=</font></span><span class="string"><font color="#0000ff">"regex"</font></span><span><font color="#000000">&nbsp;expression=</font></span><span class="string"><font color="#0000ff">"com\.casheen\.spring\.annotation\.web\..*"</font></span><span><font color="#000000">&nbsp;/&gt; &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&lt;/context:component-scan&gt;&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">	&lt;context:component-scan base-package="com.casheen.spring.annotation"&gt;
&lt;context:exclude-filter type="regex" expression="com\.casheen\.spring\.annotation\.web\..*" /&gt;
&lt;/context:component-scan&gt;
</pre>
<br />
值得注意的是&lt;context:component-scan
/&gt;配置项不但启用了对类包进行扫描以实施注释驱动Bean定义的功能，同时还启用了注释驱动自动注入的功能（即还隐式地在内部注册了
AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor），
因此当使用&lt;context:component-scan
/&gt;后，就可以将&lt;context:annotation-config /&gt;移除了。 <br />
<br />
2.3. 使用@Scope来定义Bean的作用范围 <br />
在使用XML定义Bean时，我们可能还需要通过bean的scope属性来定义一个Bean的作用范围，我们同样可以通过@Scope注解来完成这项工作： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/topic/295348#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="annotation"><font color="#646464">@Scope</font></span><span><font color="#000000">(</font></span><span class="string"><font color="#0000ff">"session"</font></span><span><font color="#000000">) &nbsp;&nbsp;</font></span></span></li>
    <li><span class="annotation"><font color="#646464">@Component</font></span><span><font color="#000000">() &nbsp;&nbsp;</font></span></li>
    <li><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span><font color="#000000">&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span><font color="#000000">&nbsp;UserSessionBean&nbsp;</font></span><span class="keyword"><strong><font color="#7f0055">implements</font></strong></span><span><font color="#000000">&nbsp;Serializable&nbsp;{ &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</font></span></li>
    <li><span><font color="#000000">}&nbsp;&nbsp;</font></span></li>
</ol>
</div>
<pre class="java" style="display: none;" name="code_lighted">@Scope("session")
@Component()
public class UserSessionBean implements Serializable {
...
}
</pre>
<br />
<br />
3. 参考 <br />
http://kingtai168.javaeye.com/blog/244002 <br />
http://www.javaeye.com/topic/244153 <br />
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config <br />
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-classpath-scanning <br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/295152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-09-15 15:20 <a href="http://www.blogjava.net/keweibo/articles/295152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Spring的JdbcTemplate实现分页功能</title><link>http://www.blogjava.net/keweibo/articles/194354.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 20 Apr 2008 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/194354.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/194354.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/194354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/194354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/194354.html</trackback:ping><description><![CDATA[这里用的是<a class="channel_keylink" href="http://oracle.chinaitlab.com/" target="_blank">Oracle</a>数据库，使用伪列ROWNUM来实现分页。分页代码如下：<br />
　　<br />
　　package com.deity.ranking.util;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import java.util.List;<br />
　　import org.springframework.jdbc.core.JdbcTemplate;<br />
　　import org.springframework.jdbc.core.support.JdbcDaoSupport;<br />
　　/** * 分页函数 *　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @author allenpan */<br />
public class Pagination extends JdbcDaoSupport{<br />
　　public static final int NUMBERS_PER_PAGE = 10;<br />
　　//一页显示的记录数<br />
　　private int numPerPage;<br />
　　//记录总数<br />
　　private int totalRows;<br />
　　//总页数<br />
　　private int totalPages;<br />
　　//当前页码<br />
　　private int currentPage;<br />
　　//起始行数<br />
　　private int startIndex;<br />
　　//结束行数<br />
　　private int lastIndex;<br />
　　//结果集存放List<br />
　　private List resultList;<br />
　　//JdbcTemplate jTemplate<br />
　　private JdbcTemplate jTemplate;<br />
　　/**<br />
　　* 每页显示10条记录的构造函数,使用该函数必须先给Pagination设置currentPage，jTemplate初值<br />
　　* @param sql oracle语句<br />
　　*/<br />
　　public Pagination(String sql){<br />
　　if(jTemplate == null){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");<br />
　　}else if(sql.equals("")){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");<br />
　　}<br />
　　new Pagination(sql,currentPage,NUMBERS_PER_PAGE,jTemplate);<br />
　　}<br />
　　/**分页构造函数<br />
　　* @param sql 根据传入的sql语句得到一些基本分页信息<br />
　　* @param currentPage 当前页<br />
　　* @param numPerPage 每页记录数<br />
　　* @param jTemplate JdbcTemplate实例<br />
　　*/<br />
　　public Pagination(String sql,int currentPage,int numPerPage,JdbcTemplate jTemplate){<br />
　　if(jTemplate == null){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");<br />
　　}else if(sql == null || sql.equals("")){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");<br />
　　}<br />
　　//设置每页显示记录数<br />
　　setNumPerPage(numPerPage);<br />
　　//设置要显示的页数<br />
　　setCurrentPage(currentPage);<br />
　　//计算总记录数<br />
　　StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");<br />
　　totalSQL.append(sql);<br />
　　totalSQL.append(" ) totalTable ");<br />
　　//给JdbcTemplate赋值<br />
　　setJdbcTemplate(jTemplate);<br />
　　//总记录数<br />
　　setTotalRows(getJdbcTemplate().queryForInt(totalSQL.toString()));<br />
　　//计算总页数<br />
　　setTotalPages();<br />
　　//计算起始行数<br />
　　setStartIndex();<br />
　　//计算结束行数<br />
　　setLastIndex();<br />
　　System.out.println("lastIndex="+lastIndex);//////////////////<br />
　　//构造oracle数据库的分页语句<br />
　　StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");<br />
　　paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");<br />
　　paginationSQL.append(sql);<br />
　　paginationSQL.append("　) temp where ROWNUM &lt;= " + lastIndex);<br />
　　paginationSQL.append(" ) WHERE　num &gt; " + startIndex);<br />
　　//装入结果集<br />
　　setResultList(getJdbcTemplate().queryForList(paginationSQL.toString()));<br />
　　}<br />
　　/**<br />
　　* @param args<br />
　　*/<br />
　　public static void main(String[] args) {<br />
　　// TODO Auto-generated method stub　　　　}<br />
　　public int getCurrentPage() {<br />
　　return currentPage;<br />
　　}<br />
　　public void setCurrentPage(int currentPage) {<br />
　　this.currentPage = currentPage;<br />
　　}<br />
　　public int getNumPerPage() {<br />
　　return numPerPage;<br />
　　}<br />
　　public void setNumPerPage(int numPerPage) {<br />
　　this.numPerPage = numPerPage;<br />
　　}<br />
　　public List getResultList() {<br />
　　return resultList;　　　　}<br />
　　public void setResultList(List resultList) {<br />
　　this.resultList = resultList;<br />
　　}<br />
　　public int getTotalPages() {<br />
　　return totalPages;<br />
　　}<br />
　　//计算总页数<br />
　　public void setTotalPages() {<br />
　　if(totalRows % numPerPage == 0){<br />
　　this.totalPages = totalRows / numPerPage;<br />
　　}else{<br />
　　this.totalPages　= (totalRows / numPerPage) + 1;<br />
　　}<br />
　　}<br />
　　public int getTotalRows() {<br />
　　return totalRows;<br />
　　}<br />
　　public void setTotalRows(int totalRows) {<br />
　　this.totalRows = totalRows;<br />
　　}<br />
　　public int getStartIndex() {<br />
　　return startIndex;<br />
　　}<br />
　　public void setStartIndex() {<br />
　　this.startIndex = (currentPage - 1) * numPerPage;<br />
　　}<br />
　　public int getLastIndex() {<br />
　　return lastIndex;<br />
　　}<br />
　　public JdbcTemplate getJTemplate() {<br />
　　return jTemplate;<br />
　　}<br />
　　public void setJTemplate(JdbcTemplate template) {<br />
　　jTemplate = template;<br />
　　}<br />
　　//计算结束时候的索引<br />
　　public void setLastIndex() {<br />
　　System.out.println("totalRows="+totalRows);///////////<br />
　　System.out.println("numPerPage="+numPerPage);///////////<br />
　　if( totalRows &lt; numPerPage){<br />
　　this.lastIndex = totalRows;<br />
　　}else if((totalRows % numPerPage == 0) || (totalRows % numPerPage != 0 &amp;&amp; currentPage &lt; totalPages)){<br />
　　this.lastIndex = currentPage * numPerPage;<br />
　　}else if(totalRows % numPerPage != 0 &amp;&amp; currentPage == totalPages){//最后一页<br />
　　this.lastIndex = totalRows ;<br />
　　}<br />
　　}}在我的业务逻辑代码中：<br />
　　/**<br />
　　* find season ranking list from DC<br />
　　* @param areaId 选手区域id<br />
　　* @param rankDate 赛季<br />
　　* @param category 类别<br />
　　* @param characterName 角色名<br />
　　* @return List<br />
　　*/<br />
　　public List findSeasonRankingList(Long areaId, int rankYear,int rankMonth,<br />
　　Long categoryId,String characterName) {<br />
　　//SQL语句<br />
　　StringBuffer sql = new StringBuffer(" SELECT C.USERID userid,D.POSNAME posname,C.GAMEID gameid,C.AMOUNT amount,C.RANK rank FROM ");<br />
　　//表　　　　　　　　　　　　sql.append(" (SELECT B.USERID USERID,");<br />
　　sql.append(" B.POSID POSID,");<br />
　　sql.append(" A.DISTRICT_CODE DISTRICTCODE,");<br />
　　sql.append(" A.GAMEID GAMEID,");<br />
　　sql.append(" AMOUNT AMOUNT,");<br />
　　sql.append(" RANK RANK ");<br />
　　sql.append(" FROM TB_FS_RANK A ");<br />
　　sql.append(" LEFT JOIN TB_CHARACTER_INFO B ");<br />
　　sql.append(" ON A.DISTRICT_CODE = B.DISTRICT_CODE ");<br />
　　sql.append(" AND A.GAMEID = B.GAMEID ");<br />
　　//附加条件<br />
　　if(areaId != null &amp;&amp; areaId.intValue() != 0){<br />
　　sql.append(" and A.DISTRICT_CODE = " + areaId.intValue());<br />
　　}<br />
　　if( rankYear &gt; 1970 &amp;&amp; rankMonth &gt; 0){<br />
　　//hql.append(" and sas.id.dt &gt;= to_date('" + rankYear + "-" + rankMonth + "-01 00:00:00'," + "YYYY-MM-DD HH24:MI:SS");<br />
　　//hql.append(" and sas.id.dt &lt;= to_date('" + rankYear + "-" + rankMonth + "-" + TimeTool.findMaxDateInMonth(rankYear,rankMonth) + " 23:59:59'," + "YYYY-MM-DD HH24:MI:SS");<br />
　　sql.append(" and A.DT = fn_time_convert(to_date('" + rankYear + "-" + rankMonth + "'," + "'YYYY-MM')) ");<br />
　　}<br />
　　if(categoryId != null &amp;&amp; categoryId.intValue() != 0){<br />
　　sql.append(" and A.CID = " + categoryId.intValue());<br />
　　}<br />
　　if(characterName != null &amp;&amp; !characterName.trim().equals("")){<br />
　　sql.append(" and A.GAMEID = '" + characterName.trim()+"' ");<br />
　　}<br />
　　sql.append(" ORDER BY RANK ASC) C ");<br />
　　sql.append(" LEFT JOIN TB_FS_POSITION D ");<br />
　　sql.append(" ON C.POSID = D.POSID ");<br />
　　sql.append(" ORDER BY C.RANK ");<br />
　　System.out.println("hql="+sql.toString());////////////////<br />
　　//使用自己的分页程序控制结果集<br />
　　Pagination pageInfo = new Pagination(sql.toString(),1,10,getJdbcTemplate());<br />
　　return pageInfo.getResultList();<br />
　　//return getJdbcTemplate().queryForList(sql.toString());<br />
　　} <br />
<span style="color: red">文章來源：http://java.chinaitlab.com/Spring/38091.html</span>
<img src ="http://www.blogjava.net/keweibo/aggbug/194354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-04-20 19:32 <a href="http://www.blogjava.net/keweibo/articles/194354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]一个泛型Hibernate DAO实现</title><link>http://www.blogjava.net/keweibo/articles/184372.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 06 Mar 2008 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/184372.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/184372.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/184372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/184372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/184372.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; 文章来源http://blog.csdn.net/dingx/archive/2007/08/06/1728287.aspxpackage&nbsp;sgf4web.dao;import&nbsp;java.io.Serializable;import&nbsp;java.util.*;import&nbsp;java.util.regex.Matcher;i...&nbsp;&nbsp;<a href='http://www.blogjava.net/keweibo/articles/184372.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/184372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-03-06 23:17 <a href="http://www.blogjava.net/keweibo/articles/184372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转:用Spring快速开发jms应用（JBOSS服务器）</title><link>http://www.blogjava.net/keweibo/articles/175545.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 15 Jan 2008 13:00:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/175545.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/175545.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/175545.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/175545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/175545.html</trackback:ping><description><![CDATA[异步进程通信是面向服务架构(SOA)一个重要的组成部分，因为企业里很多系统通信，特别是与外部组织间的通信，实质上都是异步的。<a href="http://java.sun.com/products/jms/" target="_blank"><strong><font color="#006bad">Java消息服务</font></strong></a>(JMS)是用于编写使用异步消息传递的JEE应用程序的API。传统的使用JMS API进行消息传递的实现包括多个步骤，例如JNDI查询队列连接工厂和Queue资源，在实际发送和接收消息前创建一个JMS会话。
<div class="postText">
<p>　　 <a href="http://www.springframework.org/" target="_blank"><strong><font color="#006bad">Spring框架</font></strong></a>则简化了使用JEE组件(包括JMS)的任务。它提供的模板机制隐藏了典型的JMS实现的细节，这样开发人员可以集中精力放在处理消息的实际工作中，而不用担心如何去创建，访问或清除JMS资源。</p>
<p>　　 本文将对Spring JMS API作一个概述，并通过一个运行在JBoss MQ服务器上的web例程来介绍如何使用Spring JMS API来异步处理（发送和接收）消息。我将通过传统JMS实现和Spring JMS实现两者间的比较，来展示使用Spring JMS处理消息是如何的简单和灵活。</p>
<h3>异步消息传递和面向服务架构</h3>
<p>　　在现实中，大多数web请求都是同步处理的。例如，当用户要登入一个网站，首先输入用户名和密码，然后服务器验证登录合法性。如果验证成功，程序将允许该用户进入网站。这里，登录请求在从客户端接收以后被即时处理了。信用卡验证是另一个同步处理的例子；只有服务器证实输入的信用卡号是有效的，同时客户在帐户上有足够的存款，客户才被允许继续操作。但是让我们思考一下在顺序处理系统上的支付结算步骤。一旦系统证实该用户信用卡的信息是准确的，并且在帐户上有足够的资金，就不必等到所有的支付细节落实、转账完成。支付结算可以异步方式进行，这样客户可以继续进行核查操作。</p>
<p>　　 需要比典型同步请求耗费更长时间的请求，可以使用异步处理。另一个异步处理的例子是，在本地贷款处理程序中，提交至自动承销系统（AUS）的信用请求处理过程。当借方提交贷款申请后，抵押公司会向AUS发送请求，以获取信用历史记录。由于这个请求要求得到全面而又详细的信用报告，包括借方现今和过去的帐户，最近的付款和其他财务资料，服务器需要耗费较长的时间（几小时或着有时甚至是几天）来对这些请求作出响应。客户端程序（应用）要与服务器连接并耗费如此长的时间来等待结果，这是毫无意义的。因此通信应该是异步发生的；也就是，一旦请求被提交，它就被放置在队列中，同时客户端与服务器断开连接。然后AUS服务从指定的队列中选出请求进行处理，并将处理得到的消息放置在另一个消息队列里。最后，客户端程序从这个队列中选出处理结果，紧接着处理这个信用历史数据。</p>
<h3>JMS</h3>
<p>　　 如果您使用过JMS代码，您会发现它与JDBC或JCA很像。它所包含的样本代码创建或JMS资源对象回溯，使得每一次您需要写一个新类来发送和接收消息时，都具有更好的代码密集性和重复性。以下序列显示了传统JMS实现所包括的步骤：</p>
<ol type="1">
    <li>创建JNDI初始上下文（context）。
    <li>从JNDI上下文获取一个队列连接工厂。
    <li>从队列连接工厂中获取一个Quene。
    <li>创建一个Session对象。
    <li>创建一个发送者（sender）或接收者（receiver）对象。
    <li>使用步骤5创建的发送者或接收者对象发送或接收消息。
    <li>处理完消息后，关闭所有JMS资源。 </li>
</ol>
<p>您可以看到，步骤6是处理消息的唯一地方。其他步骤都只是管理与实际业务要求无关的JMS资源，但是开发人员必须编写并维护这些额外步骤的代码。</p>
<h3>Spring JMS</h3>
<p>　　 Spring框架提供了一个模板机制来隐藏Java APIs的细节。JEE开发人员可以使用JDBCTemplate和JNDITemplate类来分别访问后台数据库和JEE资源（数据源，连接池）。JMS也不例外。Spring提供JMSTemplate类，因此开发人员不用为一个JMS实现去编写样本代码。接下来是在开发JMS应用程序时Spring所具有一些的优势。</p>
<ol type="1">
    <li>提供JMS抽象API，简化了访问目标（队列或主题）和向指定目标发布消息时JMS的使用。
    <li>JEE开发人员不需要关心JMS不同版本（例如JMS 1.0.2与JMS 1.1）之间的差异。
    <li>开发人员不必专门处理JMS异常，因为Spring为所有JMS异常提供了一个未经检查的异常，并在JMS代码中重新抛出。 </li>
</ol>
<h3>示例程序</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明：因为只是为了演示如何使用spring编写jms的应用，所以本例没有什么实际用途。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序功能：MessageProducer.java根据一用户信息产生一个消息发送到&nbsp;JMS Provider；由MessageConsumer.java接收。</p>
<p>1.在Jboss里配置XML文件创建一个新的JMS provider。<br />
打开位于%JBOSS_HOME%server\default\deploy\jms文件夹下的jbossmq-destinations-service.xml文件，加入以下代码片断：<br />
<span style="color: #3366ff"><strong>&nbsp;&lt;!--&nbsp; Register User Send/Receive Queue&nbsp; --&gt;<br />
&nbsp;&lt;mbean code="org.jboss.mq.server.jmx.Queue"<br />
&nbsp;&nbsp; name="jboss.mq.destination:service=Queue,name=registerUserQueue"&gt;<br />
&nbsp;&nbsp; &lt;depends optional-attribute-name="DestinationManager"&gt;jboss.mq:service=DestinationManager&lt;/depends&gt;<br />
&nbsp;&lt;/mbean&gt;<br />
&nbsp;&lt;!--&nbsp; Register User Send/Receive Topic&nbsp; --&gt;<br />
&nbsp;&lt;mbean code="org.jboss.mq.server.jmx.Topic"<br />
&nbsp; name="jboss.mq.destination:service=Topic,name=registerUserTopic"&gt;<br />
&nbsp;&nbsp; &lt;depends optional-attribute-name="DestinationManager"&gt;jboss.mq:service=DestinationManager&lt;/depends&gt;<br />
&nbsp;&lt;/mbean&gt;<br />
</strong></span>2.在spring的配置文件中配置JMS组件的具体细节。<br />
&nbsp;（1）JNDI上下文是取得JMS资源的起始位置，因此首先我们要配置JNDI模板：<br />
&nbsp;&nbsp;&nbsp; &lt;!-- JNDI上下文(它是取得JMS资源的起始位置) --&gt;<br />
&nbsp;&nbsp;<span style="color: #3366ff"><strong>&nbsp;&lt;bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="environment"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="java.naming.factory.initial"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jnp.interfaces.NamingContextFactory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="java.naming.provider.url"&gt;localhost&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="java.naming.factory.url.pkgs"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jnp.interfaces:org.jboss.naming<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />
</strong></span>&nbsp;&nbsp;&nbsp;注意：此JNDI模板用到了org.jnp.interfaces.NamingContextFactory所以要把%JBOSS_HOME%\client下的<span style="color: #3366ff">jbossall-client.jar</span>加到你的项目的classpath中。<br />
（2）配置连接工厂：<br />
&nbsp;&nbsp; &lt;!-- JMS连接工厂 --&gt;<br />
&nbsp;&nbsp;&nbsp;<strong style="color: #3366ff">&nbsp; &lt;bean id="jmsConnectionFactory"class="org.springframework.jndi.JndiObjectFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="jndiTemplate"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="jndiTemplate" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="jndiName"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;XAConnectionFactory&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />
</strong>&nbsp;&nbsp; 注意：XAConnectionFactory这个JNDI名字是在%JBOSS_HOME%server\default\deploy\jms文件夹下的jms-ds.xml中定义的(它是由JBoss指定的)。<br />
&nbsp;（3）配置JmsTemplate组件。在例程中我们使用JmsTemplate102。同时使用defaultDestination属性来指定JMS目标。<br />
&nbsp;&nbsp;&lt;!-- JMS模板配置 --&gt;<br />
&nbsp;&nbsp;<strong style="color: #3366ff">&lt;bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="connectionFactory" ref="jmsConnectionFactory" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="defaultDestination" ref="destination" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="pubSubDomain"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;true&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- 等待消息的时间(ms) --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="receiveTimeout"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;30000&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
</strong>&nbsp;&nbsp;注意：如果使用topic-subscribe(主题订阅)模式，该模板的pubSubDomain属性值为true;若使用PToP(点对点)模式，pubSubDomain属性值为false或不配置该属性。<br />
&nbsp;(4)定义一个JMS目标来发送和接收消息:<br />
&nbsp;&nbsp;<span style="color: #3366ff"><strong>&lt;bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="jndiTemplate"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="jndiTemplate" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="jndiName"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;topic/registerUserTopic&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
</strong></span>&nbsp;(5)配置发送者和接收者组件:<br />
&nbsp;&nbsp;&lt;!-- 消息发布者 --&gt;<br />
&nbsp;<strong style="color: #3366ff">&nbsp;&lt;bean id="msgProducer" class="com.boco.jms.MessageProducer"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="jmsTemplate" ref="jmsTemplate" /&gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp;&nbsp;&lt;!-- 消息接收者 --&gt;<br />
&nbsp;&nbsp;&lt;bean id="msgConsumer" class="com.boco.jms.MessageConsumer"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="jmsTemplate" ref="jmsTemplate" /&gt;<br />
&nbsp;&nbsp;&lt;/bean&gt;<br />
</strong>3.相应的类:<br />
&nbsp;(1). User对象。<br />
&nbsp; &nbsp;/**<br />
&nbsp;&nbsp; *&nbsp; User.java<br />
&nbsp;&nbsp; *&nbsp; created on Jul 2, 2006<br />
&nbsp;&nbsp; *&nbsp; Copyrights 2006 BOCO,Inc. All rights reserved.<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;package com.boco.dto;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import java.io.Serializable;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; * desc: 用户信息 Bean<br />
&nbsp;&nbsp; * @author qiujy<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;public class User {<br />
&nbsp;&nbsp;&nbsp;private int id;<br />
&nbsp;&nbsp;&nbsp;private String username;<br />
&nbsp;&nbsp;&nbsp;private String password;<br />
&nbsp;&nbsp;&nbsp;private String email;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public User(){}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//以下为Getter,setter方法略<br />
&nbsp;&nbsp;&nbsp;......<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;(2).消息生产者：<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; *&nbsp; MessageProducer.java<br />
&nbsp;&nbsp; *&nbsp; created on Jul 22, 2006<br />
&nbsp;&nbsp; *&nbsp; Copyrights 2006 BOCO,Inc. All rights reserved.<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;package com.boco.jms;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import javax.jms.JMSException;<br />
&nbsp;&nbsp;import javax.jms.MapMessage;<br />
&nbsp;&nbsp;import javax.jms.Message;<br />
&nbsp;&nbsp;import javax.jms.Session;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import org.springframework.jms.core.JmsTemplate;<br />
&nbsp;&nbsp;import org.springframework.jms.core.MessageCreator;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import com.boco.dto.User;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; * desc:消息生产者<br />
&nbsp;&nbsp; * @author qiujy<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;public class MessageProducer {<br />
&nbsp;&nbsp;&nbsp;/** JMS模板 */<br />
&nbsp;&nbsp;&nbsp;private JmsTemplate jmsTemplate;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public void setJmsTemplate(JmsTemplate jmsTemplate){<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.jmsTemplate = jmsTemplate;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public void sendMessage(final User user){<br />
&nbsp;&nbsp;&nbsp;&nbsp;//调用模板的send来发送消息<br />
&nbsp;&nbsp;&nbsp;&nbsp;jmsTemplate.send(new MessageCreator(){<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Message createMessage(Session session) throws JMSException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//构造一个要发送的消息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MapMessage message = session.createMapMessage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setInt("id", user.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setString("username", user.getUsername());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setString("password", user.getPassword());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setString("email", user.getEmail());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("send success!!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;(3).消息消费者：<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; *&nbsp; MessageConsumer.java<br />
&nbsp;&nbsp; *&nbsp; created on Jul 22, 2006<br />
&nbsp;&nbsp; *&nbsp; Copyrights 2006 BOCO,Inc. All rights reserved.<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;package com.boco.jms;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import javax.jms.JMSException;<br />
&nbsp;&nbsp;import javax.jms.MapMessage;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import org.springframework.jms.core.JmsTemplate;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import com.boco.dto.User;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; * desc:消息消费者<br />
&nbsp;&nbsp; * @author qiujy<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;public class MessageConsumer {<br />
&nbsp;&nbsp;&nbsp;/** JMS模板 */<br />
&nbsp;&nbsp;&nbsp;private JmsTemplate jmsTemplate;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public void setJmsTemplate(JmsTemplate jmsTemplate){<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.jmsTemplate = jmsTemplate;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public User receiveMessage(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;//参数为Destination的JNDI名字去掉前面的模式类型标识<br />
&nbsp;&nbsp;&nbsp;&nbsp;//MapMessage msg = (MapMessage)jmsTemplate.receive("registerUserQueue");<br />
&nbsp;&nbsp;&nbsp;&nbsp;MapMessage msg = (MapMessage)jmsTemplate.receive("registerUserTopic");<br />
&nbsp;&nbsp;&nbsp;&nbsp;User user = new User();<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setId(msg.getInt("id"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUsername(msg.getString("username"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPassword(msg.getString("password"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setEmail(msg.getString("email"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (JMSException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return user;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;(4).测试用例：<br />
&nbsp;&nbsp;&nbsp;//======== 生产者测试用例 ===============<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; *&nbsp; TestMsgProducer.java<br />
&nbsp;&nbsp; *&nbsp; created on Jul 22, 2006<br />
&nbsp;&nbsp; *&nbsp; Copyrights 2006 BOCO,Inc. All rights reserved.<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;package com.boco.jms;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import junit.framework.TestCase;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import org.springframework.context.ApplicationContext;<br />
&nbsp;&nbsp;import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import com.boco.dto.User;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; * desc:<br />
&nbsp;&nbsp; * @author qiujy<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;public class TestMsgProducer extends TestCase {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;private ApplicationContext context;<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp; * @param arg0<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;public TestMsgProducer(String arg0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;super(arg0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;context = new ClassPathXmlApplicationContext("applicationContext_jms.xml");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;/* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; * @see junit.framework.TestCase#setUp()<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;protected void setUp() throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;super.setUp();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;/* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; * @see junit.framework.TestCase#tearDown()<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;protected void tearDown() throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;super.tearDown();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp; * Test method for <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#55;&#66;&#64;&#108;&#105;&#110;&#107;"><strong><font color="#006bad">{@link</font></strong></a> com.boco.jms.MessageProducer#sendMessage(com.boco.dto.User)}.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;public void testSendMessage() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;User user = new User();<br />
&nbsp;&nbsp;&nbsp;&nbsp;user.setId(132);<br />
&nbsp;&nbsp;&nbsp;&nbsp;user.setUsername("JMSTest");<br />
&nbsp;&nbsp;&nbsp;&nbsp;user.setPassword("password");<br />
&nbsp;&nbsp;&nbsp;&nbsp;user.setEmail("<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#64;&#98;&#111;&#99;&#111;&#46;&#99;&#111;&#109;&#46;&#99;&#110;"><strong><font color="#006bad">support@boco.com.cn</font></strong></a>");<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;MessageProducer producer = (MessageProducer)context.getBean("msgProducer");<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;producer.sendMessage(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;//============ 消费者测试用例 ===============<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; *&nbsp; TestMsgConsumer.java<br />
&nbsp;&nbsp; *&nbsp; created on Jul 22, 2006<br />
&nbsp;&nbsp; *&nbsp; Copyrights 2006 BOCO,Inc. All rights reserved.<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;package com.boco.jms;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import junit.framework.TestCase;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import org.springframework.context.ApplicationContext;<br />
&nbsp;&nbsp;import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;import com.boco.dto.User;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;/**<br />
&nbsp;&nbsp; * desc:<br />
&nbsp;&nbsp; * @author qiujy<br />
&nbsp;&nbsp; *<br />
&nbsp;&nbsp; */<br />
&nbsp;&nbsp;public class TestMsgConsumer extends TestCase {<br />
&nbsp;&nbsp;&nbsp;private ApplicationContext context;<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp; * @param arg0<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;public TestMsgConsumer(String arg0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;super(arg0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;context = new ClassPathXmlApplicationContext("applicationContext_jms.xml");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;/* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; * @see junit.framework.TestCase#setUp()<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;protected void setUp() throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;super.setUp();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;/* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp; * @see junit.framework.TestCase#tearDown()<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;protected void tearDown() throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;super.tearDown();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp; * Test method for <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#55;&#66;&#64;&#108;&#105;&#110;&#107;"><strong><font color="#006bad">{@link</font></strong></a> com.boco.jms.MessageConsumer#receiveMessage()}.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;public void testReceiveMessage() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;MessageConsumer consumer = (MessageConsumer)context.getBean("msgConsumer");<br />
&nbsp;&nbsp;&nbsp;&nbsp;User user = consumer.receiveMessage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;assertNotNull(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "id========" + user.getId()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "\nname======" + user.getUsername()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "\npassword==" + user.getPassword()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "\nemail=====" + user.getEmail());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;}</p>
&nbsp;</div>
<br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1418938<br />
<br />
<strong><u style="color: red">启动JBOSS服务器.先运行TestMsgConsumer.java;再运行TestMsgProducer.java,即可看到控制台的输出了,嘻嘻~~~~~</u></strong></p>
<img src ="http://www.blogjava.net/keweibo/aggbug/175545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-01-15 21:00 <a href="http://www.blogjava.net/keweibo/articles/175545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用外部属性文件(关于PropertyPlaceholderConfigurer) </title><link>http://www.blogjava.net/keweibo/articles/169870.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 23 Dec 2007 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/169870.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/169870.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/169870.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/169870.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/169870.html</trackback:ping><description><![CDATA[<span style="color: rgb(255,128,192)"><span style="color: #0000ff"><strong>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;<br />
<br />
&lt;beans&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="propertyConfigurer"<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="location"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;classpath:com/starxing/test/jdbc.properties&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&lt;!--<br />
&nbsp;使用locations属性定义多个配置文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="locations"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;classpath:config/maxid.properties&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;classpath:config/jdoserver.properties&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
&lt;/property&gt;<br />
&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="dataSource"<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;${database.url}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="driverClassName"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;${database.driver}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="username"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;${database.user}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;${database.password}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&lt;/beans&gt;<br />
<br />
3.Config.java<br />
package com.starxing.test;<br />
<br />
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;<br />
import org.springframework.beans.factory.xml.XmlBeanFactory;<br />
import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
import org.springframework.core.io.FileSystemResource;<br />
import org.springframework.jdbc.datasource.DriverManagerDataSource;<br />
<br />
public class Config {<br />
<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "com/starxing/test/conf.xml"));<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 如果要在BeanFactory中使用，bean factory post-processor必须手动运行:<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cfg.setLocation(new FileSystemResource(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "com/starxing/test/jdbc.properties"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cfg.postProcessBeanFactory(factory);<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DriverManagerDataSource dataSource = (DriverManagerDataSource) factory<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getBean("dataSource");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(dataSource.getDriverClassName());<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 注意，ApplicationContext能够自动辨认和应用在其上部署的实现了BeanFactoryPostProcessor的bean。这就意味着，当使用ApplicationContext的时候应用PropertyPlaceholderConfigurer会非常的方便。由于这个原因，建议想要使用这个或者其他bean<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // factory postprocessor的用户使用ApplicationContext代替BeanFactroy。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ApplicationContext context = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; "com/starxing/test/conf.xml");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DriverManagerDataSource dataSource2 = (DriverManagerDataSource) context<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getBean("dataSource");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(dataSource2.getDriverClassName());<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br />
<br />
</strong></span><span style="color: rgb(0,1,2)">相关文档:<br />
</span></span>
<hr style="width: 100%; height: 2px" />
<span style="color: rgb(255,128,192)"><span style="color: rgb(0,1,2)"><br />
</span></span>　使用这一解决方案，我们可以生成如下的属性文件（/WEB-INF/jdbc.properties）：
<pre class="code">jdbc.driver=org.postgresql.Driver<br />
jdbc.url=jdbc:postgresql://localhost/test<br />
jdbc.user=postgres<br />
jdbc.password=<br />
</pre>
<p>　　我们的Bean配置如下：</p>
<pre class="code">&lt;bean id="propertyConfigurer" <br />
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;<br />
&lt;property name="location"&gt;<br />
&lt;value&gt;/WEB-INF/jdbc.properties&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/bean&gt;<br />
<br />
&lt;bean id="dataSource" <br />
class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />
&lt;property name="driverClassName"&gt;<br />
&lt;value&gt;${jdbc.driver}&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;property name="url"&gt;<br />
&lt;value&gt;${jdbc.url}&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;property name="username"&gt;<br />
&lt;value&gt;${jdbc.user}&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;property name="password"&gt;<br />
&lt;value&gt;${jdbc.password}&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/bean&gt;</pre>
<p>　　如上所述，我们定义了一个PropertyPlaceholderConfigurer类的实例，并将其位置属性设置为我们的属性文件。该类被实现为Bean工厂的后处理器，并将使用定义在文件中的属性来代替所有的占位符（${...}value）。</p>
<p>　　利用这种技术，我们可以从applicationContext.xml中移除所有特定于主机的配置属性。通过这种方式，我们可以自由地为该文件添加新的Bean，而不必担心特定于主机属性的同步性。这样可以简化生产部署和维护。</p>
<br />
<p><br />
</p>
<hr style="width: 100%; height: 2px" />
<p><tt class="literal">PropertyPlaceholderConfigurer</tt>作为一个bean factory post-processor实现，可以用来将BeanFactory定义中的属性值放置到另一个单独的Java Properties格式的文件中。这使得用户不用对BeanFactory的主XML定义文件进行复杂和危险的修改，就可以定制一些基本的属性（比如说数据库的urls,用户名和密码）。 </p>
<p>考虑一个BeanFactory定义的片断，里面用占位符定义了DataSource： </p>
<p>在下面这个例子中，定义了一个datasource，并且我们会在一个外部Porperties文件中配置一些相关属性。 在运行时，我们为BeanFactory提供一个<tt class="literal">PropertyPlaceholderConfigurer</tt>，它将用Properties文件中的值替换掉这个datasource的属性值： </p>
<pre class="programlisting">&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<br />
&lt;property name="driverClassName"&gt;&lt;value&gt;${jdbc.driverClassName}&lt;/value&gt;&lt;/property&gt;<br />
&lt;property name="url"&gt;&lt;value&gt;${jdbc.url}&lt;/value&gt;&lt;/property&gt;<br />
&lt;property name="username"&gt;&lt;value&gt;${jdbc.username}&lt;/value&gt;&lt;/property&gt;<br />
&lt;property name="password"&gt;&lt;value&gt;${jdbc.password}&lt;/value&gt;&lt;/property&gt;<br />
&lt;/bean&gt;</pre>
<p>真正的值来自于另一个Properties格式的文件:</p>
<pre class="programlisting">jdbc.driverClassName=org.hsqldb.jdbcDriver<br />
jdbc.url=jdbc:hsqldb:hsql://production:9002<br />
jdbc.username=sa<br />
jdbc.password=root</pre>
<p>如果要在BeanFactory中使用，bean factory post-processor必须手动运行:</p>
<pre class="programlisting">XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));<br />
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();<br />
cfg.setLocation(new FileSystemResource("jdbc.properties"));<br />
cfg.postProcessBeanFactory(factory);</pre>
<p>注意，ApplicationContext能够自动辨认和应用在其上部署的实现了BeanFactoryPostProcessor的bean。这就意味着，当使用ApplicationContext的时候应用PropertyPlaceholderConfigurer会非常的方便。由于这个原因，建议想要使用这个或者其他bean factory postprocessor的用户使用ApplicationContext代替BeanFactroy。 </p>
<p><tt class="literal">PropertyPlaceHolderConfigurer</tt>不仅仅在你指定的Porperties文件中查找属性， 如果它在其中没有找到你想使用的属性，它还会在Java的系统properties中查找。 这个行为能够通过设置配置中的<tt class="literal">systemPropertiesMode</tt> 属性来定制。这个属性有三个值， 一个让配置总是覆盖，一个让它<span class="emphasis"><em>永不</em></span>覆盖，一个让它仅在properties文件中找不到的时候覆盖。 请参考 PropertiesPlaceholderConfigurer的JavaDoc获得更多信息。 <br />
文章来源:http://www.cublog.cn/u/9295/showart.php?id=261437</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/169870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-12-23 22:23 <a href="http://www.blogjava.net/keweibo/articles/169870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Servlet中调用spring中定义的Bean</title><link>http://www.blogjava.net/keweibo/articles/162964.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 25 Nov 2007 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/162964.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/162964.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/162964.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/162964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/162964.html</trackback:ping><description><![CDATA[<p>package dgut.ke.servlet;</p>
<p>import javax.servlet.ServletConfig;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;</p>
<p>import org.ajaxtags.helpers.AjaxXmlBuilder;<br />
import org.ajaxtags.servlets.BaseAjaxServlet;<br />
import org.springframework.web.context.support.WebApplicationContextUtils;</p>
<p>import dgut.ke.model.Book;<br />
import dgut.ke.service.IBookService;</p>
<p>@SuppressWarnings("serial")<br />
public class BookCallOut extends BaseAjaxServlet {</p>
<p>&nbsp;private IBookService bookService;</p>
<p><br />
&nbsp;@Override<br />
&nbsp;public String getXmlContent(HttpServletRequest request,<br />
&nbsp;&nbsp;&nbsp;HttpServletResponse response) throws Exception {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;request.setCharacterEncoding("UTF-8");<br />
&nbsp;&nbsp;String bookName = request.getParameter("bookName");<br />
&nbsp;&nbsp;System.out.println("---- " + bookName);<br />
&nbsp;&nbsp;Book book = (Book) bookService.findForObject(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"from Book as b where b.bookName=?",new Object[]{bookName});<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;AjaxXmlBuilder builder = new AjaxXmlBuilder()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addItemAsCData("提示标题", "&lt;P&gt;关于书籍:&lt;b&gt;" + book.getBookNo() +"&lt;/b&gt;的信息如下:&lt;br/&gt;&lt;/p&gt;");</p>
<p>&nbsp;&nbsp;<br />
&nbsp;&nbsp;return builder.toString();<br />
&nbsp;}</p>
<p><br />
&nbsp;@Override<br />
&nbsp;public void init(ServletConfig servletConfig) throws ServletException {<br />
&nbsp;&nbsp;// 必须在重写方法的第一行调用以下语句<br />
<span style="color: #ff0000">&nbsp;&nbsp;super.init(servletConfig);</span><br />
&nbsp;<span style="color: #3366ff">&nbsp;bookService = (IBookService) WebApplicationContextUtils<br />
&nbsp;&nbsp;&nbsp;.getRequiredWebApplicationContext(getServletContext())<br />
&nbsp;&nbsp;&nbsp;.getBean("bookService");</span><span style="color: red"><br />
</span>&nbsp;}</p>
<p>}<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/162964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-11-25 13:42 <a href="http://www.blogjava.net/keweibo/articles/162964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring发送纯文本文件邮件</title><link>http://www.blogjava.net/keweibo/articles/160850.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 15 Nov 2007 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/160850.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/160850.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/160850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/160850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/160850.html</trackback:ping><description><![CDATA[<p>package dgut.ke.test;</p>
<p>import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
import org.springframework.mail.SimpleMailMessage;<br />
import org.springframework.mail.javamail.JavaMailSender;</p>
<p>public class MailTest {</p>
<p>&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");<br />
&nbsp;&nbsp;JavaMailSender mailSender = (JavaMailSender) context.getBean("mailSender");<br />
&nbsp;&nbsp;SimpleMailMessage mail = new SimpleMailMessage();<br />
&nbsp;&nbsp;mail.setFrom("sskwfnihc@gmail.com");<br />
&nbsp;&nbsp;mail.setTo("sskwfnihc@163.com");<br />
&nbsp;&nbsp;mail.setSubject("KE给你发了一封邮件");<br />
&nbsp;&nbsp;mail.setText("This is a mailTest example");<br />
&nbsp;&nbsp;mailSender.send(mail);<br />
&nbsp;&nbsp;System.out.println("成功发送文本文件！");<br />
&nbsp;}<br />
}<br />
spring配置文件:<br />
... ...<br />
&lt;!-- 发送电子邮件 --&gt;<br />
&nbsp;&lt;bean id="mailSender"<br />
&nbsp;&nbsp;class="org.springframework.mail.javamail.JavaMailSenderImpl"<br />
&nbsp;&nbsp;abstract="false" lazy-init="default" autowire="default"<br />
&nbsp;&nbsp;dependency-check="default"&gt;<br />
&nbsp;&nbsp;&lt;property name="host" value="smtp.gmail.com"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="port" value="465"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="username"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;sskwfnihc&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;<span style="color: red">write your password here</span>&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="javaMailProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="mail.smtp.auth"&gt;true&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="mail.smtp.starttls.enable"&gt;true&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="mail.smtp.socketFactory.class"&gt;javax.net.ssl.SSLSocketFactory&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
... ...</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/160850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-11-15 22:35 <a href="http://www.blogjava.net/keweibo/articles/160850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataAccessException </title><link>http://www.blogjava.net/keweibo/articles/157052.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 30 Oct 2007 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/157052.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/157052.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/157052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/157052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/157052.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与SQLException 是一个Checked Exception 不同,Spring定义的基本的数据访问异常DataAccessException 是一个RuntimeException<br />
这意味着你在应用程序中不必强行捕获该异常,可以交由上层处理.如果直接处理SQLException ,我们需要获得特定数据库的错误代码,然后判断该SQLException 的原因,包装成自定义异常然后交由上层处理.现在,由于Spring 为我们提供了一个与底层数据库无关的异常体系,因此可以方便地处理各种数据访问异常.Spring 甚至试图翻译各个数据库厂商的错误代码,然后转换为DataAccessException 异常体系中的某一个合适的子类.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在应用程序中我们只需要捕获DataAccessException 即可,由于DataAccessException 是从 NestedRuntimeException 继承而来的,因此,它完整地保存了原始异常的信息.
<img src ="http://www.blogjava.net/keweibo/aggbug/157052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-30 21:30 <a href="http://www.blogjava.net/keweibo/articles/157052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring2.0学习笔记三(Bean的作用域)</title><link>http://www.blogjava.net/keweibo/articles/154735.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 21 Oct 2007 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/154735.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/154735.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/154735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/154735.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/154735.html</trackback:ping><description><![CDATA[<p>Bean的作用域</p>
<p>&nbsp;&nbsp;在spring2.0中，一共定义了5种作用域，分别是singleton、prototype、request、session、<br />
globalSession。其中后面三种仅对WEB应用程序有效。<br />
&nbsp;&nbsp;spring2.0通过scope=""属性来定义Bean有作用域，而在spring1.x中，由于只有singleton 和<br />
prototype这两种作用域，因此，spring1.x中定义Bean的作用域是通过singleton=&#8220;true|false" 来<br />
定义的。在spring2.0中首先应该考虑用scope属性来定义Bean 的作用域。</p>
<p>Singleton作用域<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;spring2.0是默认Bean的作用域是scope="singleton"。即spring的IoC容器仅为每个Bean创建一个<br />
实例并且保持Bean的引用，换言之，每次调用getBean()方法请求返回的Bean总是同一个实例。这类似<br />
于《设计模式》一书中的Singleton（单例）模式。</p>
<p>&nbsp;&nbsp;public class Singleton {<br />
&nbsp;&nbsp;&nbsp;&nbsp;private static Singleton instance = new Singleton();<br />
&nbsp;&nbsp;&nbsp;&nbsp;private Singleton() {};<br />
&nbsp;&nbsp;&nbsp;&nbsp;pubilc static Singleton getInstance() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return instance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;由于构造方法被申明为private，因此，在类的外部不可实例化该类，唯一的实例持有在静态引用中<br />
从外部获取该实例的唯一入口是调用Singleton的静态方法Singleton.getInstance().</p>
<p>Prototype作用域</p>
<p>&nbsp;&nbsp;如果需要每次返回Bean的新实例，即每次都新建一个实例，则可以通过设置scope="prototype"来<br />
实现。这样我们就告诉了spring容器采用Prototype作用域。采用prototype作用域时，spring容器总会<br />
返回一个创建的新实例，因此spring容器一旦将实例交给客户端，就不再对其进行跟踪引用了，所以<br />
无法对prototype作用域的Bean定义destory-method,不过仍可以使用init-method。<br />
其它三个属性值仅对WEB程序有效，这里不作讨论。</p>
 <img src ="http://www.blogjava.net/keweibo/aggbug/154735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-21 17:55 <a href="http://www.blogjava.net/keweibo/articles/154735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring2.0学习笔记二(理解IoC的概念)</title><link>http://www.blogjava.net/keweibo/articles/154675.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 21 Oct 2007 04:59:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/154675.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/154675.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/154675.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/154675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/154675.html</trackback:ping><description><![CDATA[<p>理解IoC的概念</p>
<p>&nbsp;&nbsp;IoC全称Inversion of Control,直译为控制反转.何谓IoC?在解释此概念之前,我们来看看下面的例子<br />
import ...</p>
<p>public class BookService {<br />
&nbsp;&nbsp;private BookDAO bookDAO = new DbBookDAO();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;public List&lt;Book&gt; listBooks(String author) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Book&gt; books = bookDAO.listAll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;return books ;<br />
&nbsp;&nbsp;}<br />
}</p>
<p>可以看到,listBooks方法的功能非常简单,即列出所有书籍.而列出所有书籍的功能被委托给bookDAO对象.<br />
考虑到书籍可能存在多种形式,如数据库,XML文件等,将BookDAO申明为接口,因此我们实现了一个具体<br />
子类DbBookDAO.<br />
&nbsp;&nbsp;现在需要考虑的是,BookService如何持有bookDAO对象.最简单的办法是,在BookService的内部持有<br />
一个DbBookDAO的实例,上面的例子确实是这么做的.考虑一下会发现以下的问题:<br />
(1)在BookService中硬编码创建了BookDAO,如果需要另一种BookDAO的实现,则需要修改BookService的<br />
&nbsp;代码,换句话就是BookService组件不能脱离BookDAO的具体实现.<br />
(2)BookDAO的实例无法被其它组件共享.假设其它的组件也需要引用BookDAO,则多个组件很难共享一个<br />
&nbsp;BookDAO实例,因为该实例的生命周期定义在了BookService组件中了,从而难以共享.<br />
(3)如果BookDAO仍需要引用其它资源,例如DataSource,则BookService可能还需要负责管理和维护一个<br />
&nbsp;DataSource,而这实例不是作为上层组件BookService的职责.<br />
(4)测试BookService是复杂的,因为首先编写DbBookDAO,倘若DbBookDAO还依赖于DataSource,是相当复杂.<br />
&nbsp;&nbsp;从以上几点可以看出,如果系统中有大量的组件,其它生命周期和相互之间的依赖关系,如果由组件<br />
自己维护,不但加大的系统的复杂度,而且会导致组件之间的极为紧密的耦合,继而给测试和维护带来了<br />
极大的困难.<br />
&nbsp;&nbsp;在IoC模式下,控制权发生了反转:从应用程序转移到了IoC容器.组件不再由应用程序负责创建和配置<br />
而是由容器负责,应用程序只需直接使用已经创建并配置好的组件.</p>
<p>import ...</p>
<p>public class BookService {<br />
&nbsp;&nbsp;private BookDAO bookDAO ;<br />
&nbsp;&nbsp;public void setBookDAO(BookDAO bookDAO) {<br />
&nbsp;&nbsp;&nbsp;this.bookDAO = bookDAO ;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;public List&lt;Book&gt; listBooks(String author) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Book&gt; books = bookDAO.listAll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;return books ;<br />
&nbsp;&nbsp;}<br />
}<br />
修改后的bookDAO实例不再由BookService创建,而是由IoC容器负责将某个BookDAO实例通过setBookDAO()<br />
注入.这样做的好处:<br />
(1)BookService不必关心如何创建BookDAO的实例,也不必关心BookDAO的具体实现,只需要使用它就可以了<br />
&nbsp;因此简化了BookService的编码.<br />
(2)BookDAO的实例由IoC容器管理,因此,可以在多个组件之间共享,只要它们也实现了相应的setBookDAO()<br />
&nbsp;方法就可以了.<br />
(3)测试BookService也变成十分容易了.</p>
<p>IoC容器负责实例化所有的组件,因此需要告诉容器如何创建组件和各组件之间的依赖关系.</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/154675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-21 12:59 <a href="http://www.blogjava.net/keweibo/articles/154675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring2.0学习笔记一(Bean初始化)</title><link>http://www.blogjava.net/keweibo/articles/154665.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 21 Oct 2007 04:24:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/154665.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/154665.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/154665.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/154665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/154665.html</trackback:ping><description><![CDATA[<p>Bean初始化</p>
<p>&nbsp;spring的Ioc容器根据XML配置文件来初始化Bean.需要注意的一点是,ApplicationContext初始化Bean和基<br />
本的BeanFactory有所不同,基本的BeanFactory总是延迟加载Bean,直到第一次调用getBean("BeanId")方法<br />
请求Bean实例时,BeanFactory才会创建这个Bean,而ApplicationContext在自身初始化时就一次性创建了<br />
所有的Bean,了解这一点是非常重要的,因为ApplicationContext在初始化时就能验证XML配置文件的正确性.<br />
而使用BeanFactory,直到调用getBean("BeanId")方法获取Bean实例时,才可能会发现配置错误而导致抛出<br />
异常.<br />
&nbsp;只有在非常简单的情况下,使用基本的BeanFactory才可能满足我们的需求.绝大多时候我们使用<br />
ApplicationContext是最佳的选择.在启动的时候就能检测配置文件的错误,这比使用基本的BeanFactory<br />
在运行一段时间后调用getBean("BeanId")抛出异常要好得多.并且,延迟加载会带来性能上的损失.<br />
ApplicationContext由于在启动时需要一次性别实例化所有的Bean,如果定义的Bean比较多,则启动的时间<br />
会比较长.<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/154665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-21 12:24 <a href="http://www.blogjava.net/keweibo/articles/154665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ApplicationContext</title><link>http://www.blogjava.net/keweibo/articles/151696.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 10 Oct 2007 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/151696.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/151696.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/151696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/151696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/151696.html</trackback:ping><description><![CDATA[spring中在实现ApplicationContext的类中,最常用的大概就是以下三个.<br />
&nbsp;org.springframework.context.support.FileSystemXmlApplicationContext<br />
&nbsp;可以指定XML文件的相对路径或者绝对路径读取定义文件<br />
&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext<br />
&nbsp;从CLASSPATH设置路径中读取XML定义文件<br />
&nbsp;org.springframework.context.support.XmlWebApplicationContext<br />
&nbsp;在web应用程序的文件架构中,指定相对位置读取定义文件<br />
&nbsp;<br />
ApplicationContext 可以读取多个Bean定义文件,可以在实例化ApplicationContext<br />
的实现类时,以数组指定Bean定义文件的位置,例如<br />
&nbsp;ApplicationContext context = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;new String[]{"bean-config1.xml","bean-config2.xml"});<br />
也可以使用file:/&nbsp;classpath&nbsp;或者classpath*:表示所有的Classpath前置路径都匹配:<br />
&nbsp;ApplicationContext context = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;"classpath*:beans-config.xml");<br />
也可以指定*字符,例如实现读取所有以"beans"开头的XML配置文件,但要注意的是此方法<br />
只在实际的文件系统中有用,如果是在JAR文件中,以是无效的.<br />
&nbsp;ApplicationContext context = new ClassPathXmlApplicationContext(<br />
&nbsp;&nbsp;"beans*.xml");<br />
当需要多个Bean定义文件,也可以在其中一个文件中使用&lt;import&gt;标签<br />
&nbsp;... ...<br />
&nbsp;&lt;beans&gt;<br />
&nbsp;&nbsp;&lt;import resource="beans-config1.xml" /&gt;<br />
&nbsp;&nbsp;&lt;import resource="beans-config2" /&gt;<br />
&nbsp;&nbsp;...<br />
&nbsp;&lt;beans&gt;<br />
&nbsp;此方法有一个需要注意的地方就是&lt;import&gt;标签必有位于&lt;bean&gt;标签之前,定义文件必须<br />
&nbsp;在同一个目录或者是CLASSPATH之中,以相对路径指定文件位置.
<img src ="http://www.blogjava.net/keweibo/aggbug/151696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-10 12:53 <a href="http://www.blogjava.net/keweibo/articles/151696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dwr spring整合 </title><link>http://www.blogjava.net/keweibo/articles/150826.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 07 Oct 2007 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/150826.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/150826.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/150826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/150826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/150826.html</trackback:ping><description><![CDATA[<p>Ajax,它使浏览器可以为用户提供更为自然的浏览体验,对于j2EE WEB开发人员来说,使用DWR框架可以很简单的使用Ajax技术. <br />
本文以一个DWR+SPRING的实例来说明DWR的使用 <br />
1、将dwr.jar放到应用的/WEB-INF/lib目录下 <br />
2、配置web.xml,增加如下代码:</p>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class="alt"><span><span class="comments">&lt;!--初始化WebApplicationContext--&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span style="color: #3366ff"><strong>contextConfigLocation</strong></span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #3366ff"><strong>org.springframework.web.context.ContextLoaderListener&nbsp;&nbsp;&nbsp; </strong></span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="comments">&lt;!--配置DWR拦截器--&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>dwr-invoker</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt">&lt;!--&nbsp;指定DWR核心Servlet的实现类&nbsp; --&gt;
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span style="color: #3366ff"><strong>uk.ltd.getahead.dwr.DWRServlet</strong></span><span class="tag">&lt;/</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>debug</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>true</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>dwr-invoker</span><span class="tag">&lt;/</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/dwr/*</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
3、增中dwr.xml文件 <br />
文件内容：
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&lt;!DOCTYPE&nbsp;dwr&nbsp;PUBLIC&nbsp;"-//GetAhead&nbsp;Limited//DTD&nbsp;Direct&nbsp;Web&nbsp;Remoting&nbsp;1.0//EN"&nbsp;"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">dwr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">allow</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">create</span><span>&nbsp;</span><span class="attribute">creator</span><span>=</span><span class="attribute-value">"<span style="color: #3366ff">spring</span>"</span><span>&nbsp;</span><span class="attribute">javascript</span><span>=</span><span class="attribute-value">"DWRUser"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"<span style="color: #3366ff">beanName</span>"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">"DWRUser"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">create</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">allow</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">dwr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
creator属性的值可以是new,struts,spring......因为此处是整合spring来做的，所以设置成&#8220;spring&#8221;，javascript="DWRUser" 表示实例转换成javascript语言后以DWRUser命名，前台页面可以通过代码（&lt;script src="../../dwr/interface/DWRUser.js" type="text/javascript"&gt;&lt;/script&gt;）来调用。param元素的name属性值可以是class,beanName等，此处用beanName,value得值是定义在applicationContext.xml中某个bean的id值。 <br />
4、创建一个实体bean供DWR转换成js
<div class="code_div">
<p class="alt">&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class=""><span class="keyword"><span><span class="keyword">package</span><span>&nbsp;com.note.dwr;&nbsp;&nbsp;&nbsp;</span></span> </span>
    <li class=""><span class="keyword">import</span><span>&nbsp;com.note.bussies.service.IUserService; &nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="keyword">private</span><span>&nbsp;IUserService&nbsp;ius; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;IUserService&nbsp;getIus()&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;ius; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setIus(IUserService&nbsp;ius)&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">this</span><span>.ius&nbsp;=&nbsp;ius; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;User(){ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;isExist(String&nbsp;username)&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users&nbsp;user&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.ius.getUserByName(username); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;(</span><span class="keyword">null</span><span>&nbsp;==&nbsp;user)&nbsp;?&nbsp;</span><span class="keyword">false</span><span>&nbsp;:&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
5、在applicationContext.xml中配置第4步写的bean
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class="alt"><span><span>...... &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"DWRUser"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.note.dwr.User"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"ius"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">"UserService"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>......&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
6、在视图页面中调用 <br />
先导入以下文，每个文件的功能这里不再详述
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">'text/javascript'</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">'../../dwr/interface/DWRUser.js'</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">'text/javascript'</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">'../../dwr/engine.js'</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">'text/javascript'</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">'../../dwr/util.js'</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
因为我的视图文件是放在/view/user/下，所以这里用了../../返回到根 <br />
具体调用：
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class=""><span>
    <p class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">'text/javascript'</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </p>
    &nbsp;function&nbsp;regUserChked(){ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;var&nbsp;</span><span class="attribute">username</span><span>=$("username").value; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;DWRUser.isExist(username,showData);//showData回调函数 &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;function&nbsp;showData(data){ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data){ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWRUtil.setValue("userMsg","该用户名已经被注册，请更换您的用户名！"); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWRUtil.setValue("userMsg","恭喜您，该用户名尚未被注册！");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>input&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text"</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"username"</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">""</span><span>&nbsp;</span><span class="attribute">onblur</span><span>=</span><span class="attribute-value">"regUserChked()"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"userMsg"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/150826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-07 12:33 <a href="http://www.blogjava.net/keweibo/articles/150826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见的事务传播规则</title><link>http://www.blogjava.net/keweibo/articles/145987.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 17 Sep 2007 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/145987.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/145987.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/145987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/145987.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/145987.html</trackback:ping><description><![CDATA[常见的事务传播规则有如下几种：
<ol>
    <li>&nbsp;PROPAGATION_MANDATORY： 要求调用该方法的线程必须处于事务环境中，否则抛出异常；
    <li>&nbsp;PROPAGATION_NESTED：如果执行该方法的线程已处于事务环境下，依然启动新的事务，方法在嵌套的事务里执行。如果执行该方法的线程并未处于事务中，也启动新的事务，然后执行该方法，此时与&nbsp;PROPAGATION_REQUIRED相同；
    <li>&nbsp;PROPAGATION_NEVER：不允许调用该方法的线程处于事务环境下，如果调用该方法的线程处于事务环境下，则抛出异常；
    <li>&nbsp;PROPAGATION_NOT_SUPPORTED：如果调用该方法的线程处于事务中，则先暂停当前事务，然户执行该方法；
    <li>&nbsp;PROPAGATION_REQUIRED：要求在事务环境中执行该方法，如果当前线程已处于事务中，则直接调用，然后执行该方法；
    <li>&nbsp;PROPAGATION_REQUIRES_NEW：该方法要求有一个在新的事务环境中执行，如果当前线程已处于事务中，先暂停当前事务，启动新事务后执行该方法，如果当前调用线程不处在事务中，则启动新的事务方法后执行方法；
    <li>&nbsp;PROPAGATION_SUPPORTS：如果当前执行线程处于事务中，则执行当前事务，否则不使用事务。 </li>
</ol>
<img src ="http://www.blogjava.net/keweibo/aggbug/145987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-09-17 22:15 <a href="http://www.blogjava.net/keweibo/articles/145987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenSessionInView模式运用 </title><link>http://www.blogjava.net/keweibo/articles/145977.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 17 Sep 2007 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/145977.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/145977.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/145977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/145977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/145977.html</trackback:ping><description><![CDATA[<div class="postTitle"><a id="viewpost1_TitleUrl" href="http://www.blogjava.net/ctguzhupan/archive/2006/09/20/70805.html">Spring+Hibernate中OpenSessionInView模式运用</a> </div>
<div class="postText">配置OpenSessionInView模式也很简单，Spring提供了两种方式：<br />
<br />
1、过滤流Filter <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"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;OpenSessionInViewFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt; </span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;OpenSessionInViewFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*.do</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
2、Interceptor <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"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;SimpleUrlHandlerMapping&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="simpleUrlMapping"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="interceptors"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="openSessionInViewInterceptor"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="mappings"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">props</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;。。。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">props</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;===========&nbsp;<font color="#006400">openSessionInViewInterceptor</font>&nbsp;==============</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="openSessionInViewInterceptor"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="sessionFactory"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="sessionFactory"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
推荐用第二种方式</div>
 <img src ="http://www.blogjava.net/keweibo/aggbug/145977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-09-17 21:31 <a href="http://www.blogjava.net/keweibo/articles/145977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.springframework.web.filter.CharacterEncodingFilter</title><link>http://www.blogjava.net/keweibo/articles/144650.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 12 Sep 2007 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/144650.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/144650.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/144650.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/144650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/144650.html</trackback:ping><description><![CDATA[web.xml文件<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />
&nbsp;version="2.4"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;CharacterEncodingFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.web.filter.CharacterEncodingFilter<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;GB2312&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;forceEncoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filter&gt;<br />
&lt;!-- 要过滤得类型 --&gt;<br />
　　&lt;filter-mapping&gt;<br />
　　&lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;<br />
　　&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />
　　&lt;/filter-mapping&gt;<br />
<br />
&lt;/web-app&gt;<br />
<dl>
<dt>
<pre>public class <strong>CharacterEncodingFilter</strong><dt>extends <a title="class in org.springframework.web.filter" href="http://www.springframework.org/docs/api/org/springframework/web/filter/OncePerRequestFilter.html">OncePerRequestFilter</a></dt></pre>
</dt></dl>
<pre></pre>
<p>Servlet 2.3/2.4 Filter that allows one to specify a character encoding for requests. This is useful because current browsers typically do not set a character encoding even if specified in the HTML page or form.
<p>This filter can either apply its encoding if the request does not already specify an encoding, or enforce this filter's encoding in any case ("forceEncoding"="true"). In the latter case, the encoding will also be applied as default response encoding on Servlet 2.4+ containers (although this will usually be overridden by a full content type set in the view). </p>
<img src ="http://www.blogjava.net/keweibo/aggbug/144650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-09-12 23:27 <a href="http://www.blogjava.net/keweibo/articles/144650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 使用java的代理机制进行日志输出</title><link>http://www.blogjava.net/keweibo/articles/139260.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 25 Aug 2007 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/139260.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/139260.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/139260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/139260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/139260.html</trackback:ping><description><![CDATA[<p><span style="COLOR: red"><em><strong>&nbsp;通过面向接口编程实现日志输出</strong></em></span><br>(1)建立一个接口TimeBookInterface,代码如下<br>/*******TimeBookInterface.java********/<br>package com.gc.dao;</p>
<p>public interface TimeBookInterface{</p>
<p>&nbsp;public void doAuditing(String name);<br>}<br>(2)编写接口实现类,代码如下<br>/*******TimeBook.java********/<br>package com.gc.dao.impl;</p>
<p>public class TimeBook implements TimeBookInterface{</p>
<p>&nbsp;public void doAuditing(String name){<br>&nbsp;<br>&nbsp;&nbsp;//审查数据的相关程序<br>&nbsp;&nbsp;......<br>&nbsp;}<br>}<br>(3)编写一个代理类,用来实现日志输出,其代码如下<br>/*******TimeBookProxy.java********/<br>package com.gc.dao.impl;</p>
<p>import org.apache.log4j.Level;<br>import org.apache.log4j.Logger;</p>
<p>public class TimeBookProxy{</p>
<p>&nbsp;private Logger logger = Logger.getLogger(this.getClass().getName());<br>&nbsp;private TimeBookInterface timeBookInterface;<br>&nbsp;public TimeBookProxy(TimeBookInterface timeBookInterface){<br>&nbsp;<br>&nbsp;&nbsp;this.timeBookInterface = timeBookInterface;<br>&nbsp;}<br>&nbsp;//实际业务处理<br>&nbsp;public void doAuditing(String name){<br>&nbsp;<br>&nbsp;&nbsp;logger.log(Level.INFO,name+"开始审核数据");<br>&nbsp;&nbsp;timeBookInterface.doAuditing(name);<br>&nbsp;&nbsp;logger.log(Level.INFO,name+"审核数据结束");<br>&nbsp;}<br>}<br>(4)编写测试代码类<br>......<br>public static void main(String[] args){<br>//针对接口进行编程<br>&nbsp;TimeBookProxy timeBookProxy = new TimeBookProxy(new TimeBook());<br>&nbsp;timeBookProxy.doAuditing("张三");<br>}</p>
<p><span style="COLOR: red"><strong><em>&nbsp;使用java的代理机制进行日志输出</em></strong></span><br>(1)编写一个日志信息的代理类LogProxy,这个代理类实现了接口InvocationHandler,<br>&nbsp;可以对任何接口实现日志信息的输出.其代理如下<br>package com.gc.dao;</p>
<p>import java.lang.reflect.InvocationHandler;<br>import java.lang.reflect.Method;<br>import java.lang.reflect.Proxy;</p>
<p>import org.apache.log4j.Level;<br>import org.apache.log4j.Logger;<br>//代理类实现了接口InvocationHandler<br>public class LogProxy implements InvocationHandler{</p>
<p>&nbsp;private Logger logger = Logger.getLogger(this.getClass().getName());<br>&nbsp;private Object delegate;<br>&nbsp;//绑定对象<br>&nbsp;public Object bing(Object delegate){<br>&nbsp;&nbsp;this.delegate = delegate;<br>&nbsp;&nbsp;return Proxy.new ProxyInstance(delegate.getClass().getClassLoader(),delegate.getClass().getInterfaces(),this);<br>&nbsp;}<br>&nbsp;//针对接口编程<br>&nbsp;public Object invoke(Object proxy,Mehtod method,Object[] args)throws Throwable{<br>&nbsp;<br>&nbsp;&nbsp;Object result = null;<br>&nbsp;&nbsp;try{<br>&nbsp;&nbsp;//在方法调用前后进行日志输出<br>&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,args[0] + "开始审核数据");<br>&nbsp;&nbsp;&nbsp;result = method.invoke(delegate,args);<br>&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,args[0] + "审核数据结束");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;catch(Exception e){<br>&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,e.toString());<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return result;<br>&nbsp;}<br>}<br>(2)建立一个接口TimeBookInterface,代码如下<br>/*******TimeBookInterface.java********/<br>package com.gc.dao;</p>
<p>public interface TimeBookInterface{</p>
<p>&nbsp;public void doAuditing(String name);<br>}<br>(3)编写接口实现类,代码如下<br>/*******TimeBook.java********/<br>package com.gc.dao.impl;</p>
<p>public class TimeBook implements TimeBookInterface{</p>
<p>&nbsp;public void doAuditing(String name){<br>&nbsp;<br>&nbsp;&nbsp;//审查数据的相关程序<br>&nbsp;&nbsp;......<br>&nbsp;}<br>}<br>(4)编写测试代码类<br>......<br>public static void main(String[] args){<br>&nbsp;//实现了对日志类的重用<br>&nbsp;LogProxy logProxy = new LogProxy();<br>&nbsp;TimeBookInterface timeBookInterface = (TimeBookInterface)logProxy.bind(new TimeBook());<br>&nbsp;timeBookProxy.doAuditing("张三");<br>}<br>代码来自spring从入门到精通一书</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/139260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-08-25 14:21 <a href="http://www.blogjava.net/keweibo/articles/139260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 集合注入方式</title><link>http://www.blogjava.net/keweibo/articles/139118.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 24 Aug 2007 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/139118.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/139118.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/139118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/139118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/139118.html</trackback:ping><description><![CDATA[<p>spring 集合注入方式</p>
<p>List<br>&nbsp;&lt;bean id="helloWorld" class="..."&gt;<br>&nbsp;&nbsp;&lt;property name="message"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;list&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;one&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;two&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;three&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>Set<br>&nbsp;&lt;bean id="helloWorld" class="..."&gt;<br>&nbsp;&nbsp;&lt;property name="message"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;set&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;one&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;two&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;three&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/set&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>Map<br>&nbsp;&lt;bean id="helloWorld" class="..."&gt;<br>&nbsp;&nbsp;&lt;property name="message"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;map&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry key="keytwo"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;one&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/entry&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry key="keytwo"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;two&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/entry&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/map&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>Properties<br>&nbsp;&lt;bean id="helloWorld" class="..."&gt;<br>&nbsp;&nbsp;&lt;property name="message"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;props&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="keyone"&gt;one&lt;/prop&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="keytwo"&gt;two&lt;/prop&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/139118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-08-24 15:51 <a href="http://www.blogjava.net/keweibo/articles/139118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring中bean的高级属性之list, set, map以及props元素(含举例) (转) </title><link>http://www.blogjava.net/keweibo/articles/138216.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 20 Aug 2007 12:09:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/138216.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/138216.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/138216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/138216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/138216.html</trackback:ping><description><![CDATA[&nbsp;list, set, map和props元素分别用来设置类型为List，Set，Map和Propertis的属性值。分别用来为bean传入集合值。<br>&nbsp;&nbsp; 对应的spring的配置文件举例如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #0000ff">&lt;?</span> <span style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="gb2312"</span> <span style="COLOR: #0000ff">?&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #0000ff">&lt;!</span> <span style="COLOR: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING//DTD&nbsp;BEAN//EN"<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">beans</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">bean&nbsp;</span> <span style="COLOR: #ff0000">id</span> <span style="COLOR: #0000ff">="chinese"</span> <span style="COLOR: #ff0000">&nbsp;class</span> <span style="COLOR: #0000ff">="Chinese"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">property&nbsp;</span> <span style="COLOR: #ff0000">name</span> <span style="COLOR: #0000ff">="friends"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">list</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">list</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">property</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">property&nbsp;</span> <span style="COLOR: #ff0000">name</span> <span style="COLOR: #0000ff">="score"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">map</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">entry&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="数学"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&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">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">60</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">entry</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">entry&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="英语"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&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">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">70</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">entry</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">entry&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="语文"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&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">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">80</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">entry</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">entry&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="物理"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&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">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">90</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">entry</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">entry&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="化学"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&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">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">95</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">entry</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">map</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">property</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">property&nbsp;</span> <span style="COLOR: #ff0000">name</span> <span style="COLOR: #0000ff">="basicInfo"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">props</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">prop&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="身高"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">165</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">prop</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">prop&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="体重"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">45kg</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">prop</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">prop&nbsp;</span> <span style="COLOR: #ff0000">key</span> <span style="COLOR: #0000ff">="学历"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">大学本科</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">prop</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">props</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">property</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">property&nbsp;</span> <span style="COLOR: #ff0000">name</span> <span style="COLOR: #0000ff">="interest"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">set</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">value</span> <span style="COLOR: #0000ff">&gt;</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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">set</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">property</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">bean</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">beans</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span></div>
<p><br>&nbsp; 对应的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"><img id=Codehighlighter1_39_247_Open_Image onclick="this.style.display='none'; Codehighlighter1_39_247_Open_Text.style.display='none'; Codehighlighter1_39_247_Closed_Image.style.display='inline'; Codehighlighter1_39_247_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_39_247_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_247_Closed_Text.style.display='none'; Codehighlighter1_39_247_Open_Image.style.display='inline'; Codehighlighter1_39_247_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">&nbsp;Chinese&nbsp;</span> <span style="COLOR: #0000ff">implements</span> <span style="COLOR: #000000">&nbsp;People&nbsp;</span> <span id=Codehighlighter1_39_247_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_39_247_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000">&nbsp;List&nbsp;friends&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000">&nbsp;ArrayList();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000">&nbsp;Map&nbsp;score&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000">&nbsp;HashMap();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000">&nbsp;Properties&nbsp;basicInfo&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000">&nbsp;Properties();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000">&nbsp;Set&nbsp;interest&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000">&nbsp;HashSet();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">省略对应set方法</span> <span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top> </span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif">.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span> </span></div>
<img src ="http://www.blogjava.net/keweibo/aggbug/138216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-08-20 20:09 <a href="http://www.blogjava.net/keweibo/articles/138216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Timer实现定时器</title><link>http://www.blogjava.net/keweibo/articles/137976.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 19 Aug 2007 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/137976.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/137976.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/137976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/137976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/137976.html</trackback:ping><description><![CDATA[<p>利用spring实现定时器的开发过程包括以下三个步骤:<br>(1)创建定时任务类.<br>(2)注册定时任务类,并配置任务计划和任务调度器.<br>(3)在WEB项目中启动定时服务.<br>------------------------------------------------------------------------------------------------------------<br>例子(定时任务类)<br>package dgut.ke.timer;</p>
<p>import java.util.TimerTask;</p>
<p>public class MainTask extends TimerTask {</p>
<p>&nbsp;@Override<br>&nbsp;public void run() {<br>&nbsp;&nbsp;// TODO Auto-generated method stub<br>&nbsp;&nbsp;System.out.println("--------------执行定时任务---------------");<br>&nbsp;}</p>
<p>}<br>------------------------------------------------------------------------------------------------------------<br>文件/WEB-INF/TimerConfig.xml<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>" &gt;<br>&lt;beans&gt;<br>&nbsp;&lt;!-- 注册定时执行实体 --&gt;<br>&nbsp;&lt;bean id="mainTask" class="dgut.ke.timer.MainTask"&gt;&lt;/bean&gt;<br>&nbsp;&lt;!-- 注册定时信息 --&gt;<br>&nbsp;&lt;bean id="stTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"&gt;<br>&nbsp;&nbsp;&lt;!-- 首次执行任务前需要等待2秒钟 --&gt;<br>&nbsp;&nbsp;&lt;property name="delay"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;2000&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;!-- 任务执行的周期 --&gt;<br>&nbsp;&nbsp;&lt;property name="period"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;4000&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;!-- 具体的执行任务 --&gt;<br>&nbsp;&nbsp;&lt;property name="timerTask"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;ref local="mainTask"/&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&nbsp;&lt;!-- 配置任务调度器 --&gt;<br>&nbsp;&lt;bean id="timeFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"&gt;<br>&nbsp;&nbsp;&lt;!-- 注入定时器列表 --&gt;<br>&nbsp;&nbsp;&lt;property name="scheduledTimerTasks"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;list&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref local="stTask"/&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&lt;/beans&gt;<br>------------------------------------------------------------------------------------------------------------</p>
文件web.xml<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;web-app version="2.4" <br>&nbsp;xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" <br>&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" <br>&nbsp;xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <br>&nbsp;<a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>"&gt;<br>&nbsp; <br>&nbsp; &lt;!-- 启动定时服务 --&gt;<br>&nbsp; &lt;context-param&gt;<br>&nbsp; &nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br>&nbsp; &nbsp;&lt;param-value&gt;/WEB-INF/TimerConfig.xml&lt;/param-value&gt;<br>&nbsp; &lt;/context-param&gt;<br>&nbsp; &lt;listener&gt;<br>&nbsp; &nbsp;&lt;listener-class&gt;<br>&nbsp; &nbsp;&nbsp;org.springframework.web.context.ContextLoaderListener<br>&nbsp; &nbsp;&lt;/listener-class&gt;<br>&nbsp; &lt;/listener&gt;<br>&lt;/web-app&gt;
<img src ="http://www.blogjava.net/keweibo/aggbug/137976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-08-19 20:11 <a href="http://www.blogjava.net/keweibo/articles/137976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>拦截器</title><link>http://www.blogjava.net/keweibo/articles/137948.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 19 Aug 2007 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/137948.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/137948.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/137948.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/137948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/137948.html</trackback:ping><description><![CDATA[<p>在映射请求中添加一个拦截器,自定义拦截器必须实现org.springframework.web.servlet.HandlerInterceptor接口。<br>HandlerInterceptor的示例代码如下：<br>public interface HandlerInterceptor<br>{<br>&nbsp;&nbsp;&nbsp;//在处理器执行前调用<br>boolean preHandle(HttpServletRequest request,&nbsp;HttpServletResponse response,&nbsp;&nbsp;&nbsp;Object handler)&nbsp;throws&nbsp;Exception;<br><br>&nbsp;&nbsp;&nbsp;//在处理器执行后调用<br>void postHandle(HttpServletRequest request,&nbsp;HttpServletResponse response,&nbsp;&nbsp;&nbsp;Object handler,&nbsp;&nbsp;&nbsp;ModelAndView modelAndView )&nbsp;throws&nbsp;Exception;<br>&nbsp;&nbsp;&nbsp;//在整个请求处理完后调用<br>void afterCompletion(HttpServletRequest request,&nbsp;HttpServletResponse response,&nbsp;&nbsp;&nbsp;Object handler,&nbsp;&nbsp;&nbsp;Exception&nbsp;&nbsp;&nbsp;&nbsp;ex)&nbsp;throws&nbsp;Exception;<br>}<br>----------------------------------------------------------------------------------------------------------------------------<br>文件NotLeaveWord.java<br>package dgut.ke.interceptor;</p>
<p>import java.util.Calendar;</p>
<p>import javax.servlet.RequestDispatcher;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;</p>
<p>import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;</p>
<p>public class NotLeaveWord extends HandlerInterceptorAdapter <br>{<br>&nbsp;private int startTime;<br>&nbsp;private int endTime;<br>&nbsp;private String interceptorPage;<br>&nbsp;&nbsp;<br>&nbsp;/*通过依赖注入*/<br>&nbsp;public void setStartTime(int startTime) {<br>&nbsp;&nbsp;this.startTime = startTime;<br>&nbsp;}<br>&nbsp;public void setEndTime(int endTime) {<br>&nbsp;&nbsp;this.endTime = endTime;<br>&nbsp;}<br>&nbsp;public void setInterceptorPage(String interceptorPage) {<br>&nbsp;&nbsp;this.interceptorPage = interceptorPage;<br>&nbsp;}<br>&nbsp;public int getStartTime() {<br>&nbsp;&nbsp;return startTime;<br>&nbsp;}<br>&nbsp;public int getEndTime() {<br>&nbsp;&nbsp;return endTime;<br>&nbsp;}<br>&nbsp;public String getInterceptorPage() {<br>&nbsp;&nbsp;return interceptorPage;<br>&nbsp;}<br>&nbsp;/*进行拦截处理*/<br>&nbsp;public boolean preHandle(HttpServletRequest request,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse response,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object handler)throws Exception<br>&nbsp;{<br>&nbsp;&nbsp;Calendar cal = Calendar.getInstance();<br>&nbsp;&nbsp;int hour = cal.get(java.util.Calendar.HOUR_OF_DAY);<br>&nbsp;&nbsp;if( hour &gt; startTime &amp;&amp; hour &lt; endTime)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;request.setAttribute("startTime", this.getStartTime());<br>&nbsp;&nbsp;&nbsp;request.setAttribute("endTime", this.getEndTime());<br>&nbsp;&nbsp;&nbsp;RequestDispatcher rd = request.getRequestDispatcher(this.getInterceptorPage());<br>&nbsp;&nbsp;&nbsp;rd.forward(request, response);<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return true ;<br>&nbsp;&nbsp;}&nbsp;<br>&nbsp;}<br>&nbsp;<br>}<br>-----------------------------------------------------------------------------------------------------------------</p>
文件dispatcherServlet-servlet.xml<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>" &gt;<br>&lt;beans&gt;<br>&lt;!-- 定义映射 --&gt;<br>&nbsp;&lt;bean id="urlMapping"<br>&nbsp;&nbsp;class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"<br>&nbsp;&nbsp;abstract="false" singleton="true" lazy-init="default"<br>&nbsp;&nbsp;autowire="default" dependency-check="default"&gt;<br>&nbsp;&nbsp;&lt;!-- 设置拦截器 --&gt;<br>&nbsp;&nbsp;&lt;property name="interceptors"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;list&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref local="notLeaveWord"/&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="mappings"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;props&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="helloWorld.do"&gt;helloWorld&lt;/prop&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&lt;!-- 定义视图 --&gt;<br>&nbsp;&lt;bean id="viewResolver"<br>&nbsp;&nbsp;class="org.springframework.web.servlet.view.InternalResourceViewResolver"<br>&nbsp;&nbsp;abstract="false" singleton="true" lazy-init="default"<br>&nbsp;&nbsp;autowire="default" dependency-check="default"&gt;<br>&nbsp;&nbsp;&lt;property name="viewClass"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;<br>&nbsp;&nbsp;&nbsp;org.springframework.web.servlet.view.JstlView<br>&nbsp;&nbsp;&nbsp;&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;!-- 定义jsp所在的目录 --&gt;<br>&nbsp;&nbsp;&lt;property name="prefix"&gt;&lt;value&gt;/&lt;/value&gt;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="suffix"&gt;&lt;value&gt;.jsp&lt;/value&gt;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&lt;!-- 定义控制器 --&gt;<br>&nbsp;&lt;bean id="helloWorld" class="dgut.ke.action.HelloWorld"<br>&nbsp;&nbsp;abstract="false" singleton="true" lazy-init="default"<br>&nbsp;&nbsp;autowire="default" dependency-check="default"&gt;<br>&nbsp;&nbsp;&lt;property name="helloWorld"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;Spring MVC 例子&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="viewPage"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;index&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&lt;!-- 拦截器设置 --&gt;<br>&nbsp;&lt;bean id="notLeaveWord" class="dgut.ke.interceptor.NotLeaveWord"<br>&nbsp;&nbsp;abstract="false" singleton="true" lazy-init="default"<br>&nbsp;&nbsp;autowire="default" dependency-check="default"&gt;<br>&nbsp;&nbsp;&lt;property name="startTime"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;10&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="endTime"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;20&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="interceptorPage"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;value&gt;outTime.jsp&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&lt;/beans&gt;<br>-------------------------------------------------------------------------------------------------------------<br>文件web.xml<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;web-app version="2.4" <br>&nbsp;xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" <br>&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" <br>&nbsp;xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <br>&nbsp;<a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>"&gt;<br>&nbsp; <br>&nbsp; &lt;servlet&gt;<br>&nbsp; &nbsp;&lt;servlet-name&gt;dispatcherServlet&lt;/servlet-name&gt;<br>&nbsp; &nbsp;&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br>&nbsp; &nbsp;&lt;!-- 初始化参数 --&gt;<br>&nbsp; &nbsp;&lt;init-param&gt;<br>&nbsp; &nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br>&nbsp; &nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/dispatcherServlet-servlet.xml&lt;/param-value&gt;<br>&nbsp; &nbsp;&lt;/init-param&gt;<br>&nbsp; &nbsp;&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br>&nbsp; &lt;/servlet&gt;<br>&nbsp; <br>&nbsp; &lt;servlet-mapping&gt;<br>&nbsp; &nbsp;&lt;servlet-name&gt;dispatcherServlet&lt;/servlet-name&gt;<br>&nbsp; &nbsp;&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br>&nbsp; &lt;/servlet-mapping&gt;<br>&nbsp; <br>&nbsp; &lt;welcome-file-list&gt;<br>&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br>&nbsp; &lt;/welcome-file-list&gt;<br>&lt;/web-app&gt;<br>
<img src ="http://www.blogjava.net/keweibo/aggbug/137948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-08-19 15:46 <a href="http://www.blogjava.net/keweibo/articles/137948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>