﻿<?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-wmcoo-文章分类-Spring</title><link>http://www.blogjava.net/wmcoo/category/46416.html</link><description>岁月神偷</description><language>zh-cn</language><lastBuildDate>Mon, 15 Nov 2010 06:58:58 GMT</lastBuildDate><pubDate>Mon, 15 Nov 2010 06:58:58 GMT</pubDate><ttl>60</ttl><item><title>Java类获取spring 容器的bean</title><link>http://www.blogjava.net/wmcoo/articles/334044.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Sat, 09 Oct 2010 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/334044.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/334044.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/334044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/334044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/334044.html</trackback:ping><description><![CDATA[<div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "></p>
<span style="font-size: 10pt; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "></p>
<span style="font-size: 12pt; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "></p>
<span style="font-size: 14pt; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">常用的5种获取spring 中bean的方式总结：</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">方法一：在初始化时保存ApplicationContext对象<br />
代码：<br />
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");<br />
ac.getBean("beanId");<br />
说明：这种方式适用于采用Spring框架的独立应用程序，需要程序通过配置文件手工初始化Spring的情况。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">方法二：通过Spring提供的工具类获取ApplicationContext对象<br />
代码：<br />
import org.springframework.web.context.support.WebApplicationContextUtils;<br />
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);<br />
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);<br />
ac1.getBean("beanId");<br />
ac2.getBean("beanId");<br />
说明：<br />
这种方式适合于采用Spring框架的B/S系统，通过ServletContext对象获取ApplicationContext对象，然后在通过它获取需要的类实例。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">上面两个工具方式的区别是，前者在获取失败时抛出异常，后者返回null。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">方法三：继承自抽象类ApplicationObjectSupport<br />
说明：抽象类ApplicationObjectSupport提供getApplicationContext()方法，可以方便的获取到ApplicationContext。<br />
Spring初始化时，会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">方法四：继承自抽象类WebApplicationObjectSupport<br />
说明：类似上面方法，调用getWebApplicationContext()获取WebApplicationContext</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">方法五：实现接口ApplicationContextAware<br />
说明：实现该接口的setApplicationContext(ApplicationContext context)方法，并保存ApplicationContext 对象。<br />
Spring初始化时，会通过该方法将ApplicationContext对象注入。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">虽然，spring提供了后三种方法可以实现在普通的类中继承或实现相应的类或接口来获取spring 的ApplicationContext对象，但是在使用是一定要注意实现了这些类或接口的普通java类一定要在Spring 的配置文件application-context.xml文件中进行配置。否则获取的ApplicationContext对象将为null。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">如下是我实现了ApplicationContextAware接口的例子</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">package quartz.util;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">import org.springframework.beans.BeansException;<br />
import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.ApplicationContextAware;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">public class SpringConfigTool implements ApplicationContextAware{//extends ApplicationObjectSupport{<br />
&nbsp;<br />
&nbsp;private static ApplicationContext context = null;<br />
&nbsp;private static SpringConfigTool stools = null;<br />
&nbsp;public synchronized static SpringConfigTool init(){<br />
&nbsp;&nbsp;if(stools == null){<br />
&nbsp;&nbsp;&nbsp;stools = new SpringConfigTool();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return stools;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public void setApplicationContext(ApplicationContext applicationContext)<br />
&nbsp;throws BeansException {<br />
&nbsp;&nbsp;context = applicationContext;<br />
&nbsp;}</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;public synchronized static Object getBean(String beanName) {<br />
&nbsp;&nbsp;return context.getBean(beanName);<br />
&nbsp;}</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">}</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">XML文件中的配置信息</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&lt;bean id="SpringConfigTool" class="quartz.util.SpringConfigTool"&gt;&lt;/bean&gt;<br />
<br />
最后提供一种不依赖于servlet,不需要注入的方式<br />
注意一点，在服务器启动时，Spring容器初始化时，不能通过以下方法获取Spring 容器，如需细节可以观看源码<span  style="font-family: Simsun; line-height: normal; font-size: 13px; ">org.springframework.web.context.ContextLoader</span>
</p>
<fieldset><legend>Title</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.context.ContextLoader;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.context.WebApplicationContext;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;WebApplicationContext&nbsp;wac&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ContextLoader.getCurrentWebApplicationContext();&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;wac.getBean(beanID); &nbsp;</span></div>
</fieldset><br />
<p>&nbsp;</p>
</span>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "></p>
</span>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "></p>
</span>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "></p>
</div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/334044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-09 10:18 <a href="http://www.blogjava.net/wmcoo/articles/334044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 自定义搜索，注解BEAN</title><link>http://www.blogjava.net/wmcoo/articles/333843.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 06 Oct 2010 12:31:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333843.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333843.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333843.html</trackback:ping><description><![CDATA[<div class="table">
<p class="title"><strong>Filter Types</strong></p>
<div class="table-contents">
<table summary="Filter Types" style="border-collapse: collapse; ">
    <colgroup><col><col><col></colgroup>
    <thead>
        <tr>
            <th>Filter Type</th><th>Example Expression</th><th>Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>annotation</td>
            <td><code class="literal">org.example.SomeAnnotation</code></td>
            <td>An annotation to be present at the type level in target              components.</td>
        </tr>
        <tr>
            <td>assignable</td>
            <td><code class="literal">org.example.SomeClass</code></td>
            <td>A class (or interface) that the target components are              assignable to (extend/implement).</td>
        </tr>
        <tr>
            <td>aspectj</td>
            <td><code class="literal">org.example..*Service+</code></td>
            <td>An AspectJ type expression to be matched by the target              components.</td>
        </tr>
        <tr>
            <td>regex</td>
            <td><code class="literal">org\.example\.Default.*</code></td>
            <td>A regex expression to be matched by the target components              class names.</td>
        </tr>
        <tr>
            <td>custom</td>
            <td><code class="literal">org.example.MyTypeFilter</code></td>
            <td>A custom implementation of the              <code class="interfacename">org.springframework.core.type              .TypeFilter</code> interface.</td>
        </tr>
    </tbody>
</table>
</div>
</div>
<div><fieldset><legend>xml</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context:component-scan&nbsp;</span><span style="color: #FF0000; ">base-package</span><span style="color: #0000FF; ">="org.example"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context:include-filter&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="regex"</span><span style="color: #FF0000; ">&nbsp;expression</span><span style="color: #0000FF; ">=".*Stub.*Repository"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context:exclude-filter&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="annotation"</span><span style="color: #FF0000; "><br />
</span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #FF0000; ">&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;&nbsp;&nbsp;expression</span><span style="color: #0000FF; ">="org.springframework.stereotype.Repository"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">context:component-scan</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">8</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">9</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div>
</fieldset><br />
</div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/333843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-06 20:31 <a href="http://www.blogjava.net/wmcoo/articles/333843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 注解@Transactional</title><link>http://www.blogjava.net/wmcoo/articles/333840.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 06 Oct 2010 12:03:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333840.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333840.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333840.html</trackback:ping><description><![CDATA[<div>在使用@Transactional注解前需于下配置,两种方式都可以。<br />
<fieldset><legend>xml</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="org.springframework.transaction.aspectj.AnnotationTransactionAspect"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory-method</span><span style="color: #0000FF; ">="aspectOf"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&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; ">="transactionManager"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="transactionManager"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span></div>
</fieldset><fieldset><legend>JAVA</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">@Repository<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;TxService&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;DataSourceTransactionManager&nbsp;txManager;<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Resource(name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">dataSource</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setDataSource(DataSource&nbsp;dataSource)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txManager</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DataSourceTransactionManager(dataSource);<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;configure&nbsp;the&nbsp;AnnotationTransactionAspect&nbsp;to&nbsp;use&nbsp;it;&nbsp;this&nbsp;must&nbsp;be&nbsp;done&nbsp;before&nbsp;executing&nbsp;any&nbsp;transactional&nbsp;methods</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AnnotationTransactionAspect.aspectOf().setTransactionManager(txManager);&nbsp;<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;DataSourceTransactionManager&nbsp;getTxManager()&nbsp;{<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;txManager;<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">}</span></div>
</fieldset><br />
@Transactional使用实例<br />
<span style="font-family: Arial, sans-serif; ">
<pre class="programlisting" style="line-height: 1; color: black; font-size: 10pt; padding-top: 7pt; padding-right: 3pt; padding-bottom: 7pt; padding-left: 3pt; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eeeeee; clear: both; background-position: initial initial; background-repeat: initial initial; "><span class="hl-comment" style="color: #3f5f5f; font-style: italic; ">  // these settings have precedence for this method</span>
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
<span class="hl-keyword" style="color: #7f0055; font-weight: bold; ">public</span> <span class="hl-keyword" style="color: #7f0055; font-weight: bold; ">void</span> updateFoo(Foo foo) {
<span class="hl-comment" style="color: #3f5f5f; font-style: italic; ">// do something</span>
}</pre>
</span></div>
<br />
<div class="table" style="margin-top: 1em; margin-right: 1em; margin-bottom: 1em; margin-left: 1em; padding-top: 0.5em; padding-right: 0.5em; padding-bottom: 0.5em; padding-left: 0.5em; text-align: center; font-family: Arial, sans-serif; ">
<p class="title" style="text-align: justify; "><strong>&nbsp;<code class="interfacename">@Transactional</code>&nbsp;可配置属性</strong></p>
<div class="table-contents" style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0pt; ">
<table summary="@Transactional
    properties" style="display: table; width: 1032px; border-collapse: collapse; ">
    <colgroup><col><col><col></colgroup>
    <thead>
        <tr>
            <th>Property</th><th>Type</th><th>Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">value</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">String</td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional qualifier specifying the transaction manager to be used.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">propagation</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">enum:&nbsp;<code class="classname">Propagation</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional propagation setting.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">isolation</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">enum:&nbsp;<code class="classname">Isolation</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional isolation level.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">readOnly</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">boolean</td>
            <td style="padding-left: 7px; padding-right: 7px; ">Read/write vs. read-only transaction</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">timeout</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">int (in seconds granularity)</td>
            <td style="padding-left: 7px; padding-right: 7px; ">Transaction timeout.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">rollbackFor</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Array of&nbsp;<code class="classname">Class</code>&nbsp;objects, which must be derived from<code class="classname">Throwable.</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional array of exception classes that&nbsp;<span class="bold"><strong>must</strong></span>&nbsp;cause rollback.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">rollbackForClassname</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Array of class names. Classes must be derived from<code class="classname">Throwable.</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional array of names of exception classes that&nbsp;<span class="bold"><strong>must</strong></span>&nbsp;cause rollback.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">noRollbackFor</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Array of&nbsp;<code class="classname">Class</code>&nbsp;objects, which must be derived from<code class="classname">Throwable.</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional array of exception classes that&nbsp;<span class="bold"><strong>must not</strong></span>&nbsp;cause rollback.</td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px; "><code class="literal">noRollbackForClassname</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Array of&nbsp;<code class="classname">String</code>&nbsp;class names, which must be derived from<code class="classname">Throwable.</code></td>
            <td style="padding-left: 7px; padding-right: 7px; ">Optional array of names of exception classes that&nbsp;<span class="bold"><strong>must not</strong></span>cause rollback.<br />
            <font face="Simsun"><span style="border-collapse: separate;"><font face="Arial, sans-serif"><span style="border-collapse: collapse;"><br />
            </span></font></span></font></td>
        </tr>
    </tbody>
</table>
</div>
</div>
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-06 20:03 <a href="http://www.blogjava.net/wmcoo/articles/333840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 声明式事务，propagation属性列表</title><link>http://www.blogjava.net/wmcoo/articles/333831.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 06 Oct 2010 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333831.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333831.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333831.html</trackback:ping><description><![CDATA[<div>
<p style="margin:0cm;margin-bottom:.0001pt;line-height:13.5pt"><strong></strong><span style="color: red; "><strong><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">TransactionDefinition</span></strong><strong style="mso-bidi-font-weight:normal"><span style="font-size:10.5pt;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">接口中定义，共有</span></strong><strong style="mso-bidi-font-weight:normal"><span lang="EN-US" style="font-size:10.5pt;
font-family:Arial;color:#383838">7</span></strong><strong style="mso-bidi-font-weight:
normal"><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">种选项可用：</span></strong></span><strong style="mso-bidi-font-weight:
normal"></strong><strong style="mso-bidi-font-weight:normal"><span lang="EN-US" style="font-size:10.5pt;
font-family:Arial;color:#383838"><o:p></o:p></span></strong></p>
<p style="margin:0cm;margin-bottom:.0001pt;line-height:13.5pt"><strong><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838;font-weight:
normal;mso-bidi-font-weight:bold">PROPAGATION_REQUIRED</span></strong><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:#383838">：支持当前事务，如果当前没有事务，就新建一个事务。这是最常见的选择。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
<strong><span style="font-family:Arial;font-weight:normal;mso-bidi-font-weight:
bold">PROPAGATION_SUPPORTS</span></strong></span><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:#383838">：支持当前事务，如果当前没有事务，就以非事务方式执行。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
<strong><span style="font-family:Arial;font-weight:normal;mso-bidi-font-weight:
bold">PROPAGATION_MANDATORY</span></strong></span><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:#383838">：支持当前事务，如果当前没有事务，就抛出异常。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
<strong><span style="font-family:Arial;font-weight:normal;mso-bidi-font-weight:
bold">PROPAGATION_REQUIRES_NEW</span></strong></span><span style="font-size:
10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:#383838">：新建事务，如果当前存在事务，把当前事务挂起。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
<strong><span style="font-family:Arial;font-weight:normal;mso-bidi-font-weight:
bold">PROPAGATION_NOT_SUPPORTED</span></strong></span><span style="font-size:
10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:#383838">：以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
<strong><span style="font-family:Arial;font-weight:normal;mso-bidi-font-weight:
bold">PROPAGATION_NEVER</span></strong></span><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:#383838">：以非事务方式执行，如果当前存在事务，则抛出异常。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
<strong><span style="font-family:Arial;font-weight:normal;mso-bidi-font-weight:
bold">PROPAGATION_NESTED</span></strong></span><span style="font-size:10.5pt;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:#383838">：支持当前事务，如果当前事务存在，则执行一个嵌套事务（还不是太明白），如果当前没有事务，就新建一个事务。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;line-height:13.5pt"><strong style="mso-bidi-font-weight:normal"><span lang="EN-US" style="font-size:10.5pt;
font-family:Arial;color:#383838">TransactionDefinition</span></strong><strong style="mso-bidi-font-weight:normal"><span style="font-size:10.5pt;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">中定义的</span></strong><strong><span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838;font-weight:normal;mso-bidi-font-weight:
bold">隔离（</span></strong><strong><span lang="EN-US" style="font-size:10.5pt;
font-family:Arial;color:#383838;font-weight:normal;mso-bidi-font-weight:bold">isolation</span></strong><strong><span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838;font-weight:normal;mso-bidi-font-weight:
bold">）</span></strong><strong style="mso-bidi-font-weight:normal"><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:#383838">级别，有</span></strong><strong style="mso-bidi-font-weight:
normal"><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">5</span></strong><strong style="mso-bidi-font-weight:normal"><span style="font-size:10.5pt;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">种：</span></strong><strong style="mso-bidi-font-weight:normal"><span lang="EN-US" style="font-size:10.5pt;
font-family:Arial;color:#383838"><o:p></o:p></span></strong></p>
<p style="margin:0cm;margin-bottom:.0001pt;line-height:13.5pt"><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">1
ISOLATION_DEFAULT </span><span style="font-size:10.5pt;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">默认的隔离级别</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">下面几个都是</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"> JDBC isolation levels
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">一一对应：</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
2 ISOLATION_READ_UNCOMMITTED Connection.TRANSACTION_READ_UNCOMMITTED<br />
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">指示防止发生脏读的常量；不可重复读和虚读有可能发生。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
3 ISOLATION_READ_COMMITTED Connection.TRANSACTION_READ_COMMITTED<br />
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">指示可以发生脏读</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"> (dirty
read)</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">、不可重复读和虚读</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"> (phantom
read) </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">的常量。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
4 ISOLATION_REPEATABLE_READ Connection.TRANSACTION_REPEATABLE_READ<br />
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">指示防止发生脏读和不可重复读的常量；虚读有可能发生。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
5 ISOLATION_SERIALIZABLE Connection.TRANSACTION_SERIALIZABLE<br />
</span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">指示防止发生脏读、不可重复读和虚读的常量。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><o:p></o:p></span></p>
<p style="margin:0cm;margin-bottom:.0001pt;line-height:13.5pt"><strong style="mso-bidi-font-weight:normal"><span style="font-size:10.5pt;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">注</span></strong><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:#383838">：</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
</span><strong><span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838;
font-weight:normal;mso-bidi-font-weight:bold">脏读</span></strong><strong><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838;font-weight:
normal;mso-bidi-font-weight:bold"> dirty reads</span></strong><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:#383838">：当事务读取还未被提交的数据时，就会发生这种事件。举例来说：</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">Transaction
1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">修改了一行数据，然后</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 2 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">在</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">还未提交修改操作之前读取了被修改的行。如果</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">回滚了修改操作，那么</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 2 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">读取的数据就可以看作是从未存在过的。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
</span><strong><span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838;
font-weight:normal;mso-bidi-font-weight:bold">不可重复的读</span></strong><strong><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838;font-weight:
normal;mso-bidi-font-weight:bold"> non-repeatable reads</span></strong><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:#383838">：当事务两次读取同一行数据，但每次得到的数据都不一样时，就会发生这种事件。举例来说：</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">Transaction
1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">读取一行数据，然后</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 2 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">修改或删除该行并提交修改操作。当</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">试图重新读取该行时，它就会得到不同的数据值（如果该行被更新）或发现该行不再存在（如果该行被删除）。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><br />
</span><strong><span style="font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838;
font-weight:normal;mso-bidi-font-weight:bold">虚读</span></strong><strong><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838;font-weight:
normal;mso-bidi-font-weight:bold"> phantom read</span></strong><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:#383838">：如果符合搜索条件的一行数据在后面的读取操作中出现，但该行数据却不属于最初的数据，就会发生这种事件。举例来说：</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">Transaction
1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;mso-hansi-font-family:
Arial;mso-bidi-font-family:Arial;color:#383838">读取满足某种搜索条件的一些行，然后</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 2 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">插入了符合</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">的搜索条件的一个新行。如果</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838">
Transaction 1 </span><span style="font-size:10.5pt;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:#383838">重新执行产生原来那些行的查询，就会得到不同的行。</span><span lang="EN-US" style="font-size:10.5pt;font-family:Arial;color:#383838"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size:10.5pt"><o:p>&nbsp;</o:p></span></p>
</div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/333831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-06 18:09 <a href="http://www.blogjava.net/wmcoo/articles/333831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP管理事务</title><link>http://www.blogjava.net/wmcoo/articles/333830.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 06 Oct 2010 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333830.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333830.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333830.html</trackback:ping><description><![CDATA[<div><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">如果要在方法执行前或后或抛出异常后加上一个自己的拦截器，或者一个环绕拦截器，在拦截器中执行一些操作，比如执行一些数据库操作，记录一些信 息，这些操作通过调用一个服务类的方法来执行，这个方法也在spring事务管理拦截器的管理之下，那么这个记录方法需要在另一个事务中进行，而不是与被 拦截方法在同一个事务中，不然如果被拦截方法抛出异常需要回滚时，所作的记录也会被回滚，当然有时候确实需要同时回滚，那就要放在同一个事务中。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">这和自己的拦截器和事务管理的拦截器的执行顺序有一定关系，spring事务管理拦截器是一个环绕通知，在被拦截方法执行前启动事务，执行后完成 事务，如果自己的拦截器被spring事务管理拦截器包围在里面，那么在自己的拦截器运行时，spring已经启动了一个事务，如果你的记录信息方法需要 与被拦截方法同在一个事务中，将你的记录信息方法的事务传播属性设为默认的REQUIRED就可以了；</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">如果你记录信息的方法需要单独的一个事务环境，那就要把事务传播属性设为REQUIRES_NEW了，这样spring事务管理器会新建一个事 务，并且新建一个session连接，因为一个数据库连接不可能同时有两个事务，记录信息完了提交事务并且把新建的session连接关闭，自己的拦截器 退出后继续执行被拦截的方法或它的事务处理。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">相反如果自己的拦截器在spring事务管理拦截器的外面，那么记录信息的方法会在一个单独的事务中执行，并提交，不管它的事务传播属性是 REQUIRES_NEW还是REQUIRED，因为与被拦截方法的事务处理没有交叉，并且可以使用同一个session连接如果是 OpenSessionInViewFilter。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">所以如果记录信息和被拦截方法要在不同事务中执行，分别提交，那么最好将自己的拦截器设在spring事务管理器拦截器的外面；如果需要将记录信 息和被拦截方法在同一个事务中处理，必须将自己的拦截器被包围在spring事务管理拦截器中，并且记录信息方法的事务传播属性为默认的 REQUIRED。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">设置拦截器的执行顺序可以让拦截器处理类实现org.springframework.core.Ordered接口，在spring配置文件的 AOP设置中设定自己的拦截器和spring事务管理拦截器的执行顺序，将自己的拦截的序号排在spring事务管理的前面，就可以将该拦截器放到事务管 理拦截器的外面执行了，对于before通知方式会先于事务管理拦截器执行，对于after returning和after和after throwing通知方式会后于事务管理拦截器的执行，对于arount通知方式会包围事务管理拦截器执行。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">下面是一个异常拦截器的例子。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; "><br />
</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">有位朋友提到在spring异常拦截器中更新数据不能够提交，做了一下测试，测试环境基本是这样：一个用户登录的功能，spring对 service中的每个方法进行事务管理，在用户检测的service方法上同时加上一个异常拦截器，当用户不存在或密码不正确时用户检测方法会抛出异 常，异常拦截器捕获到该异常，同时记录一些日志。</span><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;<br />
<fieldset><legend>spring配置文件相关：</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="transactionManager"</span><span style="color: #FF0000; "><br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.orm.hibernate3.HibernateTransactionManager"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&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;&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&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 />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;事务通知&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tx:advice&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="txAdvice"</span><span style="color: #FF0000; ">&nbsp;transaction-manager</span><span style="color: #0000FF; ">="transactionManager"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tx:attributes</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tx:method&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="get*"</span><span style="color: #FF0000; ">&nbsp;read-only</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tx:method&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="*"</span><span style="color: #FF0000; ">&nbsp;propagation</span><span style="color: #0000FF; ">="REQUIRES_NEW"</span><span style="color: #FF0000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rollback-for</span><span style="color: #0000FF; ">="Exception"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tx:attributes</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tx:advice</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;aop代理设置&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">aop:config&nbsp;</span><span style="color: #FF0000; ">proxy-target-class</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">aop:pointcut&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="txPointcut"</span><span style="color: #FF0000; ">&nbsp;expression</span><span style="color: #0000FF; ">="execution(*&nbsp;com.hbs..*Service.*(..))"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">aop:pointcut&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="logPointcut"</span><span style="color: #FF0000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expression</span><span style="color: #0000FF; ">="execution(*&nbsp;com.hbs.customer..*Service.*(..))"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">aop:advisor&nbsp;</span><span style="color: #FF0000; ">advice-ref</span><span style="color: #0000FF; ">="txAdvice"</span><span style="color: #FF0000; ">&nbsp;pointcut-ref</span><span style="color: #0000FF; ">="txPointcut"</span><span style="color: #FF0000; "><br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order</span><span style="color: #0000FF; ">="1"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">aop:aspect&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="logAspect"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="logInterceptor"</span><span style="color: #FF0000; ">&nbsp;order</span><span style="color: #0000FF; ">="2"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">aop:after-throwing&nbsp;</span><span style="color: #FF0000; ">pointcut-ref</span><span style="color: #0000FF; ">="logPointcut"</span><span style="color: #FF0000; "><br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method</span><span style="color: #0000FF; ">="serviceIntercept"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">aop:aspect</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">aop:config</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;log拦截器类&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&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; ">="logInterceptor"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="com.hbs.eventlog.EventLogInterceptor"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="service"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="logService"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&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 />
</span><span style="color: #008080; ">32</span>&nbsp;</div>
<br />
</fieldset></span>
<fieldset><legend><span style="font-family: Arial, sans-serif, Helvetica, Tahoma; line-height: 24px; ">&nbsp;拦截器类：</span></legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;EventLogInterceptor&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;Ordered&nbsp;{&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;order&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;EventLogService&nbsp;service;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Object&nbsp;serviceIntercept(ProceedingJoinPoint&nbsp;point)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Throwable{&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(point&nbsp;</span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; ">&nbsp;MethodInvocationProceedingJoinPoint){&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MethodInvocationProceedingJoinPoint&nbsp;mpoint&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(MethodInvocationProceedingJoinPoint)point;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">记录日志开始</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.eventLog();&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">记录日志结束</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(Exception&nbsp;ex)&nbsp;{&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setOrder(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;order){&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.order&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;order;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getOrder()&nbsp;{&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;order;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;EventLogService&nbsp;getService()&nbsp;{&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;service;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setService(EventLogService&nbsp;service)&nbsp;{&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.service&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;service;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">} &nbsp;</span></div>
</fieldset><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><span style="font-size: medium; ">Service方法中的事务传播属性都设为要求新建事务，spring事务管理切面拦截器的order设为1，而log拦截器的order设为2，这意味 着这两个要同时执行时，先执行事务拦截器，后执行log拦截器，由于事务管理是一个环绕通知（around），实际上是log拦截器被包围在事务管理拦截 器中。&nbsp;<br />
</span></span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><span style="font-size: medium; "><br />
从中可以看出，log异常拦截器在用户登录的事务回滚之前截获异常，在记录日志时，日志记录的service方法也在spring的事务管理之 下，用户登录的事务还没有结束，根据REQUIRES_NEW特性，spring会新开一个事务，这时原来的数据库连接已经在一个事务中，一个连接不可能 同时有两个事务，所以同时新创建一个session连接（虽然我使用了OpenSessionInViewFilter，并且session是单例的）， 日志记录就在新建的事务和session中进行，完了提交，并且会把新建的session连接关闭。&nbsp;<br />
然后继续进行被中断的用户登录的事务管理操作，由于抛异常spring将用户登录的事务回滚。&nbsp;<br />
这样能够实现预想的功能，但是如果我去掉指定的REQUIRES_NEW，那么log记录的操作会继续在用户登录的事务中进行，最后会被一起回滚。&nbsp;<br />
<br />
如果把事务管理的order设为2，log拦截器的order设为1，也就是log拦截器在事务管理拦截器的外面，会在事务管理拦截器前后执行完了再执行log的异常拦截器。<br />
</span></span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><span style="font-size: medium; "><br />
可以看出，用户登录的事务和日志记录的事务是前后两个不相关的事务，并且在日志记录事务中并不需要新建session连接，而是直接用在 OpenSessionInViewFilter中创建的session。实际上这时也并不需要将propagation设为REQUIRES_NEW， 使用默认的REQUIRES也照样能够正常工作。&nbsp;<br />
<br />
所以应该将该异常拦截器设在事务管理拦截器的外面，即使用Order接口排在前面。</span></span></div>
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-06 18:04 <a href="http://www.blogjava.net/wmcoo/articles/333830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC 拦截器</title><link>http://www.blogjava.net/wmcoo/articles/333752.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Mon, 04 Oct 2010 17:00:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333752.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333752.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333752.html</trackback:ping><description><![CDATA[<br />
<div>Controller层的拦截器继承于HandlerInterceptorAdapter<br />
<br />
<fieldset><legend>HandlerInterceptorAdapter.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;HandlerInterceptorAdapter&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;HandlerInterceptor&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;implementation&nbsp;always&nbsp;returns&nbsp;&lt;code&gt;true&lt;/code&gt;.<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;preHandle(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler)<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;implementation&nbsp;is&nbsp;empty.<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;postHandle(<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler,&nbsp;ModelAndView&nbsp;modelAndView)<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;implementation&nbsp;is&nbsp;empty.<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;afterCompletion(<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler,&nbsp;Exception&nbsp;ex)<br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">}</span></div>
</fieldset>Spring拦截器通过重写这三个方法实现Controller的拦截。</div>
<div>配置拦截器<br />
<fieldset><legend>xml</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">handlerMapping</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.springframework.web.servlet.handler.SimpleUrlHandlerMapping</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">interceptors</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">list</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ref&nbsp;bean</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">controllerInterceptor</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">list</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">property</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">mappings</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">props</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">prop&nbsp;key</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/hao/hello.do</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">helloWorldController</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">prop</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">props</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">property</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">bean</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">controllerInterceptor</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com.web.spring.mvc.interceptor.ControllerInterceptor</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;</div>
</fieldset><fieldset><legend>ControllerInterceptor.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ControllerInterceptor&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;HandlerInterceptorAdapter&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;在Controller方法前进行拦截<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;preHandle(HttpServletRequest&nbsp;request,<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ControllerInterceptor.preHandle()</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;implementation&nbsp;is&nbsp;empty.<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;postHandle(HttpServletRequest&nbsp;request,<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler,<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModelAndView&nbsp;modelAndView)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ControllerInterceptor.postHandle()</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;在Controller方法后进行拦截<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;afterCompletion(HttpServletRequest&nbsp;request,<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,&nbsp;Object&nbsp;handler,&nbsp;Exception&nbsp;ex)<br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ControllerInterceptor.afterCompletion()</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">29</span>&nbsp;}</div>
<div style="font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; ">说明：<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>发起请求,进入拦截器链，运行所有拦截器的preHandle方法，<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>1.当preHandle方法返回false时，从当前拦截器往回执行所有拦截器的afterCompletion方法，再退出拦截器链。<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>2.当preHandle方法全为true时，执行下一个拦截器,直到所有拦截器执行完。再运行被拦截的Controller。然后进入拦截器链，运行所有拦截器的postHandle方法,完后从最后一个拦截器往回执行所有拦截器的afterCompletion方法.<br />
<span class="Apple-tab-span" style="white-space:pre">	</span>当有拦截器抛出异常时,会从当前拦截器往回执行所有拦截器的afterCompletion方法<br />
<span class="Apple-tab-span" style="white-space:pre">	</span></div>
</fieldset><fieldset><legend>Controller</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">@Controller<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">@RequestMapping(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/hao</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)</span><span style="color: #000000; "><font color="#008080"><br />
</font></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;HelloWorldController&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/hello</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;hello(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">hello</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #000000; "><font color="#008080"><br />
</font></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">}</span></div>
</fieldset><br />
</div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/333752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-05 01:00 <a href="http://www.blogjava.net/wmcoo/articles/333752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC 中的数据验证</title><link>http://www.blogjava.net/wmcoo/articles/333553.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Thu, 30 Sep 2010 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333553.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333553.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333553.html</trackback:ping><description><![CDATA[<div><br />
</div>
<fieldset><legend><span  style="font-size: 13px; ">DataValidator.java</span></legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.web.spring.mvc.validator;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.validation.Errors;<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.validation.Validator;<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.web.spring.mvc.pojo.Pojo;<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;DataValidator&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;Validator{<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;supports(Class</span><span style="color: #000000; ">&lt;?&gt;</span><span style="color: #000000; ">&nbsp;clazz)&nbsp;{<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;Pojo.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">.equals(clazz);<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;validate(Object&nbsp;target,&nbsp;Errors&nbsp;errors)&nbsp;{<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pojo&nbsp;pojo</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(Pojo)target;<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">pojo&nbsp;data&nbsp;validator</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(pojo.getA().length()</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">6</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.rejectValue(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Character&nbsp;too&nbsp;length</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">26</span>&nbsp;</div>
</fieldset><br />
<fieldset><legend>Pojo.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.web.spring.mvc.pojo;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.Date;<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Pojo{<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;a;<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b;<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Date&nbsp;d;<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;s;<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">}</span></div>
</fieldset><br />
<br />
<fieldset>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: #000000; ">@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/validator</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.POST)<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;processSubmit(@ModelAttribute(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pojo</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;Pojo&nbsp;pojo,<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BindingResult&nbsp;result,&nbsp;SessionStatus&nbsp;status)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/validator</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DataValidator().validate(pojo,&nbsp;result);<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(result.hasErrors())&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status.setComplete();<br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">声明SESSION&nbsp;对象已经使用完,可以删除</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">redirect:/helloWorld.jsp</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;;<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
</fieldset><br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-30 15:59 <a href="http://www.blogjava.net/wmcoo/articles/333553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC的自动转换功能 HttpMessageConverter</title><link>http://www.blogjava.net/wmcoo/articles/333472.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Thu, 30 Sep 2010 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333472.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333472.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333472.html</trackback:ping><description><![CDATA[默认起用的MVC注解功能<br />
<span style="font-family: Arial, sans-serif; ">
<pre class="programlisting" style="line-height: 1; color: black; font-size: 10pt; padding-top: 7pt; padding-right: 3pt; padding-bottom: 7pt; padding-left: 3pt; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eeeeee; clear: both; background-position: initial initial; background-repeat: initial initial; ">&lt;<span class="hl-tag" style="color: #3f7f7f; ">bean</span> <span class="hl-attribute" style="color: #7f007f; ">class</span>=<span class="hl-value" style="color: #2a00ff; ">"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"</span>&gt;</pre>
</span>
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="font-weight: normal;">StringHttpMessageConverter：</span><span style="color: #000000; font-weight: normal; ">&nbsp;</span><span style="font-family: Arial, sans-serif; "><span style="font-weight: normal;">that can read and write Strings from the HTTP request and response.</span></span></h4>
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="color: #234623; "><span style="font-weight: normal;">FormHttpMessageConverter：</span></span><span style="color: #000000; font-weight: normal; ">that can read and write form data from the HTTP request and response.</span></h4>
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="font-weight: normal;">ByteArrayMessageConverter：<span style="color: #000000; ">that can read and write byte arrays from the HTTP request and response.</span><br />
</span><span style="color: #000000; ">
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="font-weight: normal;">MarshallingHttpMessageConverter：XML</span><span style="font-weight: normal; ">的转换</span><span style="font-weight: normal; ">需要<span style="color: #000000; ">使用Spring的&nbsp;<code class="interfacename">Marshaller</code>&nbsp;和&nbsp;<code class="interfacename">Unmarshaller.</code></span></span></h4>
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="font-weight: normal;">MappingJacksonHttpMessageConverter：JSON的转换.<br />
</span></h4>
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="color: #234623; "><span style="font-weight: normal;">SourceHttpMessageConverter：能够</span></span><span  style="font-weight: normal; ">读/写</span><span style="color: #234623; "><span style="font-weight: normal;">来自HTTP的请求与响应的</span></span><span style="color: #000000; font-family: monospace; font-weight: normal; ">javax.xml.transform.Source</span><span style="color: #000000; "><span style="font-weight: normal; ">&nbsp;</span><code class="classname"><span style="font-weight: normal; ">,支持</span></code></span><span style="color: #000000; "><code class="classname"><span style="font-weight: normal;">DOMSource</span></code><span style="font-weight: normal;">,&nbsp;</span><code class="classname"><span style="font-weight: normal;">SAXSource</span></code><span style="font-weight: normal;">, 和&nbsp;</span><code class="classname"><span style="font-weight: normal;">StreamSource</span></code><span style="font-weight: normal;">&nbsp;的XML格式</span></span></h4>
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="color: #000000; font-weight: normal; ">
<h4 class="title" style="color: #234623; font-family: Arial, sans-serif; "><span style="font-weight: normal;">BufferedImageHttpMessageConverter：</span><span style="color: #000000; font-weight: normal; ">that can read and write&nbsp;<code class="classname">java.awt.image.BufferedImage</code>&nbsp;from the HTTP request and response</span></h4>
</span></h4>
</span></h4>
起用JSON转换功能<br />
<fieldset><legend>xml</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: #000000; ">&lt;!--</span><span style="color: #000000; ">&nbsp;启动Spring&nbsp;MVC的注解功能，完成请求和注解POJO的映射&nbsp;</span><span style="color: #000000; ">--&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">messageConverters</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">util:list&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">beanList</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ref&nbsp;bean</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">stringHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ref&nbsp;bean</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jsonHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ref&nbsp;bean</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">marshallingHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">util:list</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">property</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">bean</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">stringHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.springframework.http.converter.StringHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jsonHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.springframework.http.converter.json.MappingJacksonHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">marshallingHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.springframework.http.converter.xml.MarshallingHttpMessageConverter</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">marshaller</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;ref</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">castorMarshaller</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">unmarshaller</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;ref</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">castorMarshaller</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">bean</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">castorMarshaller</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.springframework.oxm.castor.CastorMarshaller</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">24</span>&nbsp;</div>
</fieldset><br />
<span style="font-size: 13px; ">MappingJacksonHttpMessageConverter能够将POJO对象自动转换为JSON对象<br />
<span style="font-size: medium;"><br />
</span></span><fieldset>
<div style="font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&nbsp;&nbsp; &nbsp;@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/getPojoJson</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;,&nbsp;method</span><span style="color: #000000; ">=</span><span style="color: #000000; ">RequestMethod.GET)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;@ResponseBody&nbsp;Pojo&nbsp;getPojoJson()&nbsp;{</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pojo&nbsp;pojo</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Pojo();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pojo.setA(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">test</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pojo.setB(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pojo.setD(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Date());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;pojo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
</fieldset>
<div>需要依赖JSON对象的处理JAR包<br />
jackson-core-lgpl.jar<br />
jackson-mapper-lgpl.jar<br />
下载地址:<br />
<a href="http://jackson.codehaus.org/" style="color: #002c99; text-decoration: none; ">http://jackson.codehaus.org/</a></div>
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-30 11:56 <a href="http://www.blogjava.net/wmcoo/articles/333472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC 的请求参数获取</title><link>http://www.blogjava.net/wmcoo/articles/333463.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Thu, 30 Sep 2010 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333463.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333463.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333463.html</trackback:ping><description><![CDATA[<ol>
    <li><span style="font-size: 10pt; "><span style="font-size: 12pt; "><span style="font-size: 10pt; ">通过<span style="font-size: 13px; ">@PathVariabl</span><span style="font-size: 13px; ">注解获取</span>路径中传递参数</span></span></span><br />
    <fieldset><legend>JAVA</legend>
    <div style="font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">1</span>&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: #000000; ">@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{id}/{str}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
    </span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;ModelAndView&nbsp;helloWorld(@PathVariable&nbsp;String&nbsp;id,<br />
    </span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@PathVariable&nbsp;String&nbsp;str)&nbsp;{<br />
    </span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(id);<br />
    </span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str);<br />
    </span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ModelAndView(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
    </span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
    </fieldset>
    </li>
    <li><span style="font-size: 10pt; ">用@ModelAttribute注解获取POST请求的FORM表单数据</span><span style="font-size: 13px; "><br />
    </span><fieldset><legend>JSP</legend>
    <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">&lt;</span><span style="color: #000000; ">form&nbsp;method</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">post</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;action</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">hao.do</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
    </span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">a:&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">input&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;type</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">text</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
    </span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">b:&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">input&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">b</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;type</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">text</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">b</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
    </span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&lt;</span><span style="color: #000000; ">input&nbsp;type</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">submit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Submit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
    </span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">form</span><span style="color: #000000; ">&gt;</span></div>
    </fieldset><br />
    <fieldset><legend>JAVA pojo</legend>
    <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Pojo{<br />
    </span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;a;<br />
    </span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b;<br />
    </span><span style="color: #008080; ">4</span>&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: #000000; "><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
    </span><span style="color: #008080; ">5</span>&nbsp;</div>
    </fieldset><br />
    <fieldset><legend>JAVA controller</legend>
    <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">@RequestMapping(method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.POST)<br />
    </span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;processSubmit(@ModelAttribute(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pojo</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;Pojo&nbsp;pojo)&nbsp;{&nbsp;<br />
    </span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
    </span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
    </fieldset></li>
    <li><span style="font-size: 10pt; ">直接用<span style="font-size: 13px; ">HttpServletRequest获取</span></span><br />
    <fieldset><legend>JAVA</legend>
    <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">1</span>&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: #000000; ">@RequestMapping(method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br />
    </span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;get(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{</span><span style="color: #000000; "><font color="#008080"><br />
    </font></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(request.getParameter(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
    </span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
    </span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
    </fieldset><br />
    </li>
    <li><span style="font-size: 10pt; ">用注解@RequestParam绑定请求参数a到变量a<br />
    </span><span style="font-size: 10pt; ">当请求参数a不存在时会有异常发生,可以通过设置属性<span  style="font-family: Arial, sans-serif; "><span  style="font-family: monospace; ">required=false解决,<br />
    例如:</span>&nbsp;</span><span  style="font-family: Arial, sans-serif; "><code class="literal">@RequestParam(value="a", required=false)</code></span></span><span  style="font-family: Arial, sans-serif; "><code class="literal"></code></span><br />
    <fieldset><legend>JAVA</legend>
    <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">1</span>&nbsp;&nbsp; &nbsp;&nbsp;<span style="color: #000000; ">@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/requestParam</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br />
    </span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;setupForm(@RequestParam(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;String&nbsp;a,&nbsp;ModelMap&nbsp;model)&nbsp;{<br />
    </span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a);<br />
    </span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span>return "helloWorld";}<br />
    </div>
    </fieldset><br />
    </li>
</ol>
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-30 10:35 <a href="http://www.blogjava.net/wmcoo/articles/333463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 的MVC  @RequestMapping</title><link>http://www.blogjava.net/wmcoo/articles/333428.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 29 Sep 2010 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333428.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333428.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333428.html</trackback:ping><description><![CDATA[<fieldset><legend>
<h3 class="title" style="color: #234623; font-family: Arial, sans-serif; ">&nbsp;<code class="interfacename">@RequestMapping</code></h3>
</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">@Controller<br />
@RequestMapping(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/appointments</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AppointmentsController&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;AppointmentBook&nbsp;appointmentBook;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;AppointmentsController(AppointmentBook&nbsp;appointmentBook)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.appointmentBook&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;appointmentBook;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping(method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Map</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String,&nbsp;Appointment</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;get()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;appointmentBook.getAppointmentsForToday();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{day}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Map</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String,&nbsp;Appointment</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;getForDay(@PathVariable&nbsp;@DateTimeFormat(iso</span><span style="color: #000000; ">=</span><span style="color: #000000; ">ISO.DATE)&nbsp;Date&nbsp;day,&nbsp;Model&nbsp;model)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;appointmentBook.getAppointmentsForDay(day);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/new</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;AppointmentForm&nbsp;getNewForm()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;AppointmentForm();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping(method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.POST)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;add(@Valid&nbsp;AppointmentForm&nbsp;appointment,&nbsp;BindingResult&nbsp;result)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(result.hasErrors())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">appointments/new</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appointmentBook.addAppointment(appointment);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">redirect:/appointments</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
</fieldset><br />
<fieldset><legend>DispatcherServle</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">dispatcher</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">org.springframework.web.servlet.DispatcherServlet</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">load</span><span style="color: #000000; ">-</span><span style="color: #000000; ">on</span><span style="color: #000000; ">-</span><span style="color: #000000; ">startup</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">load</span><span style="color: #000000; ">-</span><span style="color: #000000; ">on</span><span style="color: #000000; ">-</span><span style="color: #000000; ">startup</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">mapping</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">dispatcher</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">url</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pattern</span><span style="color: #000000; ">&gt;*</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">do</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">url</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pattern</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">mapping</span><span style="color: #000000; ">&gt;</span></div>
</fieldset>&nbsp;<br />
<br />
<div><span style="font-size: 13px; ">/appointments</span><span style="font-size: 13px; ">/new.do<br />
</span>映射方法是<span style="font-size: 13px; ">getNewForm()<br />
</span><span style="font-size: 13px; ">/appointments.do&nbsp;<br />
</span>GET请求映射方法是<span style="font-size: 13px; ">&nbsp;get()<br />
</span>POST请求映射方法是<span style="font-size: 13px; ">add(@Valid&nbsp;AppointmentForm&nbsp;appointment,&nbsp;BindingResult&nbsp;result)</span><br />
<br />
</div>
<br />
<br />
<div>通过参数条件缩小路径映射<br />
<span style="font-family: Arial, sans-serif; ">
<pre class="programlisting" style="line-height: 1; color: black; font-size: 10pt; padding-top: 7pt; padding-right: 3pt; padding-bottom: 7pt; padding-left: 3pt; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eeeeee; clear: both; background-position: initial initial; background-repeat: initial initial; ">@RequestMapping(value = <span class="hl-string" style="color: #2a00ff; ">"/path"</span>, params=<span class="hl-string" style="color: #2a00ff; ">"myParam=myValue"</span>)
public void add(){...}
</pre>
</span>http://localhost:8080/DynamicWebProject/hao/hello.do?myParam=myValue<br />
URL中只有存在myParam=myValue参数时才被允许访问路径映射的方法<br />
<br />
<span style="font-family: Arial, sans-serif; ">
<pre class="programlisting" style="line-height: 1; color: black; font-size: 10pt; padding-top: 7pt; padding-right: 3pt; padding-bottom: 7pt; padding-left: 3pt; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eeeeee; clear: both; background-position: initial initial; background-repeat: initial initial; ">@RequestMapping(value = <span class="hl-string" style="color: #2a00ff; ">"/path"</span>, method = RequestMethod.POST, headers=<span class="hl-string" style="color: #2a00ff; ">"content-type=text/*"</span>)
public void add(){...}</pre>
</span><span style="font-family: Arial, sans-serif; ">
只有在URL的头信息中包含有<span style="font-family: monospace; color: #2a00ff; font-size: 13px;  ">content-type=text/*(content-type=text/xml)</span>的POST请求才能访问add()方法<br />
</span><br />
<br />
</div>
<br />
<fieldset><legend>配合@RequestMapping使用的方法或注解</legend><br />
org.springframework.web.context.request.WebRequest或org.springframework.web.context.request.NativeWebRequest。通用请求参数允许访问 request/session属性，到本机的Servlet / Portlet API的。<br />
<br />
java.util.Locale 当前请求的区域设置，由解析器提供最具体的语言环境。<br />
<br />
java.io.InputStream /java.io.Reader访问请求的内容。这个值是原始的InputStream /Reader ,由Servlet API公开。<br />
<br />
java.io.OutputStream /java.io.Writer生成响应的内容。这个值是原始的OutputStream /Writer，由Servlet API公开。<br />
<br />
@ PathVariable注明获取URI模板变量的参数。<br />
<br />
@ RequestParam注明为获取特定的servlet请求参数的参数。<br />
<br />
@ RequestHeader 访问特定的servlet请求的HTTP头的参数。参数值转换为声明的方法的参数类型。<br />
<br />
@ RequestBody 访问HTTP请求体参数。参数值转换为所声明的方法的参数类型使用HttpMessageConverters。<br />
<br />
HttpEntity &lt;？&gt;访问servlet请求的HTTP头和内容。请求流将被转换为实体采用HttpMessageConverters。<br />
<br />
java.util.Map/ org.springframework.ui.Model /org.springframework.ui.ModelMap为丰富的隐含模型，暴露在Web视图<br />
<br />
org.springframework.validation.Errors / org.springframework.validation.BindingResult<br />
<br />
org.springframework.web.bind.support.SessionStatus<br />
</fieldset><br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-29 21:41 <a href="http://www.blogjava.net/wmcoo/articles/333428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 注解@Component,@Service,@Controller,@Repository</title><link>http://www.blogjava.net/wmcoo/articles/333397.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 29 Sep 2010 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333397.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333397.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333397.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333397.html</trackback:ping><description><![CDATA[<span style="font-size: 36pt; "><span style="font-size: 8pt; "><span style="font-size: 10pt; "><span style="font-size: 12pt; "><span style="font-size: 10pt; "><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span class="annotation" style="color: #646464; "><br />
@Service</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span style="color: black; ">用于标注业务层组件，<br />
</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span class="annotation" style="color: #646464; ">@Controller</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span style="color: black; ">用于标注控制层组件（如struts中的action）,<br />
</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span class="annotation" style="color: #646464; ">@Repository</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span style="color: black; ">用于标注数据访问组件，即DAO组件，<br />
</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span class="annotation" style="color: #646464; ">@Component</span></span><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span style="color: black; ">泛指组件，当组件不好归类的时候，我们可以使用这个注解进行标注。<br />
<br />
<br />
</span></span>
<div><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-size: 12px; line-height: 18px; "><span style="color: black; ">getBean的默认名称是类名（头字母小写），如果想自定义，可以@Service(&#8220;beanName&#8221;)这样来指定，<br />
这种bean默认是单例的，如果想改变，可以使用@Service(&#8220;beanName&#8221;) @Scope(&#8220;prototype&#8221;)来改变。<br />
<br />
</span></span></div>
<br />
其它注解<br />
<br />
自动绑定<br />
@Resource 与 @Autowired<br />
@Resource(name="dataSource")<br />
@Autowired(required = false)没有绑定到Bean 也不会抛异常BeanCreationException<br />
<br />
<span style="font-family: Arial, sans-serif; ">&nbsp;初始化调用,与消毁调用</span><span style="font-family: Arial, sans-serif; "><br />
</span>@PostConstruct 与 @PreDestroy<br />
<br />
<br />
@Qualifier与@Autowired注解配合使用就能指定的Bean来绑定<br />
<br />
<br />
@Value获得资源文件里的值@Value("#{properties.key}"<br />
<br />
@Scope("prototype")<br />
<br />
<br />
<br />
<br />
</span></span></span></span></span><br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-29 15:02 <a href="http://www.blogjava.net/wmcoo/articles/333397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 在配置中使用*.properties</title><link>http://www.blogjava.net/wmcoo/articles/333345.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 29 Sep 2010 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333345.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333345.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333345.html</trackback:ping><description><![CDATA[<br />
<fieldset><legend>xml</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&lt;?</span><span style="color: #000000; ">xml&nbsp;version</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;encoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">?&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">beans&nbsp;xmlns</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/beans</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.w3.org/2001/XMLSchema-instance</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:context</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/context</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:util</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/util</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/beans&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/beans/spring-beans-3.0.xsd&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/context&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/context/spring-context-3.0.xsd</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/util&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/util/spring-util-3.0.xsd"&gt;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">context:annotation</span><span style="color: #000000; ">-</span><span style="color: #000000; ">config</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;!--</span><span style="color: #000000; ">&nbsp;picks&nbsp;up&nbsp;and&nbsp;registers&nbsp;AppConfig&nbsp;as&nbsp;a&nbsp;bean&nbsp;definition&nbsp;</span><span style="color: #000000; ">--&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">context:component</span><span style="color: #000000; ">-</span><span style="color: #000000; ">scan&nbsp;base</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">package</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com.web.spring.other</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com.web.spring.other.AppConfig</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;<br />
</span><span style="color: #000000; "><span class="Apple-tab-span" style="white-space:pre">	</span>访法一<br />
<span style="color: #000000; ">&nbsp;&nbsp; &nbsp;&lt;</span><span style="color: #000000; ">context:property</span><span style="color: #000000; ">-</span><span style="color: #000000; ">placeholder&nbsp;location</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classpath:jdbc.properties</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">	</span>方法二<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">util:properties&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jdbcProperties</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;location</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classpath:jdbc.properties</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">beans</span><span style="color: #000000; ">&gt;</span></div>
</fieldset><br />
<fieldset><legend>实现一</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.web.spring.other;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.beans.factory.annotation.Value;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.Bean;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.Configuration;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.ImportResource;<br />
<br />
@Configuration<br />
@ImportResource(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classpath*:spring/spring-properties.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AppConfig&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;@Value(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${jdbc.driverClassName}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;String&nbsp;driverClassName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Bean(initMethod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">init</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;JDBCBean&nbsp;jdbc(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDBCBean&nbsp;jdbc</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JDBCBean();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc.setDriverClassName(driverClassName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;jdbc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<div style="border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><font size="3"><span style="font-size: 13px;">jdbc.driverClassName=org.hsqldb.jdbcDriver</span></font></div>
</fieldset><br />
<br />
<fieldset><legend>实现二</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.web.spring.other;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.beans.factory.annotation.Value;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.Bean;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.Configuration;<br />
<br />
@Configuration<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AppConfig&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;@Value(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">#{jdbcProperties.driverClassName}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;String&nbsp;driverClassName;<br />
&nbsp;&nbsp; &nbsp;//private @Value("#{jdbcProperties['jdbc.driverClassName']}") String driverClassName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Bean(initMethod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">init</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;JDBCBean&nbsp;jdbc(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDBCBean&nbsp;jdbc</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JDBCBean();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc.setDriverClassName(driverClassName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;jdbc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<div style="background-color: #eeeeee; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><font size="3"><span style="font-size: 13px;">driverClassName=org.hsqldb.jdbcDriver</span></font></div>
</fieldset><br />
<br />
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-29 12:09 <a href="http://www.blogjava.net/wmcoo/articles/333345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring的@Configuration</title><link>http://www.blogjava.net/wmcoo/articles/333342.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 29 Sep 2010 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333342.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333342.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333342.html</trackback:ping><description><![CDATA[@Configuration的使用<br />
<fieldset><legend>AppConfig.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.web.spring.other;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.beans.factory.annotation.Value;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.Bean;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.Configuration;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.annotation.ImportResource;<br />
<br />
@Configuration<br />
@ImportResource(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classpath*:spring/spring-properties.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AppConfig&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;@Value(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${jdbc.driverClassName}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;String&nbsp;driverClassName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Bean(initMethod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">init</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;JDBCBean&nbsp;jdbc(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDBCBean&nbsp;jdbc</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JDBCBean();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jdbc.setDriverClassName(driverClassName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;jdbc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
</fieldset><br />
在xml中包含以上配置<br />
<fieldset><legend>xml</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&lt;?</span><span style="color: #000000; ">xml&nbsp;version</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;encoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">?&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">beans&nbsp;xmlns</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/beans</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.w3.org/2001/XMLSchema-instance</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;xmlns:context</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/context</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.springframework.org/schema/beans&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/beans/spring-beans-3.0.xsd&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/context&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">context:annotation</span><span style="color: #000000; ">-</span><span style="color: #000000; ">config</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;!--</span><span style="color: #000000; ">&nbsp;picks&nbsp;up&nbsp;and&nbsp;registers&nbsp;AppConfig&nbsp;as&nbsp;a&nbsp;bean&nbsp;definition&nbsp;</span><span style="color: #000000; ">--&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">context:component</span><span style="color: #000000; ">-</span><span style="color: #000000; ">scan&nbsp;base</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">package</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com.web.spring.other</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">context:property</span><span style="color: #000000; ">-</span><span style="color: #000000; ">placeholder&nbsp;location</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classpath:jdbc.properties</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">bean&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com.web.spring.other.AppConfig</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">beans</span><span style="color: #000000; ">&gt;</span></div>
</fieldset><br />
<br />
<br />
<br />
使用@Configuration注解需要依赖CGLIB的JAR包<br />
否则异常<br />
<br />
<div>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">Exception in thread "main"&nbsp;</font><font size="2" color="#000080"><u>java.lang.IllegalStateException</u></font><font size="2" color="#ff0000">: CGLIB is required to process @Configuration classes.&nbsp;<br />
Either add CGLIB to the classpath or remove the following @Configuration bean definitions: [spring3HelloWorldConfig]</font></p>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(</font><font size="2" color="#000080"><u>ConfigurationClassPostProcessor.java:257</u></font><font size="2" color="#ff0000">)</font></p>
<span  style="color: #000080; "><font size="2" color="#ff0000"></font></span>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(</font><font size="2" color="#000080"><u>ConfigurationClassPostProcessor.java:147</u></font><font size="2" color="#ff0000">)</font></p>
<span  style="color: #000080; "><font size="2" color="#ff0000"></font></span>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(</font><font size="2" color="#000080"><u>AbstractApplicationContext.java:624</u></font><font size="2" color="#ff0000">)</font></p>
<span  style="color: #000080; "><font size="2" color="#ff0000"></font></span>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(</font><font size="2" color="#000080"><u>AbstractApplicationContext.java:614</u></font><font size="2" color="#ff0000">)</font></p>
<span  style="color: #000080; "><font size="2" color="#ff0000"></font></span>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at org.springframework.context.support.AbstractApplicationContext.refresh(</font><font size="2" color="#000080"><u>AbstractApplicationContext.java:398</u></font><font size="2" color="#ff0000">)</font></p>
<span  style="color: #000080; "><font size="2" color="#ff0000"></font></span>
<p align="LEFT" style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at org.springframework.context.annotation.AnnotationConfigApplicationContext.&lt;init&gt;(</font><font size="2" color="#000080"><u>AnnotationConfigApplicationContext.java:65</u></font><font size="2" color="#ff0000">)</font></p>
<span  style="color: #000080; "><font size="2" color="#ff0000"></font></span>
<p style="margin-top: 0.5em; margin-right: 0.5em; margin-bottom: 0.5em; margin-left: 0.5em; line-height: 1.5; color: #000080; "><font size="2" color="#ff0000">at net.roseindia.Spring3HelloWorldConfigTest.main(</font><font size="2" color="#000080"><u>Spring3HelloWorldConfigTest.java:9</u></font><font size="2" color="#ff0000">)</font></p>
</div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/333342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-29 11:45 <a href="http://www.blogjava.net/wmcoo/articles/333342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>