﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-沉睡森林@漂在北京-随笔分类-Spring</title><link>http://www.blogjava.net/wangbing/category/35054.html</link><description>本处文章除注明“转载”外均为原创，转载请注明出处。 </description><language>zh-cn</language><lastBuildDate>Fri, 23 Mar 2012 08:36:53 GMT</lastBuildDate><pubDate>Fri, 23 Mar 2012 08:36:53 GMT</pubDate><ttl>60</ttl><item><title>spring-data-jpa使用的一个小问题</title><link>http://www.blogjava.net/wangbing/archive/2012/03/23/372534.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Fri, 23 Mar 2012 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2012/03/23/372534.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/372534.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2012/03/23/372534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/372534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/372534.html</trackback:ping><description><![CDATA[在使用spring-data-jpa的时候，我习惯性的没使用@Service，而是在xml文件里面定义了service bean。<br />而这时，在service类里面@Autowired的XXXXXXRepository提示空指针异常。<br />这个问题在我的testcase里面是不存在，也就是说，使用AbstractTransactionalJUnit4SpringContextTests进行加载xml文件的方式，所有的bean都可以准确的注入。<br />后来我换了@Service方式，加入&lt;context:component-scan base-package=""/&gt;就可以了。<br />怀疑是spring的data-jpa定义的XXXXXXRepository在web模式下面加载到application context里面出了问题。<br />也有可能是因为我的xxxxx-servlet.xml文件里面哪里定义不对导致的。<img src ="http://www.blogjava.net/wangbing/aggbug/372534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2012-03-23 12:42 <a href="http://www.blogjava.net/wangbing/archive/2012/03/23/372534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring3.1使用cache</title><link>http://www.blogjava.net/wangbing/archive/2012/03/21/372410.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Wed, 21 Mar 2012 15:48:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2012/03/21/372410.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/372410.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2012/03/21/372410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/372410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/372410.html</trackback:ping><description><![CDATA[xml代码<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; 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: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; ">&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:cache</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/cache"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans.xsd&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache&nbsp;http://www.springframework.org/schema/cache/spring-cache.xsd"</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache:annotation-driven&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;generic&nbsp;cache&nbsp;manager&nbsp;</span><span style="color: #008000; ">--&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="cacheManager"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.cache.support.SimpleCacheManager"</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="caches"</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">set</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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.cache.concurrent.ConcurrentMapCacheFactoryBean"</span><span style="color: #FF0000; ">&nbsp;p:name</span><span style="color: #0000FF; ">="default"</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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.cache.concurrent.ConcurrentMapCacheFactoryBean"</span><span style="color: #FF0000; ">&nbsp;p:name</span><span style="color: #0000FF; ">="sys_resource"</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">set</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;</div> <br />java代码<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #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>&nbsp;org.jeasyweb.framework.sys_user.service;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Iterator;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Set;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.jeasyweb.framework.sys_user.entity.SysResource;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.junit.Test;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.test.context.ContextConfiguration;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;<br /><br />@ContextConfiguration({&nbsp;"classpath:applicationContext-dataSource.xml",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"classpath:applicationContext-role.xml",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"classpath:applicationContext-cache.xml"&nbsp;})<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;UserServiceTest&nbsp;<span style="color: #0000FF; ">extends</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractTransactionalJUnit4SpringContextTests&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;UserService&nbsp;userService;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;testHello()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&lt;SysResource&gt;&nbsp;resources&nbsp;=&nbsp;userService<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getResourceByUserId(<span style="color: #0000FF; ">new</span>&nbsp;Long(1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;SysResource&gt;&nbsp;it&nbsp;=&nbsp;resources.iterator();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;testCache()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&lt;SysResource&gt;&nbsp;resources2&nbsp;=&nbsp;userService.getResourceByUserId(<span style="color: #0000FF; ">new</span>&nbsp;Long(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br />service代码<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #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 />-->&nbsp; &nbsp; @Override<br />&nbsp;&nbsp;&nbsp;&nbsp;@Cacheable(value&nbsp;=&nbsp;"sys_resource",&nbsp;key&nbsp;=&nbsp;"'getResourceByUserId_'&nbsp;+&nbsp;#id")<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Set&lt;SysResource&gt;&nbsp;getResourceByUserId(Long&nbsp;id)&nbsp;{<br /><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.</span></div><br /><br /><br /><img src ="http://www.blogjava.net/wangbing/aggbug/372410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2012-03-21 23:48 <a href="http://www.blogjava.net/wangbing/archive/2012/03/21/372410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring+JMS例子</title><link>http://www.blogjava.net/wangbing/archive/2010/03/31/317093.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Wed, 31 Mar 2010 12:57:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2010/03/31/317093.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/317093.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2010/03/31/317093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/317093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/317093.html</trackback:ping><description><![CDATA[&nbsp;
<p>第一: 在applicationContext.xml</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;</p>
<p>&lt;beans&gt;&nbsp;&nbsp;<br />
&nbsp;&lt;bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"&gt;<br />
&nbsp;&nbsp; &lt;property name="brokerURL"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;tcp://192.168.3.48:61616&lt;/value&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; <br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="connectionFactory"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="connectionFactory"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"&gt;<br />
&nbsp;&nbsp; &lt;constructor-arg index="0"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;HelloWorldQueue&lt;/value&gt;<br />
&nbsp;&nbsp; &lt;/constructor-arg&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&lt;/beans&gt;</p>
<p>2.写发送方</p>
<p>package ch13.JMS;</p>
<p>import javax.jms.Destination;<br />
import javax.jms.JMSException;<br />
import javax.jms.Message;<br />
import javax.jms.Session;</p>
<p>import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
import org.springframework.jms.core.JmsTemplate;<br />
import org.springframework.jms.core.MessageCreator;</p>
<p>public class HelloWorldSender<br />
{<br />
&nbsp;public static void main(String args[]) throws Exception<br />
&nbsp;{<br />
&nbsp;&nbsp;ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "ch13/JMS/applicationContext.xml" });<br />
&nbsp;&nbsp;JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");<br />
&nbsp;&nbsp;Destination destination = (Destination) context.getBean("destination");<br />
&nbsp;&nbsp;jmsTemplate.send<br />
&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;destination, new MessageCreator()<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public Message createMessage(Session session) throws JMSException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return session.createTextMessage("大家好这个是测试！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;);<br />
&nbsp;}</p>
<p>}<br />
3.写接收方</p>
<p>package ch13.JMS;</p>
<p>import javax.jms.Destination;<br />
import javax.jms.TextMessage;</p>
<p>import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
import org.springframework.jms.core.JmsTemplate;</p>
<p>public class HelloWorldReciver<br />
{</p>
<p>&nbsp;public static void main(String args[]) throws Exception<br />
&nbsp;{<br />
&nbsp;&nbsp;ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "ch13/JMS/applicationContext.xml" });<br />
&nbsp;&nbsp;JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");<br />
&nbsp;&nbsp;Destination destination = (Destination) context.getBean("destination");<br />
&nbsp;&nbsp;System.out.println("will wait:" + jmsTemplate.getReceiveTimeout()+ " seconds for message");<br />
&nbsp;&nbsp;TextMessage msg = (TextMessage) jmsTemplate.receive(destination);<br />
&nbsp;&nbsp;System.out.println("reviced msg is:" + msg.getText());<br />
&nbsp;}</p>
<p>}</p>
<p>4.启动activemq中bin 下的activemq.bat</p>
<p>5.先运行 HelloWorldSender</p>
<p>6.再运行 HelloWorld</p>
<p>7.结果:</p>
<p>will wait:-1 seconds for message<br />
reviced msg is:大家好 这个是测试！</p>
<img src ="http://www.blogjava.net/wangbing/aggbug/317093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2010-03-31 20:57 <a href="http://www.blogjava.net/wangbing/archive/2010/03/31/317093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在spring的bean中获取ServletContext</title><link>http://www.blogjava.net/wangbing/archive/2010/03/16/315643.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Tue, 16 Mar 2010 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2010/03/16/315643.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/315643.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2010/03/16/315643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/315643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/315643.html</trackback:ping><description><![CDATA[<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; ">我的需求是获取spring开发的web项目在服务器上的绝对路径。<br />
<br />
&nbsp;&nbsp;进而引申到我需要知道servletContext，因为servletContext有一个servletContext.getRealPath("/");方法，这个方法就能获取项目的绝对路径。<br />
<br />
&nbsp;&nbsp;常规方式下我们如何获取servletContext呢？我们需要让我们的类继承HttpServlet类，然后获取servletConfig，通过这个获取servletContext（servletConfig.getServletContext()）。（至于如何获取servletconfig对象，大家去google，百度找找吧）<br />
<br />
&nbsp;&nbsp;但是我需要在spring的bean中直接获取，这下可和我们常规的操作有些不同，因为spring的bean都是pojo的。根本见不着servletconfig和servletcontext的影子。<br />
<br />
&nbsp;&nbsp;这里我需要指出spring给我们提供了两个接口：org.springframework.web.context.ServletContextAware和<br />
<br />
org.springframework.web.context.ServletConfigAware。我们可以让我们的bean实现上边的任何一个接口就能获取到servletContext了&nbsp;.<br />
<br />
代码如下：<br />
<br />
<br />
<br />
这样，我们的bean就能够直接获取到servletContext了<br />
<br />
如果你想要servletConfig，那方法一样，只是实现的接口不同了。<br />
<br />
原理推想：应该是在创建spring的sessionFactory的时候，将应用服务器的相关属性一并加载，查看创建的bean是否实现相关接口，如果实现了，就将相关值赋予bean。<br />
<br />
注意点：<br />
<br />
&nbsp;&nbsp;1、这东西是无法用junit进行单元测试的，因为他依赖于应用服务器</span></div>
<img src ="http://www.blogjava.net/wangbing/aggbug/315643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2010-03-16 23:02 <a href="http://www.blogjava.net/wangbing/archive/2010/03/16/315643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring和hibernate事物控制@Transactional的完整例子</title><link>http://www.blogjava.net/wangbing/archive/2010/01/04/308215.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Mon, 04 Jan 2010 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2010/01/04/308215.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/308215.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2010/01/04/308215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/308215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/308215.html</trackback:ping><description><![CDATA[spring的XML配置文件<br />
<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: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:aop</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/aop"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tx</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/tx"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
http://www.springframework.org/schema/tx&nbsp;http://www.springframework.org/schema/tx/spring-tx-2.5.xsd<br />
http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
<br />
&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 />
&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; ">="dataSource"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.apache.commons.dbcp.BasicDataSource"</span><span style="color: #FF0000; ">&nbsp;destroy-method</span><span style="color: #0000FF; ">="close"</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; ">="driverClassName"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="com.mysql.jdbc.Driver"</span><span style="color: #FF0000; ">&nbsp;</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; ">="url"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="jdbc:mysql://localhost/jeasyweb"</span><span style="color: #FF0000; ">&nbsp;</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; ">="username"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="root"</span><span style="color: #FF0000; ">&nbsp;</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; ">="password"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="sa"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&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 />
<br />
&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; ">="sessionFactory"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.orm.hibernate3.LocalSessionFactoryBean"</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; ">="dataSource"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="dataSource"</span><span style="color: #FF0000; ">&nbsp;</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; ">="hibernateProperties"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibernate.dialect=org.hibernate.dialect.MySQL5Dialect<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibernate.show.sql=true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&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; ">="mappingLocations"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">classpath:com/domain/User.hbm.xml</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&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 />
<br />
&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 />
&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; ">="txManager"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.orm.hibernate3.HibernateTransactionManager"</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; ">="sessionFactory"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="sessionFactory"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&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 />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;enable&nbsp;the&nbsp;configuration&nbsp;of&nbsp;transactional&nbsp;behavior&nbsp;based&nbsp;on&nbsp;annotations&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tx:annotation-driven&nbsp;</span><span style="color: #FF0000; ">transaction-manager</span><span style="color: #0000FF; ">="txManager"</span><span style="color: #FF0000; ">&nbsp;proxy-target-class</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
<br />
&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; ">="myTarget"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="com.dao.UserDao"</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; ">="sessionFactory"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="sessionFactory"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&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 />
<br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div>
<br />
实体JAVA类和XML文件：<br />
<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; ">package&nbsp;com.domain;<br />
<br />
public&nbsp;class&nbsp;User&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Integer&nbsp;id;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;email;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;username;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getEmail()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;email;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setEmail(String&nbsp;email)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.email&nbsp;=&nbsp;email;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Integer&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setId(Integer&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getUsername()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setUsername(String&nbsp;username)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.username&nbsp;=&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
XML映射配置文件：<br />
<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: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"<br />
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Mapping&nbsp;file&nbsp;autogenerated&nbsp;by&nbsp;MyEclipse&nbsp;Persistence&nbsp;Tools<br />
</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">hibernate-mapping</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="com.domain.User"</span><span style="color: #FF0000; ">&nbsp;table</span><span style="color: #0000FF; ">="User"</span><span style="color: #FF0000; ">&nbsp;&nbsp;</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; ">id&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="id"</span><span style="color: #FF0000; ">&nbsp;type</span><span style="color: #0000FF; ">="integer"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">column&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="ID"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">generator&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="increment"</span><span style="color: #FF0000; ">&nbsp;</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; ">id</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; ">="username"</span><span style="color: #FF0000; ">&nbsp;type</span><span style="color: #0000FF; ">="string"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">column&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="USERNAME"</span><span style="color: #FF0000; ">&nbsp;length</span><span style="color: #0000FF; ">="16"</span><span style="color: #FF0000; ">&nbsp;&nbsp;</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</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; ">="email"</span><span style="color: #FF0000; ">&nbsp;type</span><span style="color: #0000FF; ">="string"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">column&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="EMAIL"</span><span style="color: #FF0000; ">&nbsp;length</span><span style="color: #0000FF; ">="256"</span><span style="color: #FF0000; ">&nbsp;</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</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">hibernate-mapping</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
</span></div>
<br />
DAO代码：<br />
<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.dao;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.transaction.annotation.Transactional;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.domain.User;<br />
<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;UserDao&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;HibernateDaoSupport&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;更新某一字段的操作。并使用事务管理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Transactional<br />
&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;updateField()&nbsp;{<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().bulkUpdate("update&nbsp;com.domain.User&nbsp;set&nbsp;username&nbsp;=&nbsp;'管理员4'&nbsp;where&nbsp;id&nbsp;=&nbsp;1&nbsp;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;有意制造异常<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().bulkUpdate("update&nbsp;spring.User2&nbsp;set&nbsp;username&nbsp;=&nbsp;'管理员4'&nbsp;where&nbsp;id&nbsp;=&nbsp;1&nbsp;");</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;User();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.setUsername(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">xx</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().save(u);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;u1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;User();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u1.setUsername(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">x111111111111111111111111111111111111111111111111111111111111111111111111111x</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().save(u1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
}<br />
</span></div>
<br />
<br />
测试代码：<br />
<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.test;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.dao.UserDao;<br />
<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;TestMain&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&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: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassPathXmlApplicationContext&nbsp;appContext&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">NewFile.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserDao&nbsp;um&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(UserDao)&nbsp;appContext.getBean(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">myTarget</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;um.updateField();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
<br />
日志配置：<br />
<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; ">#&nbsp;This&nbsp;is&nbsp;the&nbsp;configuring&nbsp;for&nbsp;logging&nbsp;displayed&nbsp;in&nbsp;the&nbsp;Application&nbsp;Server<br />
log4j.rootCategory=DEBUG,&nbsp;stdout,logfile<br />
<br />
#stdout&nbsp;configure<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.stdout.layout.ConversionPattern=&nbsp;%d&nbsp;%p&nbsp;[%c]&nbsp;-&nbsp;%m%n<br />
<br />
#logfile&nbsp;configure<br />
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender<br />
log4j.appender.logfile.File=../logs/jeasyweb.log<br />
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.logfile.layout.ConversionPattern=&nbsp;%d&nbsp;%p&nbsp;[%c]&nbsp;-&nbsp;%m%n<br />
<br />
#&nbsp;Control&nbsp;logging&nbsp;for&nbsp;other&nbsp;open&nbsp;source&nbsp;packages<br />
#&nbsp;Changing&nbsp;the&nbsp;log&nbsp;level&nbsp;to&nbsp;DEBUG&nbsp;when&nbsp;debug<br />
log4j.logger.org.springframework=DEBUG&nbsp;<br />
<br />
log4j.logger.org.dozer=ERROR<br />
<br />
log4j.logger.org.apache.commons=DEBUG<br />
<br />
#&nbsp;Changing&nbsp;the&nbsp;log&nbsp;level&nbsp;to&nbsp;DEBUG&nbsp;will&nbsp;display&nbsp;SQL&nbsp;Hibernate&nbsp;generated<br />
log4j.logger.org.hibernate=DEBUG<br />
log4j.logger.org.hibernate.SQL=DEBUG<br />
log4j.logger.org.hibernate.cache=DEBUG<br />
log4j.logger.net.sf.ehcache=DEBUG<br />
log4j.logger.org.apache.commons.validator.ValidatorResources=ERROR</span></div>
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wangbing/aggbug/308215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2010-01-04 22:54 <a href="http://www.blogjava.net/wangbing/archive/2010/01/04/308215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于spring和hibernate的事物控制@Transactional的使用</title><link>http://www.blogjava.net/wangbing/archive/2010/01/04/308212.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Mon, 04 Jan 2010 14:33:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2010/01/04/308212.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/308212.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2010/01/04/308212.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/308212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/308212.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2010-01-04 22:14:28,313DEBUG [org.hibernate.loader.entity.EntityLoader] - Static select for actionACTION_MERGE on entity com.jeasyweb.module.role.domain.SysRole: selectsysrole0_.UUID as UUID10_0...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangbing/archive/2010/01/04/308212.html'>阅读全文</a><img src ="http://www.blogjava.net/wangbing/aggbug/308212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2010-01-04 22:33 <a href="http://www.blogjava.net/wangbing/archive/2010/01/04/308212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转载】ant命令使用之delete和copy</title><link>http://www.blogjava.net/wangbing/archive/2009/06/14/282195.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Sun, 14 Jun 2009 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/06/14/282195.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/282195.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/06/14/282195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/282195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/282195.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<table style="table-layout: fixed; ">
    <tbody>
        <tr>
            <td style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 12px; line-height: 18px; ">
            <div id="blog_text" class="cnt" style="font-family: Arial; word-wrap: break-word; word-break: normal; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 20px; color: #333333; overflow-x: hidden; overflow-y: hidden; position: static; ">
            <h3 style="line-height: normal; "></h3>
            <h3 style="line-height: normal; ">4.5 Copy Task：对文件和目录进行复制</h3>
            <p class="MsoNormal" style="line-height: 16pt; ">Copy 任务把一个或多个文件复制到指定的目录下。但要注意的是，如果目标目录下具有同名的文件，那么只有当源文件相对于目标文件更新时，Ant工具才会复制这个文件。在Copy任务中可以使用FileSet类型来定义文件集合。</p>
            <h3 style="line-height: normal; text-indent: 32pt; ">4.5.1 Copy Task的属性及功能</h3>
            <p class="MsoNormal" style="line-height: 16pt; ">Copy 任务具有以下属性：</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（1）file：用于指定要复制的源文件。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（2）preservelastmodified：作用是使得复制后的文件与源文件的最后修改时间相同。默认为false。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（3）tofile：用于指定要复制到的文件。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（4）todir：用于指定要复制到的目标目录。todir和tofile只能使用其中一个属性。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（5）overwrite：用于指定是否需要覆盖目录和文件，不管文件是否比源文件新，都会覆盖。默认为false。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（6）filtering：用于指定在复制时是否使用构件文件的全局过滤器对文件进行过滤。默认为false。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（7）flatten：用于指定是否需要复制目录，如果为true代表把所有的文件复制到todir属性设定的目录下。默认为false，复制目录。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（8）includeEmptyDirs：用于指定是否复制空目录。默认为true。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（9）failonerror：用于指定当遇到错误时是否停止执行。默认为true。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（10）verbose：用于指定当复制文件时是否记录日志信息。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（11）encoding：用于设定复制文件时的编码或文件过滤器使用的编码方式。默认时使用Java虚拟机的编码方式。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（12）outputencoding：指定写文件时的编码方式。默认时使用Java虚拟机的编码方式。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（13）enablemultiplemappings：用于设定是否允许多个映射。默认为false。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（14）granularity：用于指定一个文件修改时间的毫秒数据的允许误差。因为不是所有的文件系统的修改时间都是精确到毫秒数。默认时为0，如果为DOS系统则为2。</p>
            <h3 style="line-height: normal; text-indent: 32pt; ">4.5.2 通过Copy Task实现文件和目录复制功能实例</h3>
            <p class="MsoNormal" style="line-height: 16pt; ">不管是对程序进行打包还是一般的文件操作，基本上都离不开复制功能。通过Ant工具的Copy任务可以让程序在Windows和Linux/UNIX下对文件和目录进行复制操作。例如：</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（1）对单个文件进行复制：</p>
            <p class="a7" style="line-height: normal; margin-bottom: 6pt; ">&lt;copy file="myfile.txt" tofile="mycopy.txt"/&gt;</p>
            <p class="MsoNormal" style="line-height: normal; ">这个例子的作用是在当前目录复制myfile.txt，并把复制的文件命名为mycopy.txt。当需要把文件复制到别外的目录时可以这样编写：</p>
            <p class="a7" style="line-height: normal; margin-bottom: 6pt; ">&lt;copy file="myfile.txt" todir="../some/other/dir"/&gt;</p>
            <p class="MsoNormal" style="line-height: normal; ">这个例子的作用是把文件复制到与当前目录同级的some目录的/other/dir子目录下。这里&#8220;..&#8221;代表相对路径（当前目录的上一级目录）。</p>
            <p class="MsoNormal" style="line-height: normal; ">（2）对文件目录进行复制：</p>
            <p class="a7" style="line-height: normal; ">&lt;copy todir="../new/dir"&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp; &lt;fileset dir="src_dir"/&gt;</p>
            <p class="a8" style="line-height: normal; ">&lt;/copy&gt;</p>
            <p class="MsoNormal" style="line-height: normal; ">这个例子的作用是把src_dir目录复制到../new/dir目录下。有时对文件进行复制时需要对文件进行备份。下面举一个复制文件时对文件进行备份的例子。</p>
            <p class="a7" style="line-height: normal; ">&lt;copy todir="../backup/dir"&gt;</p>
            <p class="a0" style="line-height: normal; ">&lt;fileset dir="src_dir"&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp; &lt;exclude name="**/*.java"/&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp; &lt;/fileset&gt;</p>
            <p class="a0" style="line-height: normal; ">&lt;globmapper from="*" to="*.bak"/&gt;</p>
            <p class="a8" style="line-height: normal; ">&lt;/copy&gt;</p>
            <p class="MsoNormal" style="line-height: normal; ">这个例子的作用是把src_dir目录及其子目录下所有非Java文件复制到../backup/dir目录下，并重命名为bak文件，以作备份。</p>
            <h3 style="line-height: normal; text-indent: 32pt; ">4.5.3 在执行Copy Task时使用文件过滤的实例</h3>
            <p class="MsoNormal" style="line-height: normal; ">下面是一个复制文件的同时替换文件中的特殊符号的例子：</p>
            <p class="a7" style="line-height: normal; ">&lt;copy todir="../backup/dir"&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp; &lt;fileset dir="src_dir"/&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp; &lt;filterset&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter token="TITLE" value="Foo Bar"/&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp; &lt;/filterset&gt;</p>
            <p class="a8" style="line-height: normal; ">&lt;/copy&gt;</p>
            <p class="MsoNormal" style="line-height: normal; ">这个例子的作用是把src_dir目录下的所有文件复制到../backup/dir目录，并在所有文件中查找并替换@TITLE@为Foo Bar。当要进行新产品发布时通过需要替换文件中的版本信息和时间信息。</p>
            <p class="a1" style="line-height: normal; margin-left: 31.5pt; text-indent: -31.5pt; ">说明：在Ant工具中还提供了copydir和copyfile这两个特定的任务，分别用于对目录和文件进行复制。但自从有了Copy任务后，这两个任务已过期，不建议再使用，应该统一使用Copy任务。</p>
            <h3 style="line-height: normal; ">4.6 Delete Task：对文件和目录进行删除</h3>
            <p class="MsoNormal" style="line-height: normal; ">Delete 任务可用于删除一个或多个文件，或删除一个或多个目录和目录下的文件。默认时不会删除空目录，要删除空目录可以设定includeEmptyDirs属性为true。在Delete任务中可以使用FileSet和DirSet类型。</p>
            <h3 style="line-height: normal; text-indent: 32pt; ">4.6.1 Delete Task的属性及功能</h3>
            <p class="MsoNormal" style="line-height: 16pt; ">Delete任务包括以下属性：</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（1）file：用于指定要删除的文件的名称，可以为相对路径或绝对路径。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（2）dir：指定一个将要被删除的根目录。这个目录下的子目录及文件将可能被删除。dir属性和file属性两者必须指定其一。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（3）verbose：作用是指定是否在命令行中输出被删除的文件的名称。默认为false。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（4）quiet：作用是指定当要被删除的文件或目录不存在时是否不显示提示信息。默认为false，代表要显示提示信息。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（5）failonerror：用于指定当出现错误时是否停止执行命令。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（6）includeemptydirs：表明当使用FileSet类型时是否删除空的目录。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（7）includes：用于指定将要删除的文件或目录的模式。可用逗号或空格符进行分隔。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（8）includesfile：用于指定要删除的文件的模式。已不建议使用。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（9）excludes：用于指定一个或多个文件模式或目录模式。这些符合条件的文件和目录将不被删除。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（10）excludesfile：用于指定将不被删除的文件模式，已不建议使用。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（11）defaultexcludes：用于指定是否使用Ant默认的default excludes模式，已不建议使用。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（12）deleteonexit：用于指定是否采用Java File类中的deleteOnExit()方法进行判断，如果使用这个方法，那么仅当存在文件时才进行删除，默认取值为false。</p>
            <h3 style="line-height: normal; text-indent: 32pt; ">4.6.2 在执行Delete Task时使用文件过滤的实例</h3>
            <p class="MsoNormal" style="line-height: normal; ">（1）删除单个文件的实例：</p>
            <p class="a7" style="line-height: normal; margin-bottom: 6pt; ">&lt;delete file="/lib/ant.jar"/&gt;</p>
            <p class="MsoNormal" style="line-height: normal; ">这个例子的作用是删除lib目录下的ant.jar文件。</p>
            <p class="MsoNormal" style="line-height: normal; ">（2）删除目录的实例：</p>
            <p class="a7" style="line-height: normal; margin-bottom: 6pt; ">&lt;delete dir="lib"/&gt;</p>
            <p class="MsoNormal" style="line-height: 16pt; ">这个例子的作用是删除lib目录，包括这个目录的所有子目录及文件，可以通过include或exclude类型指定删除的部分文件，而不是目录下的所有文件。</p>
            <p class="MsoNormal" style="line-height: 16pt; ">（3）删除所有备份文件和空的目录的例子：</p>
            <p class="a7" style="line-height: normal; ">&lt;delete includeEmptyDirs="true"&gt;</p>
            <p class="a0" style="line-height: normal; ">&nbsp;&nbsp;&nbsp; &lt;fileset dir="." includes="**/*.bak"/&gt;</p>
            <p class="a8" style="line-height: normal; ">&lt;/delete&gt;</p>
            <p class="MsoNormal" style="line-height: 16pt; ">这个例子的作用是删除当前目录以及其子目录下的所有.bak文件，同时也删除所有空的目录。</p>
            <p class="MsoNormal" style="line-height: 16pt; "><a href="http://book.csdn.net/bookfiles/379/10037914215.shtml" style="line-height: normal; ">http://book.csdn.net/bookfiles/379/10037914215.shtml</a></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span>
<img src ="http://www.blogjava.net/wangbing/aggbug/282195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-06-14 18:22 <a href="http://www.blogjava.net/wangbing/archive/2009/06/14/282195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用AnnotationMethodHandlerAdapter对Spring的Controller注入session对象</title><link>http://www.blogjava.net/wangbing/archive/2009/06/04/280060.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Thu, 04 Jun 2009 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/06/04/280060.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/280060.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/06/04/280060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/280060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/280060.html</trackback:ping><description><![CDATA[在利用spring的mvc开发过程中，需要将User对象从session中取出来使用。参照网上的做法，我利用了AnnotationMethodHandlerAdapter来解决这个问题。下面是XML代码，放到web-inf下面的springMVC配置文件中：<br />
<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; ">&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; ">="userArgumentResolver"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="com.greatwall.module.yhqxgl.interceptor.UserArgumentResolver"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><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.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"</span><span style="color: #FF0000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&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; ">="customArgumentResolver"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ref&nbsp;</span><span style="color: #FF0000; ">bean</span><span style="color: #0000FF; ">="userArgumentResolver"</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</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;<br />
</span></div>
<br />
下面是java代码：<br />
<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: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.greatwall.module.yhqxgl.interceptor;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.core.MethodParameter;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.bind.support.WebArgumentResolver;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.context.request.NativeWebRequest;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.context.request.RequestAttributes;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.greatwall.module.yhqxgl.YhqxglConstants;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.greatwall.module.yhqxgl.domain.User;<br />
<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;UserArgumentResolver&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;WebArgumentResolver&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Object&nbsp;resolveArgument(MethodParameter&nbsp;methodParameter,&nbsp;NativeWebRequest&nbsp;webRequest)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(methodParameter.getParameterType().equals(User.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">))&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;webRequest.getAttribute(YhqxglConstants.GREATWALL_SESSION_USER,&nbsp;RequestAttributes.SCOPE_SESSION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;UNRESOLVED;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</span></div>
<br />
调用的过程很简单，直接在controller对应的函数里面加入参数User即可。<br />
<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; ">@RequestMapping(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/txn960204.do</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;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;txn960204(HttpServletResponse&nbsp;response,&nbsp;HttpServletRequest&nbsp;req,SysCodedata&nbsp;sysCodedata,User&nbsp;user)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysCodedata.setUpdateTime(DateUtils.currentDateTime());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysCodedata.setUpdateUsername(user.getUsername());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysCodedataService.updateOneSysCodedata(sysCodedata);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonUtils.success(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">修改保存代码明细表成功！</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;response);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(ServiceException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonUtils.error(e,&nbsp;response);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; &nbsp;</span></div>
<br />
<img src ="http://www.blogjava.net/wangbing/aggbug/280060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-06-04 19:31 <a href="http://www.blogjava.net/wangbing/archive/2009/06/04/280060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate lazy load相关问题</title><link>http://www.blogjava.net/wangbing/archive/2009/05/22/277364.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Fri, 22 May 2009 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/05/22/277364.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/277364.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/05/22/277364.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/277364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/277364.html</trackback:ping><description><![CDATA[<pre>org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "name" with value "${sysUserinfo.username}": An error occurred while getting property "username" from an instance of class com.greatwall.module.yhqxgl.domain.SysUserinfo$$EnhancerByCGLIB$$b21cb1cc (org.hibernate.LazyInitializationException: could not initialize proxy - no Session)
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "name" with value "${sysUserinfo.username}": An error occurred while getting property "username" from an instance of class com.greatwall.module.yhqxgl.domain.SysUserinfo$$EnhancerByCGLIB$$b21cb1cc (org.hibernate.LazyInitializationException: could not initialize proxy - no Session)
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspService(update_002dsys_005fuserinfo_jsp.java:117)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
... 30 more
Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at com.greatwall.module.yhqxgl.domain.SysUserinfo$$EnhancerByCGLIB$$b21cb1cc.getUsername(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.taglibs.standard.lang.jstl.ArraySuffix.evaluate(ArraySuffix.java:278)
at org.apache.taglibs.standard.lang.jstl.ComplexValue.evaluate(ComplexValue.java:107)
at org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:204)
at org.apache.taglibs.standard.lang.jstl.ELEvaluator.evaluate(ELEvaluator.java:163)
at org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:101)
at org.apache.taglibs.standard.lang.jstl.Evaluator.evaluate(Evaluator.java:129)
at org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager.evaluate(ExpressionEvaluatorManager.java:75)
at com.greatwall.extjsptag.tags.form.TextTags.setName(TextTags.java:138)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005ftext_005f0(update_002dsys_005fuserinfo_jsp.java:452)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fblock_005f0(update_002dsys_005fuserinfo_jsp.java:383)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fviewport_005f0(update_002dsys_005fuserinfo_jsp.java:328)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fbody_005f0(update_002dsys_005fuserinfo_jsp.java:291)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspx_meth_gw_005fhtml_005f0(update_002dsys_005fuserinfo_jsp.java:172)
at org.apache.jsp.module.yhqxgl.sys_005fuserinfo.update_002dsys_005fuserinfo_jsp._jspService(update_002dsys_005fuserinfo_jsp.java:108)
... 33 more
</generated></pre>
<img src ="http://www.blogjava.net/wangbing/aggbug/277364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-05-22 16:27 <a href="http://www.blogjava.net/wangbing/archive/2009/05/22/277364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Hibernate和spring结合的OpenSessionInViewFilter</title><link>http://www.blogjava.net/wangbing/archive/2009/05/21/273471.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Thu, 21 May 2009 12:45:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/05/21/273471.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/273471.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/05/21/273471.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/273471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/273471.html</trackback:ping><description><![CDATA[<span  style="color: #2a2a2a; font-family: 宋体; font-size: 14px; line-height: 25px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; word-wrap: normal; word-break: normal; margin-bottom: 5px; line-height: 1.5em; "><font  face="微软雅黑">看到了关于<span  style="color: #000000; font-size: 13px; ">Spring提供的Open&#160;Session&#160;In&#160;View的一篇文章，很详细的介绍了相关细节。下面的文章转载自：<br />
【<span  style="color: #2a2a2a; font-family: 宋体; font-size: 14px; line-height: 25px; "><a href="http://blog.sina.com.cn/s/blog_5dc12c490100crr5.html">http://blog.sina.com.cn/s/blog_5dc12c490100crr5.html</a><span  style="color: #000000; font-family: 微软雅黑; font-size: 13px; line-height: 21px; ">】</span></span></span></font></p>
<p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; list-style-type: none; list-style-position: initial; list-style-image: initial; word-wrap: normal; word-break: normal; margin-bottom: 5px; line-height: 1.5em; "><font  face="微软雅黑"><br />
<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; ">使用Spring提供的Open&#160;Session&#160;In&#160;View而引起Write&#160;operations&#160;are&#160;not&#160;allowed&#160;in&#160;read-only&#160;mode&#160;(FlushMode.NEVER)&#160;错误解决：<br />
&#160;&#160;&#160;&#160;在没有使用Spring提供的Open&#160;Session&#160;In&#160;View情况下，因需要在service(or&#160;Dao)层里把session关闭，所以lazy&#160;loading&#160;为true的话，要在应用层内把关系集合都初始化，如&#160;company.getEmployees()，否则Hibernate抛session&#160;already&#160;closed&#160;Exception;&#160;&#160;&#160;&#160;Open&#160;Session&#160;In&#160;View提供了一种简便的方法，较好地解决了lazy&#160;loading问题.<br />
&#160;&#160;&#160;&#160;它有两种配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilter(具体参看SpringSide)，功能相同，只是一个在web.xml配置，另一个在application.xml配置而已。<br />
&#160;&#160;&#160;&#160;Open&#160;Session&#160;In&#160;View在request把session绑定到当前thread期间一直保持hibernate&#160;session在open状态，使session在request的整个期间都可以使用，如在View层里PO也可以lazy&#160;loading数据，如&#160;${&#160;company.employees&#160;}。当View&#160;层逻辑完成后，才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。<br />
&#160;<br />
OpenSessionInViewInterceptor配置<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="openSessionInViewInterceptor"</span><span style="color: #FF0000; "><br />
class</span><span style="color: #0000FF; ">="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="sessionFactory"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ref&#160;</span><span style="color: #FF0000; ">bean</span><span style="color: #0000FF; ">="sessionFactory"</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="urlMapping"</span><span style="color: #FF0000; "><br />
class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="interceptors"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ref&#160;</span><span style="color: #FF0000; ">bean</span><span style="color: #0000FF; ">="openSessionInViewInterceptor"</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="mappings"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<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: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
OpenSessionInViewFilter配置<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">web-app</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">hibernateFilter</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&#160;singleSession默认为true,若设为false则等于没用OpenSessionInView&#160;</span><span style="color: #008000; ">--></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">init-param</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">singleSession</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">true</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">init-param</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">hibernateFilter</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">*.do</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">web-app</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
很多人在使用OpenSessionInView过程中提及一个错误：<br />
org.springframework.dao.InvalidDataAccessApiUsageException:&#160;Write&#160;operations<br />
are&#160;not&#160;allowed&#160;in&#160;read-only&#160;mode&#160;(FlushMode.NEVER)&#160;-&#160;turn&#160;your&#160;Session&#160;into<br />
FlushMode.AUTO&#160;or&#160;remove&#160;'readOnly'&#160;marker&#160;from&#160;transaction&#160;definition<br />
看看OpenSessionInViewFilter里的几个方法<br />
&#160;<br />
protected&#160;void&#160;doFilterInternal(HttpServletRequest&#160;request,<br />
HttpServletResponse&#160;response,FilterChain&#160;filterChain)<br />
throws&#160;ServletException,&#160;IOException&#160;{<br />
　SessionFactory&#160;sessionFactory&#160;=&#160;lookupSessionFactory();<br />
　logger.debug("Opening&#160;Hibernate&#160;Session&#160;in&#160;OpenSessionInViewFilter");<br />
　Session&#160;session&#160;=&#160;getSession(sessionFactory);<br />
　TransactionSynchronizationManager.bindResource(<br />
　　sessionFactory,&#160;new&#160;SessionHolder(session));<br />
　try&#160;{<br />
　　filterChain.doFilter(request,&#160;response);<br />
　}<br />
　finally&#160;{<br />
　TransactionSynchronizationManager.unbindResource(sessionFactory);<br />
　logger.debug("Closing&#160;Hibernate&#160;Session&#160;in&#160;OpenSessionInViewFilter");<br />
　closeSession(session,&#160;sessionFactory);<br />
　}<br />
}<br />
&#160;<br />
&#160;<br />
protected&#160;Session&#160;getSession(SessionFactory&#160;sessionFactory)<br />
throws&#160;DataAccessResourceFailureException&#160;{<br />
　Session&#160;session&#160;=&#160;SessionFactoryUtils.getSession(sessionFactory,&#160;true);<br />
　session.setFlushMode(FlushMode.NEVER);<br />
　return&#160;session;<br />
}<br />
<br />
protected&#160;void&#160;closeSession(Session&#160;session,&#160;SessionFactory&#160;sessionFactory)<br />
throws&#160;CleanupFailureDataAccessException&#160;{<br />
　SessionFactoryUtils.closeSessionIfNecessary(session,&#160;sessionFactory);<br />
}<br />
&#160;<br />
&#160;&#160;&#160;&#160;&#160;可以看到OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush&#160;mode&#160;设为FlushMode.NEVER。然后把该sessionFactory绑定到&#160;TransactionSynchronizationManager，使request的整个过程都使用同一个session，在请求过后再接除该&#160;sessionFactory的绑定，最后closeSessionIfNecessary根据该&#160;session是否已和transaction绑定来决定是否关闭session。在这个过程中，若HibernateTemplate&#160;发现自当前session有不是readOnly的transaction，就会获取到FlushMode.AUTO&#160;Session，使方法拥有写权限。<br />
&#160;<br />
public&#160;static&#160;void&#160;closeSessionIfNecessary(Session&#160;session,&#160;SessionFactory&#160;sessionFactory)<br />
throws&#160;CleanupFailureDataAccessException&#160;{<br />
&#160;<br />
if&#160;(session&#160;==&#160;null&#160;||<br />
TransactionSynchronizationManager.hasResource(sessionFactory))&#160;{<br />
return;<br />
}<br />
logger.debug("Closing&#160;Hibernate&#160;session");<br />
try&#160;{<br />
session.close();<br />
}<br />
catch&#160;(JDBCException&#160;ex)&#160;{<br />
//&#160;SQLException&#160;underneath<br />
throw&#160;new&#160;CleanupFailureDataAccessException("Could&#160;not&#160;close&#160;Hibernate&#160;session",&#160;ex.getSQLException());<br />
}catch&#160;(HibernateException&#160;ex)&#160;{<br />
throw&#160;new&#160;CleanupFailureDataAccessException("Could&#160;not&#160;close&#160;Hibernate&#160;session",&#160;ex);<br />
}<br />
}<br />
&#160;<br />
&#160;&#160;&#160;&#160;也即是，如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有&#160;insert,update,delete操作权限，如果没有transaction，并且没有另外人为地设flush&#160;model的话，则doFilter的整个过程都是Flush.NEVER。所以受transaction保护的方法有写权限，没受保护的则没有。<br />
采用spring的事务声明,使方法受transaction控制<br />
&#160;<br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="baseTransaction"</span><span style="color: #FF0000; "><br />
class</span><span style="color: #0000FF; ">="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"</span><span style="color: #FF0000; "><br />
abstract</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="transactionManager"</span><span style="color: #FF0000; ">&#160;ref</span><span style="color: #0000FF; ">="transactionManager"</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="proxyTargetClass"</span><span style="color: #FF0000; ">&#160;value</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="transactionAttributes"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">props</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="get*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED,readOnly</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="find*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED,readOnly</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="load*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED,readOnly</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="save*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="add*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="update*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">prop&#160;</span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">="remove*"</span><span style="color: #0000FF; ">></span><span style="color: #000000; ">PROPAGATION_REQUIRED</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">prop</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">props</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="userService"</span><span style="color: #FF0000; ">&#160;parent</span><span style="color: #0000FF; ">="baseTransaction"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="target"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="com.phopesoft.security.service.impl.UserServiceImpl"</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;<br />
对&#160;于上例，则以save,add,update,remove开头的方法拥有可写的事务，如果当前有某个方法，如命名为importExcel()，则因没&#160;有transaction而没有写权限，这时若方法内有insert,update,delete操作的话，则需要手动设置flush&#160;model为Flush.AUTO,如<br />
session.setFlushMode(FlushMode.AUTO);<br />
session.save(user);<br />
session.flush();<br />
&#160;&#160;&#160;&#160;&#160;&#160;尽&#160;管Open&#160;Session&#160;In&#160;View看起来还不错，其实副作用不少。看回上面OpenSessionInViewFilter的doFilterInternal方法代码，这个方法&#160;实际上是被父类的doFilter调用的，因此，我们可以大约了解的OpenSessionInViewFilter调用流程:&#160;request(请求)->open&#160;session并开始transaction->controller->View(Jsp)->结束transaction并&#160;close&#160;session.<br />
&#160;&#160;&#160;&#160;&#160;一切看起来很正确，尤其是在本地开发测试的时候没出现问题，但试想下如果流程中的某一步被阻塞的话，那在这期间connection就一直被占用而不释&#160;放。最有可能被阻塞的就是在写Jsp这步，一方面可能是页面内容大，response.write的时间长，另一方面可能是网速慢，服务器与用户间传输时&#160;间久。当大量这样的情况出现时，就有连接池连接不足，造成页面假死现象。<br />
Open&#160;Session&#160;In&#160;View是个双刃剑，放在公网上内容多流量大的网站请慎用。<br />
<br />
</span></div>
</font></p>
</span>
<img src ="http://www.blogjava.net/wangbing/aggbug/273471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-05-21 20:45 <a href="http://www.blogjava.net/wangbing/archive/2009/05/21/273471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring和Hibernate结合时遇到的问题</title><link>http://www.blogjava.net/wangbing/archive/2009/05/21/273261.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Thu, 21 May 2009 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/05/21/273261.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/273261.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/05/21/273261.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/273261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/273261.html</trackback:ping><description><![CDATA[<h3>问题描述：</h3>
<h3>Write operations are not allowed in read-only mode
(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO
or remove 'readOnly' marker from transaction definition.&#160;</h3>
<img src ="http://www.blogjava.net/wangbing/aggbug/273261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-05-21 20:28 <a href="http://www.blogjava.net/wangbing/archive/2009/05/21/273261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于synchronized的一段代码</title><link>http://www.blogjava.net/wangbing/archive/2009/03/12/259427.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Thu, 12 Mar 2009 12:57:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/03/12/259427.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/259427.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/03/12/259427.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/259427.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/259427.html</trackback:ping><description><![CDATA[&#160;&#160;今天看到一段关于synchronized的小代码，比较有意思。当将S1的static去掉，这个死锁便解开了。其实也很好理解，线程1进入后锁住S1，并且等待了500，在等待时线程2来了，锁住了S2。线程1的500过了后接着锁住S2开始下面的输出，但是S2被线程2锁住不放；同样线程2锁住了S2，接着去取S1的控制权，但是线程1却握着不放。死锁便产生了。S1和S2都是static关键字修饰，他们都是共享内存空间，去掉这个关键字，那么线程1和线程2锁住的不是同一个对象了，问题也不会产生。每个对象都包含了一把锁（也叫作&#8220;监视器&#8221;），它自动成为对象的一部分（不必为此写任何特殊的代码）。调用任何synchronized方法时，对象就会被锁定，不可再调用那个对象的其他任何synchronized方法，除非第一个方法完成了自己的工作，并解除锁定。<br />
<br />
<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; ">&#160;com.example.thread2;<br />
<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&#160;TestDeadLock&#160;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&#160;Runnable&#160;{<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&#160;flag&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&#160;Object&#160;S1&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Object();<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&#160;Object&#160;S2&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Object();<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;String&#160;threadId;<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;TestDeadLock(String&#160;s){<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;threadId&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;s;<br />
&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;run()&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(threadId&#160;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:flag=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&#160;flag);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;(flag&#160;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">synchronized</span><span style="color: #000000; ">&#160;(S1)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Thread.sleep(</span><span style="color: #000000; ">500</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&#160;(Exception&#160;e)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">synchronized</span><span style="color: #000000; ">&#160;(S2)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;(flag&#160;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">synchronized</span><span style="color: #000000; ">&#160;(S2)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Thread.sleep(</span><span style="color: #000000; ">500</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&#160;(Exception&#160;e)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">synchronized</span><span style="color: #000000; ">&#160;(S1)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TestDeadLock&#160;td1&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;TestDeadLock(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">No.1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TestDeadLock&#160;td2&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;TestDeadLock(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">No.2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;td1.flag&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;td2.flag&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Thread&#160;t1&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Thread(td1);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Thread&#160;t2&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Thread(td2);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t1.start();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;t2.start();<br />
&#160;&#160;&#160;&#160;}<br />
}</span></div>
 <img src ="http://www.blogjava.net/wangbing/aggbug/259427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-03-12 20:57 <a href="http://www.blogjava.net/wangbing/archive/2009/03/12/259427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC下的权限控制（2）</title><link>http://www.blogjava.net/wangbing/archive/2009/02/20/255831.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Fri, 20 Feb 2009 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/02/20/255831.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/255831.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/02/20/255831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/255831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/255831.html</trackback:ping><description><![CDATA[利用拦截器对spring的controller进行了拦截，实现代码如下：<br />
<font  color="#002C99">
<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: #FF00FF; ">xml&#160;version="1.0"&#160;encoding="UTF-8"</span><span style="color: #0000FF; ">?></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&#160;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br />
&#160;&#160;&#160;&#160;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&#160;<br />
&#160;&#160;&#160;&#160;xmlns:aop</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/aop"</span><span style="color: #FF0000; ">&#160;<br />
&#160;&#160;&#160;&#160;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; "><br />
&#160;&#160;&#160;&#160;xmlns:context</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context"</span><span style="color: #FF0000; "><br />
&#160;&#160;&#160;&#160;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans&#160;<br />
&#160;&#160;&#160;&#160;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />
&#160;&#160;&#160;&#160;http://www.springframework.org/schema/aop<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />
&#160;&#160;&#160;&#160;http://www.springframework.org/schema/context&#160;<br />
&#160;&#160;&#160;&#160;http://www.springframework.org/schema/context/spring-context-2.5.xsd"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context:component-scan&#160;</span><span style="color: #FF0000; ">base-package</span><span style="color: #0000FF; ">="com.example"</span><span style="color: #FF0000; ">&#160;</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="handlerMappingTemplate"</span><span style="color: #FF0000; ">&#160;abstract</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&#160;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="interceptors"</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="com.example.aspect.LoginCheckInterceptor"</span><span style="color: #FF0000; ">&#160;</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"</span><span style="color: #FF0000; ">&#160;parent</span><span style="color: #0000FF; ">="handlerMappingTemplate"</span><span style="color: #FF0000; ">&#160;</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"</span><span style="color: #FF0000; ">&#160;parent</span><span style="color: #0000FF; ">="handlerMappingTemplate"</span><span style="color: #FF0000; ">&#160;</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"</span><span style="color: #FF0000; ">&#160;</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&#160;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.view.InternalResourceViewResolver"</span><span style="color: #FF0000; ">&#160;p:prefix</span><span style="color: #0000FF; ">="/app/"</span><span style="color: #FF0000; ">&#160;p:suffix</span><span style="color: #0000FF; ">=".jsp"</span><span style="color: #FF0000; ">&#160;</span><span style="color: #0000FF; ">/></span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">></span></div>
<br />
具体的java类代码也比较简单<br />
<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; ">&#160;com.example.aspect;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&#160;javax.servlet.http.HttpServletRequest;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&#160;javax.servlet.http.HttpServletResponse;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&#160;org.springframework.web.servlet.handler.HandlerInterceptorAdapter;<br />
<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&#160;LoginCheckInterceptor&#160;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&#160;HandlerInterceptorAdapter&#160;{<br />
<br />
&#160;&#160;&#160;&#160;@Override<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&#160;preHandle(HttpServletRequest&#160;request,&#160;HttpServletResponse&#160;response,&#160;Object&#160;handler)&#160;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&#160;Exception&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n\n\n\n\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">request);<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">throw</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Exception(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">用户没有该操作的权限！</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;<br />
<br />
}<br />
<br />
</span></div>
</font>
<img src ="http://www.blogjava.net/wangbing/aggbug/255831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-02-20 15:07 <a href="http://www.blogjava.net/wangbing/archive/2009/02/20/255831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC下的权限控制</title><link>http://www.blogjava.net/wangbing/archive/2009/02/19/255639.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Thu, 19 Feb 2009 12:51:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2009/02/19/255639.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/255639.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2009/02/19/255639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/255639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/255639.html</trackback:ping><description><![CDATA[研究下在SpringMVC的AOP使用，对每个函数进行拦截，判断用户是否有访问的权限。初步思路如下：<br />
1、建立大堆用户，角色，功能的表，其中最核心的是功能表，这个表每条记录对应springMVC里面的一个交易函数，后台可以利用遍历UrlMapping注释找到所有的url映射地址，即所有的功能点。<br />
2、利用AOP功能拦截Controller里面的每个函数，获取当前的request里面的用户信息，判断用户是否具有访问该函数的权限。<br />
<br />
<br />
表和配置都应该没有问题，关键是AOP的利用。
<img src ="http://www.blogjava.net/wangbing/aggbug/255639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2009-02-19 20:51 <a href="http://www.blogjava.net/wangbing/archive/2009/02/19/255639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5基于@Transactional的事物控制</title><link>http://www.blogjava.net/wangbing/archive/2008/12/24/248054.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Wed, 24 Dec 2008 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2008/12/24/248054.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/248054.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2008/12/24/248054.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/248054.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/248054.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 按照各种文章做的事物控制都不能起到作用，比较郁闷。网上看到文章说，注意使用的数据库是不是支持事物，我使用的是mysql5，不可能不支持事物啊？
<img src ="http://www.blogjava.net/wangbing/aggbug/248054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2008-12-24 13:42 <a href="http://www.blogjava.net/wangbing/archive/2008/12/24/248054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5MVC应用实例</title><link>http://www.blogjava.net/wangbing/archive/2008/12/22/247744.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Mon, 22 Dec 2008 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2008/12/22/247744.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/247744.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2008/12/22/247744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/247744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/247744.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spring2.5MVC应用实例&#160;首先在web.xml中配置spring相关servlet和listener。&#160;&#160;&#160;&#160;&#160;&#160; &lt;!--&#160; Spring 服务层的配置文件 -->&#160;&#160;&#160; &lt;context-param>&#160;&#160;&#160;&#160...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangbing/archive/2008/12/22/247744.html'>阅读全文</a><img src ="http://www.blogjava.net/wangbing/aggbug/247744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2008-12-22 13:40 <a href="http://www.blogjava.net/wangbing/archive/2008/12/22/247744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext，spring2.5，ibatis完整的例子一个</title><link>http://www.blogjava.net/wangbing/archive/2008/12/20/247496.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Sat, 20 Dec 2008 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2008/12/20/247496.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/247496.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2008/12/20/247496.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/247496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/247496.html</trackback:ping><description><![CDATA[&#160;&#160;虽然最近特别的忙，但是还是在加班加点的过程中完成了这个demo，希望借此提高下我的blog的访问量。例子主要使用了spring2.5和ibatis以及ext技术。action使用的是spring2.5的注释，ext的grid数据使用了json，利用JSONObject将对象转化成json字符串相当easy。也尝试过dwr，但是对dwrproxy不是很放心，于是放弃了。grid的分页使用了mysql语句的特性，不是利用ibatis做的，这样效率会有保证。但是切换了数据库就必须修改sql语句了。在考虑利用hibernate试试，但是本人对hibernate比较熟悉了，所以这个demo就挑了不熟悉的ibatis。不多说了，我想办法把代码传上来。为了减少大小，我去掉了jar包，同时也去掉了ext的images包，这些可以在spring的包和ext的包里面找到这些资源。有问题的话可以email给我，我的email是：bingxue2332@163.com<img src="http://www.blogjava.net/images/blogjava_net/wangbing/ext.PNG" width="813" height="372" alt="" />
<div>下载地址为：http://www.blogjava.net/Files/wangbing/greatwall.rar</div>
<img src ="http://www.blogjava.net/wangbing/aggbug/247496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2008-12-20 16:51 <a href="http://www.blogjava.net/wangbing/archive/2008/12/20/247496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5基于Annotation的事物控制问题不好的一个解决办法</title><link>http://www.blogjava.net/wangbing/archive/2008/10/08/233209.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Wed, 08 Oct 2008 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2008/10/08/233209.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/233209.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2008/10/08/233209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/233209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/233209.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5C%E7%8E%8B%E6%96%8C%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]--><style>
<!-- /* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<p class="MsoNormal"><span style="font-family: 宋体;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">下午发现的问题，晚上我把</span><span style="font-size: 10pt; font-family: 宋体;" lang="EN-US">userDao</span><span style="font-size: 10pt; font-family: 宋体;">和<span lang="EN-US">userService</span>的定义移到了<span lang="EN-US">dataAccessContext-jdbc.xml</span>后，事物又有效了。看来网友的分析是对的，事物没有启动是因为<span lang="EN-US">bean</span>的加载的原因。但是这样的话感觉不是很爽了，一部分是<span lang="EN-US">xml</span>文件，一部分是注释。继续找好的办法搞定这个问题。</span></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; &lt;bean id="userDao" class="com.example.springdemo.dao.impl.UserDAOImpl" /&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean id="userService" class="com.example.springdemo.service.impl.UserServiceImpl" /&gt;</p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; 至于java类中还是保持@Autowired的注释。<br />
<span style="font-size: 10pt; font-family: 宋体;"><span lang="EN-US"><o:p></o:p></span></span></p>
<img src ="http://www.blogjava.net/wangbing/aggbug/233209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2008-10-08 19:45 <a href="http://www.blogjava.net/wangbing/archive/2008/10/08/233209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5基于Annotation的事物控制问题</title><link>http://www.blogjava.net/wangbing/archive/2008/10/08/233203.html</link><dc:creator>wangchangbing</dc:creator><author>wangchangbing</author><pubDate>Wed, 08 Oct 2008 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/wangbing/archive/2008/10/08/233203.html</guid><wfw:comment>http://www.blogjava.net/wangbing/comments/233203.html</wfw:comment><comments>http://www.blogjava.net/wangbing/archive/2008/10/08/233203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbing/comments/commentRss/233203.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbing/services/trackbacks/233203.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Normal07.8 磅02falsefalsefalseMicrosoftInternetExplorer4/* Style Definitions */table.MsoNormalTable{mso-style-name:普通表格;mso-tstyl...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangbing/archive/2008/10/08/233203.html'>阅读全文</a><img src ="http://www.blogjava.net/wangbing/aggbug/233203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbing/" target="_blank">wangchangbing</a> 2008-10-08 18:59 <a href="http://www.blogjava.net/wangbing/archive/2008/10/08/233203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>