﻿<?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-StevenBot-Saltsam-文章分类-spring</title><link>http://www.blogjava.net/Steven-bot/category/49761.html</link><description>眼睛能装下世界，为何却装不下眼泪? 一只风筝一辈子只为一根线冒险。 
那不是一场游戏，为何总有一根线牵着心怀，隐隐作疼？
那不是一段邂逅，为何飘在桥上的影子，总缠进梦乡？
那不是一个梦境，为何你的温柔私语，总是不经意的响起？</description><language>zh-cn</language><lastBuildDate>Wed, 01 Feb 2012 22:54:18 GMT</lastBuildDate><pubDate>Wed, 01 Feb 2012 22:54:18 GMT</pubDate><ttl>60</ttl><item><title>Spring定时器的两种实现方式</title><link>http://www.blogjava.net/Steven-bot/articles/363924.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Wed, 16 Nov 2011 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/363924.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/363924.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/363924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/363924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/363924.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spring定时器的两种实现方式有两种流行Spring定时器配置：Java的Timer类和OpenSymphony的Quartz。1.Java Timer定时首先继承java.util.TimerTask类实现run方法import&nbsp;java.util.TimerTask;&nbsp; &nbsp;public&nbsp;class&nbsp;EmailReportTask&nbsp;e...&nbsp;&nbsp;<a href='http://www.blogjava.net/Steven-bot/articles/363924.html'>阅读全文</a><img src ="http://www.blogjava.net/Steven-bot/aggbug/363924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-11-16 09:57 <a href="http://www.blogjava.net/Steven-bot/articles/363924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring提供了filed的值注入和method的返回值注入</title><link>http://www.blogjava.net/Steven-bot/articles/363827.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Tue, 15 Nov 2011 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/363827.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/363827.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/363827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/363827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/363827.html</trackback:ping><description><![CDATA[<div><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; background-color: #ffffff; color: red; ">spring提供了filed的值注入和method的返回值注入。&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">1、Field值的注入&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">filed值注入需要使用org.springframework.beans.factory.config.FieldRetrievingFactoryBean来获取类的静态变量。&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">例如，我们通常在接口中定义常量：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">view plaincopy to clipboardprint?package com.baobaotao.fb;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">public interface CarBrandType {&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; String HONG_QI = "红旗";&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; String JI_LI = "吉利";&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">}&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">package com.baobaotao.fb;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">public interface CarBrandType {&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; String HONG_QI = "红旗";&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; String JI_LI = "吉利";&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">}&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">下面利用FieldRetrievingFactoryBean获取CarBandType接口中定义的常量，并注入到某个bean的属性中：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">view plaincopy to clipboardprint?&lt;bean id="car" class="com.baobaotao.fb.Car"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="brand" ref="hongQi"/&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="hongQi" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="staticField" value="com.baobaotao.fb.CarBrandType.HONG_QI"/&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="car" class="com.baobaotao.fb.Car"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="brand" ref="hongQi"/&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="hongQi" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="staticField" value="com.baobaotao.fb.CarBrandType.HONG_QI"/&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">Spring还允许用户用常量的全限定名作为FieldRetrievingFactoryBean的id，其效果和通过配置staticField属性是一样的：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">view plaincopy to clipboardprint?&lt;bean id="car" class="com.baobaotao.fb.Car"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="brand" ref="com.baobaotao.fb.CarBrandType.HONG_QI"/&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" /&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="car" class="com.baobaotao.fb.Car"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="brand" ref="com.baobaotao.fb.CarBrandType.HONG_QI"/&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" /&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">当然，也可以直接将FieldRetrievingFactoryBean以内置bean的方式对brand属性进行赋值，这样在配置上更紧凑一些：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">view plaincopy to clipboardprint?&lt;bean id="car" class="com.baobaotao.fb.Car"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="brand"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="car" class="com.baobaotao.fb.Car"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;property name="brand"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="com.baobaotao.fb.CarBrandType.HONG_QI" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">2、Method返回值的注入&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">Method返回值的注入需要使用MethodInvokingFactoryBean来完成。&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">在xml配置中，需要设定targetObject和targetMethod来指定目标bean和方法。如果使用静态方法，则需要指定targetClass和targetMethod&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">配置文件如下：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">view plaincopy to clipboardprint?&lt;bean id="bdog" class="com.baobaotao.fb.Dog"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp; &lt;property name="age"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="randomAge"/&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;getAge&lt;/value&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="randomAge" class="com.baobaotao.fd.RandomAge" /&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="bdog" class="com.baobaotao.fb.Dog"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp; &lt;property name="age"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="randomAge"/&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;getAge&lt;/value&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp; &lt;/property&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;bean id="randomAge" class="com.baobaotao.fd.RandomAge" /&gt;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">对于静态方法：&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">view plaincopy to clipboardprint?&lt;bean id="bdog" class="com.baobaotao.fb.Dog"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp; &lt;property name="age"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetClass"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;com.baobaotao.fb.RandomAge&lt;/value&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- getAge必须是静态方法 --&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;getAges&lt;/value&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&nbsp; &lt;/property&gt;&nbsp;&nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; ">&lt;/bean&gt; &nbsp;</span></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/363827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-11-15 14:04 <a href="http://www.blogjava.net/Steven-bot/articles/363827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenSessionInViewFilter 配置解决延迟加载</title><link>http://www.blogjava.net/Steven-bot/articles/363265.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Wed, 09 Nov 2011 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/363265.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/363265.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/363265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/363265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/363265.html</trackback:ping><description><![CDATA[<div><span style="color: #4d4d4d; font-family: Tahoma, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 26px; background-color: #ffffff; ">一、手动加载 如：</span><div style="color: #4d4d4d; font-family: Tahoma, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 26px; text-align: left; background-color: #eeeeee; border-bottom-color: #cccccc; border-bottom-width: 1px; border-bottom-style: solid; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-bottom: 4px; padding-left: 4px; width: 479px; padding-right: 5px; word-break: break-all; border-top-color: #cccccc; border-top-width: 1px; border-top-style: solid; border-right-color: #cccccc; border-right-width: 1px; border-right-style: solid; padding-top: 4px; "><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /><span style="color: #000000; ">Hibernate.initialize(obj.getUser());</span><span style="color: #008000; ">//</span><span style="color: #008000; ">加载用户对象&nbsp;</span><span style="color: #008000; "><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #000000; "><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span></div><br style="color: #4d4d4d; font-family: Tahoma, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 26px; text-align: left; background-color: #ffffff; " /><br style="color: #4d4d4d; font-family: Tahoma, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 26px; text-align: left; background-color: #ffffff; " /><span style="color: #4d4d4d; font-family: Tahoma, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 26px; text-align: left; background-color: #ffffff; ">二、使用OpenSessionInViewFilter 配置解决延迟加载 如：</span><div style="color: #4d4d4d; font-family: Tahoma, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 26px; text-align: left; background-color: #eeeeee; border-bottom-color: #cccccc; border-bottom-width: 1px; border-bottom-style: solid; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-bottom: 4px; padding-left: 4px; width: 479px; padding-right: 5px; word-break: break-all; border-top-color: #cccccc; border-top-width: 1px; border-top-style: solid; border-right-color: #cccccc; border-right-width: 1px; border-right-style: solid; padding-top: 4px; "><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">OpenSessionInViewFilter&nbsp;解决延迟加载问题&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">filter</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">OpenSessionInViewFilter</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">filter-class</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&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; ">filter-class</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;singleSession默认为true,若设为false则等于没用OpenSessionInView&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">init-param</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">param-name</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">singleSession</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">param-name</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">param-value</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">true</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">param-value</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">init-param</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">filter</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">OpenSessionInViewFilter</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">/*</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; " /></span></div></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/363265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-11-09 10:16 <a href="http://www.blogjava.net/Steven-bot/articles/363265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Spring和Quartz进行定时邮件发送 </title><link>http://www.blogjava.net/Steven-bot/articles/361336.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Sat, 15 Oct 2011 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/361336.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/361336.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/361336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/361336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/361336.html</trackback:ping><description><![CDATA[<div><h1><div><div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: Arial; font-weight: normal; ">关于Spring的邮件发送的功能演示:(下面是我自己写的一个可以发送简单邮件和附件的邮件功能，可以改换邮箱后直接使用)? 需要用到的jar包是</span></div><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  spring-context.jar</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? mail-1.4.jar</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? spring-core.jar</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  activation.jar</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? commons-logging.jar</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  这些是程序必须要用到的包。1.BaseMailSender.javapackage com.trisun.T82A.java.mail;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  org.springframework.mail.javamail.JavaMailSender;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">public abstract class  BaseMailSender {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?protected String to;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?protected String  from;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?protected String subject;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?protected  JavaMailSendersender;//当发送MIMI消息时用到的类?public void setTo(String to) {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  this.to = to;?public void setFrom(String from) {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? this.from = from;?public  void setSubject(String subject) {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? this.subject = subject;?public void  setJavaMailSender(JavaMailSendersender) {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? this.sender =  sender;}2.SimpleHtmlMailSender.javapackage com.trisun.T82A.java.mail;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  java.io.File;import javax.mail.MessagingException;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  javax.mail.internet.MimeMessage;import  org.springframework.core.io.ClassPathResource;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  org.springframework.core.io.FileSystemResource;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  org.springframework.mail.javamail.MimeMessageHelper;public class  SimpleHtmlMailSender extendsBaseMailSender{?public? void sendMessage()throws  MessagingException {????? String textStr  ="&lt;html&gt;&lt;head&gt;&lt;metahttp-equiv=\"Content-Type\"  content=\"text/html;charset=gb2312\"&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;&lt;ahref='#'&gt;^_^!&lt;/a&gt;&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;";?  //String textStr = "Helo could you see thisemail?";//发送邮件的消息主体?  //SimpleMailMessage msg = newSimpleMailMessage();? //当发送邮件为简单邮件时把此句注销即可?  MimeMessage msg =sender.createMimeMessage();</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? MimeMessageHelper helper =  newMimeMessageHelper(msg, true, "utf-8");? helper.setTo(to);</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  helper.setFrom(from);</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? helper.setSubject(subject);</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?//  helper.addAttachment("a.doc", newClassPathResource("/a.doc"));</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  FileSystemResource file = newFileSystemResource(newFile("d:/mail/b.rar"));???  helper.addAttachment("b.rar",file);</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? helper.setText(textStr, true);</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?  sender.send(msg);</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?}?}3.SpringSendMail.javapackage  com.trisun.T82A.java.mail;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  java.util.TimerTask;importorg.springframework.context.support.ClassPathXmlApplicationContext;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">import  org.springframework.mail.javamail.JavaMailSenderImpl;?public class  SpringSendMail{</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">????public SimpleHtmlMailSender messageSender;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?public  SimpleHtmlMailSender getMessageSender(){</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??return messageSender;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?}?public  voidsetMessageSender(SimpleHtmlMailSender messageSender)  {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??this.messageSender =messageSender;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?}?public SpringSendMail() {}?  private JavaMailSenderImpl mailSender;? public JavaMailSenderImpl  getMailSender(){</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">????return mailSender;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">? }? public  voidsetMailSender(JavaMailSenderImpl mailSender) {</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">????this.mailSender =  mailSender;? public void execute()  {????try{??</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??????messageSender.sendMessage();</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">????System.out.println("发送成功");????}catch(Exception  e){</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?????e.printStackTrace();? }?}</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">4.applicationContext-mail.xml&lt;?xml  version="1.0"encoding="UTF-8"?&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">&lt;beans  xmlns="http://www.springframework.org/schema/beans"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?default-lazy-init="true"&gt;?&lt;bean  id="sender"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??class="org.springframework.mail.javamail.JavaMailSenderImpl"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="host"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;value&gt;smtp服务器地址&lt;/value&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="username"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;value&gt;user&lt;/value&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="password"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;value&gt;pwd&lt;/value&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="javaMailProperties"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;props&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">????&lt;propkey="mail.smtp.auth"&gt;true&lt;/prop&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;/props&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;/bean&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;bean  id="messageSender"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??class="com.trisun.T82A.java.mail.SimpleHtmlMailSender"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="javaMailSender"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;refbean="sender"  /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="to"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;value&gt;64256975@qq.com&lt;/value&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="from"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;value&gt;t8log@jhsys.cn&lt;/value&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="subject"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;value&gt;test&lt;/value&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;/bean&gt;&lt;/beans&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">5.applicationContext-quartz.xml&lt;?xml  version="1.0"encoding="UTF-8"?&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">&lt;beans  xmlns="http://www.springframework.org/schema/beans"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?default-lazy-init="false"&gt;?&lt;bean  id="springSendMail"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??class="com.trisun.T82A.java.mail.SpringSendMail"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="messageSender"  ref="messageSender"  /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;/bean&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;beanid="springSendMailDetail"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="concurrent"  value="true" /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="targetObject" ref="springSendMail"  /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="targetMethod" value="execute"  /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;/bean&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;!--?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Seconds?YES? 0-59? , -  */?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Minutes?YES? 0-59? , - */?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Hours?YES? 0-23? , - */?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Day of  month?YES? 1-31? , - * ? / L W</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Month?YES? 1-12 or JAN-DEC? , - */?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Day  of week?YES? 1-7 or SUN-SAT? , - * ? / L#?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??Year?NO? empty, 1970-2099? , -  */?</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?--&gt;?&lt;beanid="springSendMailDetailTask"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="jobDetail"  ref="springSendMailDetail" /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;!-- 0 * * * *  ?*???每分钟--&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;!-- 0 0 0 * * ?*???每天--&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;!-- 0 0 0 1 *  ?*???每月--&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="cronExpression" value="0/3 * * * *  ?*"&gt;&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;/bean&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;bean  id="QuartzJobFactory"</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="triggers"&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;list&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">????&lt;refbean="springSendMailDetailTask"  /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">???&lt;/list&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;/property&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;!--设置是否Spring容器初始化后马上启动Scheduler，默认为true。如果设置为false则需要手工启动Scheduler--&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">??&lt;propertyname="autoStartup"  value="true" /&gt;</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">?&lt;/bean&gt;&lt;/beans&gt;秒 是 0-59 , - * /</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">分 是 0-59 ,  - * /</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">时 是 0-23 , - * /</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">日 是 1-31 , - * ? / L W C</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">月 是 1-12 或 JAN-DEC , -  * /</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">周 是 1-7 或 SUN-SAT , - * ? / L C #</div></span><span class="Apple-style-span" style="font-weight: normal; font-family: Arial; "><div style="text-align: left;">年 否 空 或 1970-2099 , - * /</div></span></div></div></h1></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/361336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-10-15 09:55 <a href="http://www.blogjava.net/Steven-bot/articles/361336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC web框架学习 Controller 分析</title><link>http://www.blogjava.net/Steven-bot/articles/361335.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Sat, 15 Oct 2011 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/361335.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/361335.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/361335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/361335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/361335.html</trackback:ping><description><![CDATA[<div><h2><a id="viewpost1_TitleUrl" href="http://www.blogjava.net/wangajing/archive/2009/11/26/303714.html">SpringMVC  web框架学习 Controller 分析</a> </h2> <div> <p>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/AbstractController.html"><strong>AbstractController</strong></a>  (implements org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/Controller.html">Controller</a>)   </p><ul> <li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/AbstractUrlViewController.html"><strong>AbstractUrlViewController</strong></a>   <ul> <li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/UrlFilenameViewController.html"><strong>UrlFilenameViewController</strong></a></li></ul> </li><li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/BaseCommandController.html"><strong>BaseCommandController</strong></a>   <ul> <li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/AbstractCommandController.html"><strong>AbstractCommandController</strong></a>   </li><li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/AbstractFormController.html"><strong>AbstractFormController</strong></a>   <ul> <li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/AbstractWizardFormController.html"><strong>AbstractWizardFormController</strong></a>   </li><li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/SimpleFormController.html"><strong>SimpleFormController</strong></a>   <ul> <li>org.springframework.web.servlet.mvc.<a href="http://www.blogjava.net/org/springframework/web/servlet/mvc/CancellableFormController.html"><strong>CancellableFormController</strong></a></li></ul></li></ul></li></ul></li></ul> <p>Spring MVC框架中的Controller对请求进行处理：所有的Controller都实现接口Controller：</p><pre>public interface Controller {       /**      * Process the request and return a ModelAndView object which the DispatcherServlet      * will render. A &lt;code&gt;null&lt;/code&gt; return value is not an error: It indicates that      * this object completed request processing itself, thus there is no ModelAndView      * to render.      * @param request current HTTP request      * @param response current HTTP response      * @return a ModelAndView to render, or &lt;code&gt;null&lt;/code&gt; if handled directly      * @throws Exception in case of errors      */     ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;   } 上面的doc表明Controller返回的modelandview可以使空，表明请求都是该函数中处理完成了，不需要modeland来进行渲染。</pre><pre>&nbsp;</pre><pre>在继续之前先介绍一个有用的工具类：WebUtils。用这个可以简化session，request的处理。具体的内容可以参考文档。</pre><pre>&nbsp;</pre><pre>Controller的第一个实现是：AbstractController。他是一个Abstract类，除了实现了Controller接口，它还继承了WebContentGenerator。</pre><pre>&nbsp;</pre><pre>WebContentGenerator的作用是什么？参考文档可以发现，该类主要对Cache和Session进行管理。</pre><pre>&nbsp;</pre> <table border="2" cellspacing="1" cellpadding="2" width="700"> <tbody> <tr> <td valign="top" width="350"><strong>cacheSeconds</strong></td> <td valign="top" width="350">指定内容缓存的时间，默认为1</td></tr> <tr> <td valign="top" width="350"><strong>requireSession</strong></td> <td valign="top" width="350">是否需要会话，默认支持</td></tr> <tr> <td valign="top" width="350"><strong>supportedMethods</strong></td> <td valign="top" width="350">支持的方法，默认是GET\post\Head</td></tr> <tr> <td valign="top" width="350"><strong>useCacheControlHeader</strong></td> <td valign="top" width="350">指定是否使用http1.1的cache控制头信息，默认使用</td></tr> <tr> <td valign="top" width="350"><strong>useCacheControlNoStore</strong></td> <td valign="top" width="350">指定是否设置http1.1的cache控制头信息为no-store。默认使用</td></tr> <tr> <td valign="top" width="350"><strong>useExpiresHeader</strong></td> <td valign="top" width="350">指定是否使用http1.0的expire头信息。默认使用</td></tr></tbody></table><pre>用户可以对这些参数进行测试,cache和expire信息涉及到了http协议信息，更多信息可以参考http协议文档。这里不再说明。</pre><pre>&nbsp;</pre><pre>再看AbstractController的代码：</pre> <div><pre>public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)<br />            throws Exception { <br /><br />        // Delegate to WebContentGenerator for checking and preparing.<br />        checkAndPrepare(request, response, this instanceof LastModified); <br /><br />        // Execute handleRequestInternal in synchronized block if required.<br />        if (this.synchronizeOnSession) {<br />            HttpSession session = request.getSession(false);<br />            if (session != null) {<br />                Object mutex = WebUtils.getSessionMutex(session);<br />                synchronized (mutex) {<br />                    return handleRequestInternal(request, response);<br />                }<br />            }<br />        }<br />        return handleRequestInternal(request, response);<br />    }<br />checkandPrepare的目的就是使用用于进行的配置来对request进行预处理和准备。</pre></div> <div><pre>他会检查支持的方法，和会话，然后应用cache设置。</pre></div> <div><pre>如果需要session同步，就进行同步处理。session同步应用于有session的情况下。如果没有session，session同步是没有用的。</pre></div> <div><pre>AbstractController会调用handleRequestInternal方法进行处理，继承AbstractController的类需要实现该方法。<br /></pre></div> <div>下面我们再看看<strong>AbstractUrlViewController</strong>  的代码实现和文档，先看handleRequestInternal的实现：</div> <div><br />&nbsp;</div> <div id="codeSnippetWrapper"><pre id="codeSnippet">/**<br /> * Retrieves the URL path to use for lookup and delegates to<br /> * {@link #getViewNameForRequest}.<br /> */<br />protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {<br />    String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);<br />    String viewName = getViewNameForRequest(request);<br />    if (logger.isDebugEnabled()) {<br />        logger.debug("Returning view name '" + viewName + "' for lookup path [" + lookupPath + "]");<br />    }<br />    return new ModelAndView(viewName);<br />}<br /></pre></div> <div>可以看到，它使用了getViewNameForRequest获取需要的viewName。而getViewNameForRequest是一个抽象函数，需要子类实现。lookupPath就是我们请求的URL中的一部分。如我们使用<strong>UrlFilenameViewController来进行如下的配置：</strong></div> <div>&lt;bean name="/index.do"  class="org.springframework.web.servlet.mvc.UrlFilenameViewController"&gt;&lt;/bean&gt;、</div> <div>09-11-25 11:56:06 - DEBUG [http-8200-1] - Returning view name 'index' for  lookup path [/index.do]</div> <div>该Controller对/index.do解析成index，然后再通过viewResolver对index进行扩展为/jsp/index.jsp。从而找到该页面。</div> <div>可以看到这个类的主要是用于对url进行解析，然后转到合适的页面上，而在转到这个页面之前不需要进行特别的处理。</div> <div>明白了该类的作用自然也就知道了UrlFilenameViewController的作用。这里不再进行详细分析。</div></div></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/361335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-10-15 09:49 <a href="http://www.blogjava.net/Steven-bot/articles/361335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring web MVC 框架学习笔记 之 ViewResolver技术  </title><link>http://www.blogjava.net/Steven-bot/articles/361334.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Sat, 15 Oct 2011 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/361334.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/361334.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/361334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/361334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/361334.html</trackback:ping><description><![CDATA[<div><p>ModelAndView对象中的view对象，可以使用字符串来让Spring框架进行解析获得适合的视图。而解析View的就是ViewResolver技术。</p> <p>ViewResolver的定义如下：</p><pre>public interface ViewResolver {<br /> View resolveViewName(String viewName, Locale locale) throws Exception;<br /> }</pre><pre>&nbsp;</pre><pre>在[spring-dispatcher-name]-servlet.xml中，可以定义viewResolver：</pre> <p>&lt;bean id="viewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;property name="prefix" value="/jsp/"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property  name="suffix" value=".jsp"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/bean&gt; </p> <p>来让DispacherServlet进行加载默认的viewResolver，如果没有设置viewResolver，spring使用InternalResourceViewResolver进行解析。</p> <p>Spring实现ViewResolver的非抽象类且我们经常使用的viewResolver有以下四种：</p> <table border="2" cellspacing="1" cellpadding="2" width="700" unselectable="on"> <tbody> <tr> <td valign="top" width="350">InternalResourceViewResolver</td> <td valign="top" width="350">将逻辑视图名字解析为一个路径</td></tr> <tr> <td valign="top" width="350">BeanNameViewResolver</td> <td valign="top" width="350">将逻辑视图名字解析为bean的Name属性，从而根据name属性，找定义View的bean</td></tr> <tr> <td valign="top" width="350">ResourceBundleResolver</td> <td valign="top" width="350">和BeanNameViewResolver一样，只不过定义的view-bean都在一个properties文件中，用这个类进行加载这个properties文件</td></tr> <tr> <td valign="top" width="350">XmlViewResolver</td> <td valign="top" width="350">和ResourceBundleResolver一样，只不过定义的view-bean在一个xml文件中，用这个类来加载xml文件</td></tr></tbody></table> <p>&nbsp;</p> <p>使用多视图解析器：</p> <p>我们不想只使用一种视图解析器的话，可以在[spring-dispatcher-name]-servlet.xml定义多个viewResolver：</p> <div id="codeSnippetWrapper"><pre id="codeSnippet">&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br /> &lt;property name="prefix" value="/jsp/"/&gt;<br /> &lt;property name="suffix" value=".jsp"/&gt;<br /> &lt;/bean&gt;<br /> <br /> &lt;bean id=&#8221;beanNameViewResolver&#8221; class=&#8221;...BeanNameViewResolver&#8221;&gt;<br /> &lt;property name="order" value="1"&gt;&lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br /> &lt;bean id=&#8221;beanNameViewResolver&#8221; class=&#8221;...XmlViewResolver&#8221;&gt;<br /> &lt;property name="order" value="0"&gt;&lt;/property&gt;<br /> &lt;/bean&gt;</pre></div> <p>DispatcherServlet会加载所有的viewResolver到一个list中，并按照优先级进行解析。注意order中的值越小，优先级越高。而id为viewResolver</p> <p>的viewResolver的优先级是最低的。</p></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/361334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-10-15 09:48 <a href="http://www.blogjava.net/Steven-bot/articles/361334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring3中js/css/jpg/gif等静态资源无法找到（No mapping found for HTTP request with URI）问题解决</title><link>http://www.blogjava.net/Steven-bot/articles/361333.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Sat, 15 Oct 2011 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/361333.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/361333.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/361333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/361333.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/361333.html</trackback:ping><description><![CDATA[<div><p><span style="font-family: Arial; font-size: 16px">最近项目中使用到Spring3，在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情，实在无法忍受</span></p> <p><span style="background-color: #660000; font-family: Arial; color: #99e600; font-size: 16px">问题：</span><span style="font-family: Arial; font-size: 16px">部署项目后程序加载或用浏览器访问时出现类似的警告，2011-01-19  10:52:51,646 WARN [org.springframework.web.servlet.PageNotFound] -</span><span style="font-family: Arial; color: #ff0000; font-size: 16px">&lt;No mapping found  for HTTP request with URI [/sandDemo001/images/1.jpg] in DispatcherServlet with  name 'spring'&gt;</span><span style="font-family: Arial; font-size: 16px">，主要看尖括号内部分。</span></p> <p><span style="background-color: #660000; font-family: Arial; color: #99e600; font-size: 16px">问题原因：</span><span style="font-family: Arial; font-size: 16px">罪魁祸首是web.xml下对spring的DispatcherServlet请求url映射的配置，原配置如下：</span></p> <p><strong><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&lt;servlet&gt;</span><br /><span style="font-family: 'Comic Sans MS'; color: #660000; font-size: 14px; background-color: #d9d9d9; ">&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;spring&lt;/servlet-name&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&nbsp;&nbsp;  &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&nbsp;&nbsp;  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&lt;/servlet&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&lt;servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;spring&lt;/servlet-name&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;url-pattern&gt;/&lt;/url-pattern&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; color: #660000; font-size: 14px">&nbsp;&lt;/servlet-mapping&gt;</span></strong></p> <p><span style="background-color: #ffffff; color: #660000; font-size: 14px"><span style="background-color: #660000; font-family: Arial; color: #99e600; font-size: 16px">分析原因：</span><span style="background-color: #d9d9d9; font-family: Arial; color: #660000; font-size: 16px">&lt;servlet-mapping&gt;</span><span style="font-family: Arial; font-size: 16px">的</span><span style="background-color: #d9d9d9; font-family: Arial; color: #660000; font-size: 16px">&lt;url-pattern&gt;/&lt;/url-pattern&gt;</span><span style="font-family: Arial; font-size: 16px">把所有的请求都交给spring去处理了，而所有available的请求url都是在Constroller里使用类似@RequestMapping(value  = "/login/{user}", method =  RequestMethod.GET)这样的注解配置的，这样的话对js/css/jpg/gif等静态资源的访问就会得不到。</span></span></p> <p><span style="background-color: #ffffff; color: #660000; font-size: 14px"><span style="background-color: #660000; font-family: Arial; color: #99e600; font-size: 16px">解决方法：</span><span style="font-family: Arial; font-size: 16px">在web.xml里添加如下的配置</span></span></p> <p><strong><span style="background-color: #ffffff; color: #660000; font-size: 14px"><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&lt;servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;default&lt;/servlet-name&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;  &nbsp;&lt;url-pattern&gt;*.css&lt;/url-pattern&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&lt;/servlet-mapping&gt;</span><br />&nbsp;<br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&lt;servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;default&lt;/servlet-name&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;*.gif&lt;/url-pattern&gt;</span></span></strong></p> <p><strong><span style="background-color: #ffffff; color: #660000; font-size: 14px"><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&lt;/servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&lt;servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;default&lt;/servlet-name&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;  &lt;url-pattern&gt;*.jpg&lt;/url-pattern&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&lt;/servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&lt;servlet-mapping&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;default&lt;/servlet-name&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&nbsp;&nbsp;&nbsp;  &lt;url-pattern&gt;*.js&lt;/url-pattern&gt;</span><br /><span style="background-color: #d9d9d9; font-family: Comic Sans MS; font-size: 14px">&nbsp;&lt;/servlet-mapping&gt;<br /><br /><div><p><strong><span style="background-color: #ffffff; font-family: Arial; color: #ff0000; font-size: 18px">解决方法2：<span style="color: #000000; font-size: 14px">在spring的配置文件中添加如下一行：</span></span></strong></p> <p><strong></strong><span style="background-color: #ffffff; color: #660000; font-size: 14px"><strong><span style="color: #006699"><span>&lt;mvc:default-servlet-handler/&gt;</span></span></strong></span></p> <p><span style="background-color: #ffffff; color: #660000; font-size: 14px">注意，需要是spring3.0.5以上版本<br /><div><span style="font-family: verdana, 'courier new'; color: #000000; font-weight: normal; "><strong><span style="background-color: #ffffff; color: #660000; font-size: 14px; "><span style="background-color: #d9d9d9; font-family: 'Comic Sans MS'; font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "><strong><span style="background-color: #ffffff; font-family: Arial; color: #ff0000; font-size: 18px; ">解决方法3</span></strong></p></div></span></span></strong></span></div><div><div style="overflow: hidden; word-break: normal" name="cmtcontent">&lt;!-- Handles HTTP GET requests for /resources/** by efficiently serving up  static resources in the ${webappRoot}/resources directory  --&gt;<br />&nbsp;<br />&nbsp;&lt;mvc:resources mapping="/resources/**" location="/resources/"  /&gt; <br />&nbsp; <br />这个配置告诉spring 静态资源的处理方式</div></div></span></p></div></span></span></strong></p></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/361333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-10-15 09:45 <a href="http://www.blogjava.net/Steven-bot/articles/361333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对比Spring 1.0与2.0的事务配置方式</title><link>http://www.blogjava.net/Steven-bot/articles/360155.html</link><dc:creator>Steven_bot</dc:creator><author>Steven_bot</author><pubDate>Sat, 08 Oct 2011 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/Steven-bot/articles/360155.html</guid><wfw:comment>http://www.blogjava.net/Steven-bot/comments/360155.html</wfw:comment><comments>http://www.blogjava.net/Steven-bot/articles/360155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Steven-bot/comments/commentRss/360155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Steven-bot/services/trackbacks/360155.html</trackback:ping><description><![CDATA[<div><span style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 13px; line-height: 19px; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #ffff00; ">Spring</span></span>&nbsp;1.0的标准事务配置&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />先定义一个baseTxService进行基本的事务定义，类型为TransactionProxyFactoryBean。如果service没有基于接口，使用cgilib来实现AOP，定义&lt;property name="proxyTargetClass" value="true"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />实际的Manager类设置parent=baseTxService，target 为匿名的实际Manager类。如果需要定义特殊的事务，利用merge=true的属性，在manager的transactionAttributes节点进行新事务的定义。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstract="true"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="transactionManager" ref="transactionManager"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="proxyTargetClass" value="true"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="transactionAttributes"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;props&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="find*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="remove*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/props&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="preInterceptors"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="methodSecurityInterceptor"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;/bean&gt; &lt;bean id="bookManager" parent="baseTxService"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="target"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.springside.bookstore.admin.manager.BookManager"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;/bean&gt;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #ffff00; ">Spring</span></span>&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>.0的新配置：&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />如果如果service没有基于接口，使用cgilib来实现AOP，定义proxy-target-class="true"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;aop:config proxy-target-class="true"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; &lt;aop:advisor pointcut="execution(* com.xyz.service..*Manager.*(..))" advice-ref="txAdvice"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; &lt;aop:advisor pointcut="execution(* com.xyz.service..*Manager.save(..))" advice-ref="fooAdvice"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;/aop:config&gt;&lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; &lt;tx:attributes&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name="get*" read-only="true"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name="find*" read-only="true"/&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name="*" /&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp; &lt;/tx:attributes&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;/tx:advice&gt;&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&lt;bean id="bookManager" class="org.springside.bookstore.commons.service.BookManager"/&gt;&nbsp;&nbsp; 其中com.xyz是你的项目package限定前缀。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>.进步&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />1. AOP的配置方式也AOP了。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对比1.0的配置文件，因为下面<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>提到的限制，事关安全acegi methodSecurityInterceptor 拦截器要配置在关于事务的TransactionProxyFactoryBean的preInterceptors属性里，这样子就一点不AOP了。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>.0使用ponintcut expression，很AOP的配置一切Aspect。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>. 1.0时，一个已经AOP过的object不能再次被AOP。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp; 在<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #ffff00; ">Spring</span></span>&nbsp;1.0的文档里Rod说，比如&lt;bean id="bookManager" parent="baseTxService"&gt;已经进行了一次AOP，如果想在这个Bean上再配一层AOP，比如要对方法执行结果缓存，无论以1.0 还是<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>.0的方式定义，cglib方式是会报错的，而基于接口的方式，结果不确定。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />3. BookManager能直接定义自己，而不是像1.0那样作匿名内部target。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />虽然在1.0时代的BeanNameAutoProxyCreator 达到类似作用，但只能用BeanName来模糊匹配比较危险，没有AspectJ的pointcut语法细致。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />3. 语法&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />满江红翻译的&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #ffff00; ">Spring</span></span>参考文档 6.3 schema-based AOP support 提供了aspect,advisor,advide三种组装方法的解释，其中aspect是aspectJ原装，但稍复杂。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />唯一有点难懂的是pointcut里的语法，其实也很好学，<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #ffff00; ">Spring</span></span>参考文档6.<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>.3.4 示例里有完整说明 ，其实一排子过去是&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)其中带问号的modifiers-pattern?(public/protected) 和 declaring-type-pattern? throws-pattern? 可以不填&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />execution(* *..BookManager.save(..))的解读:&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />第一颗* 代表ret-type-pattern 返回值可任意，&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />*..BookManager 代表任意Pacakge里的BookManager类。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />如果写成com.xyz.service.* 则代表com.xyz.service下的任意类&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />save代表save方法，也可以写save* 代表saveBook()等方法&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />(..) 匹配0个参数或者多个参数的，任意类型&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />(x,..) 第一个参数的类型必须是X&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />(x,,,s,..) 匹配至少4个参数，第一个参数必须是x类型，第二个和第三个参数可以任意，第四个必须是s类型。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp; 注意事项：&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />1. name-pattern千万不要写成*..*Manager ，这样子会把所有第三方类库的Manager比如<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #ffff00; ">Spring</span></span>的PlatformTranstationManager 也加入aop，非常危险。所以最好还是加上项目的package前缀，如"org.springside..*Manager"&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.5; background-color: #55ff55; ">2</span></span>. 因为有*，会修饰所有方法，有些hibernateTemplate的final的方法不能被cglib修改，会抛warning，无害。&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />4. 事务定义选项&nbsp;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />事务定义一般默认的PROPAGATION_REQUIRED即可，另提供的几个选择很少使用。值得注意的是一个PROPAGATION_NESTED，嵌入式事务的意义在于多级事务，如果出错只rollback子事务自己，不rollback主事务的所有操作。比如OrderManager的shipOrder函数 调用 save函数，如果save()被定义为嵌入式事务，当进入save()时，会存储save point。如果在save 中出错，会rollback 到刚才的save point，但不影响其他的操作。这需要JDBC3.0 SavePoint功能的支持。 而一般service间互相嵌入调用时，如果都定义为PROPAGATION_REQUIRED，有其中一个操作出错，rollback全部操作。</span></div><img src ="http://www.blogjava.net/Steven-bot/aggbug/360155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Steven-bot/" target="_blank">Steven_bot</a> 2011-10-08 09:21 <a href="http://www.blogjava.net/Steven-bot/articles/360155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>