﻿<?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-dragonofson-文章分类-Spring</title><link>http://www.blogjava.net/dragonofson/category/12320.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 05:12:14 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 05:12:14 GMT</pubDate><ttl>60</ttl><item><title>Spring事务原理</title><link>http://www.blogjava.net/dragonofson/articles/54690.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Fri, 23 Jun 2006 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/dragonofson/articles/54690.html</guid><wfw:comment>http://www.blogjava.net/dragonofson/comments/54690.html</wfw:comment><comments>http://www.blogjava.net/dragonofson/articles/54690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dragonofson/comments/commentRss/54690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dragonofson/services/trackbacks/54690.html</trackback:ping><description><![CDATA[统观spring事务，围绕着两个核心PlatformTransactionManager和TransactionStatus <br /><br />spring提供了几个关于事务处理的类： <br />TransactionDefinition //事务属性定义<br />TranscationStatus //代表了当前的事务，可以提交，回滚。<br />PlatformTransactionManager这个是spring提供的用于管理事务的基础接口，其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。<br /><br />一般事务定义步骤：<br /><div>TransactionDefinition td = new TransactionDefinition();</div><div>TransactionStatus ts = transactionManager.getTransaction(td);</div><div>try</div><div>{ //do sth</div><div>  transactionManager.commit(ts);</div><div>}</div><div>catch(Exception e){transactionManager.rollback(ts);}</div><div> </div><br />spring提供的事务管理可以分为两类：编程式的和声明式的。编程式的，比较灵活，但是代码量大，存在重复的代码比较多；声明式的比编程式的更灵活。<br /><br />编程式主要使用transactionTemplate。省略了部分的提交，回滚，一系列的事务对象定义，需注入事务管理对象.
<div>void add()</div><div>{</div><div>    transactionTemplate.execute( new TransactionCallback(){</div><div>        pulic Object doInTransaction(TransactionStatus ts)</div><div>       { //do sth}</div><div>    }</div><div>}</div><br />声明式：<br /><div>使用TransactionProxyFactoryBean:</div><div>&lt;bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />  &lt;property name="transactionManager"&gt;&lt;ref bean="transactionManager"/&gt;&lt;/property&gt;<br />  &lt;property name="target"&gt;&lt;ref local="userManagerTarget"/&gt;&lt;/property&gt;<br />  &lt;property name="transactionAttributes"&gt;<br />   &lt;props&gt;<br />    &lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />    &lt;prop key="update*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />    &lt;prop key="*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</div><br />围绕Poxy的动态代理 能够自动的提交和回滚事务<br />org.springframework.transaction.interceptor.TransactionProxyFactoryBean<br /><ul><li>PROPAGATION_REQUIRED--支持当前事务，如果当前没有事务，就新建一个事务。这是最常见的选择。 <br /></li><li>PROPAGATION_SUPPORTS--支持当前事务，如果当前没有事务，就以非事务方式执行。 <br /></li><li>PROPAGATION_MANDATORY--支持当前事务，如果当前没有事务，就抛出异常。 <br /></li><li>PROPAGATION_REQUIRES_NEW--新建事务，如果当前存在事务，把当前事务挂起。 <br /></li><li>PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。 <br /></li><li>PROPAGATION_NEVER--以非事务方式执行，如果当前存在事务，则抛出异常。 <br /></li><li>PROPAGATION_NESTED--如果当前存在事务，则在嵌套事务内执行。如果当前没有事务，则进行与PROPAGATION_REQUIRED类似的操作。<br /></li></ul><img src ="http://www.blogjava.net/dragonofson/aggbug/54690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dragonofson/" target="_blank">Dragonofson</a> 2006-06-23 15:35 <a href="http://www.blogjava.net/dragonofson/articles/54690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring视图解析器</title><link>http://www.blogjava.net/dragonofson/articles/54139.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Wed, 21 Jun 2006 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/dragonofson/articles/54139.html</guid><wfw:comment>http://www.blogjava.net/dragonofson/comments/54139.html</wfw:comment><comments>http://www.blogjava.net/dragonofson/articles/54139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dragonofson/comments/commentRss/54139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dragonofson/services/trackbacks/54139.html</trackback:ping><description><![CDATA[1.InternalResourceViewResolver:适用于JSP来渲染视图,页面不使用国际化,不需要为不同得地区的用户显示不同的视图。<br />&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />&lt;property name="prefix"&gt;&lt;value&gt;/WEB-INF/JSP/&lt;/value&gt;&lt;/property&gt;<br />&lt;property name="suffix"&gt;&lt;value&gt;.jsp&lt;/value&gt;&lt;/property&gt;<br /><font color="#ff1493">&lt;property name="viewClass"&gt;&lt;value&gt;org.springframework.web.servlet.view.JstView&lt;/value&gt;&lt;/property&gt;<br />//页面使用JSTL</font><br />&lt;/bean&gt;<br /><br />2.BeanNameViewResolver,XmlFileViewResover使用定制视图(PDF,Excel,图片)<br />BeanNameViewResolver(返回的是bean)<br />  &lt;bean id="beanNameViewResolver" class="org.spring.framework.web.servlet.view.BeanNameViewResovler"&gt;<br />&lt;bean id="courseList" class="com.CourseList"&gt;//courseList we是  new ModelAndView("courseList","courses",courses);<br /><br />&lt;bean id="beanNameViewResolver" class="org.spring.framework.web.servlet.view.XmlFileViewResover"&gt;<br />&lt;property name="location&gt;<br />&lt;value&gt;/WEB-INF/traning-views.xml&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br /><br />3.&lt;bean id="bundleViewResolver" class="org.springframework.web.servlet.view.ResourceViewResolver"&gt;<br />   &lt;property name="basename"&gt;<br />&lt;value&gt;view&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br />根据用户的地理位置渲染不同的视图。<img src ="http://www.blogjava.net/dragonofson/aggbug/54139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dragonofson/" target="_blank">Dragonofson</a> 2006-06-21 11:10 <a href="http://www.blogjava.net/dragonofson/articles/54139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC表单验证</title><link>http://www.blogjava.net/dragonofson/articles/54118.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Wed, 21 Jun 2006 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/dragonofson/articles/54118.html</guid><wfw:comment>http://www.blogjava.net/dragonofson/comments/54118.html</wfw:comment><comments>http://www.blogjava.net/dragonofson/articles/54118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dragonofson/comments/commentRss/54118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dragonofson/services/trackbacks/54118.html</trackback:ping><description><![CDATA[
		<p align="left">采取的是spring action 中的例子<br />验证一个Student对象<br />   1.implements Validator接口(org.springframework.validation.Validator)<br />         public class StudentValidator implements Validator<br />         {<br />            public boolean supports(Class clazz)//必须实现的方法<br />            {return clazz.equals(Student.class) ;<br />            }<br />            public void <font color="#ff1493">validate</font>(Object command,Errors errors)<br />           {<br />              Student student =(Student)command;<br />       <font color="#ff1493">     // <font color="#000000">ValidationUtils.rejectIfEmpty</font>  (Errors errors, String field, String errorCode, String defaultMessage)<br /></font><br />               ValidationUtils.rejectIfEmpty(errors,"login","required.login","login is required");<br />               ValidationUtils.rejectIfEmpty(errors,"password","required.password","Password is required");<br />               ValidationUtils.rejectIfEmpty(errors,"firstName","required.firstName","firstNameis required");<br />               ValidationUtils.rejectIfEmpty(errors,"lastName","required.lastName","lastNameis required");<br />               ValidationUtils.rejectIfEmpty(errors,"city","required.login","cityis required");<br />                                            <font color="#000000">validateEmail(student .email,errors);<br />               validatePhone(student .phone,errors);<br /></font>            }<br />            <br />            private static final String PHONE_REGXP="/(<a href="file://(%7B0,1%7D(//d%7B3%7D)))/">\\({0,1}(\\d{3})))/</a>"<br />            private void <font color="#ff1493">validatePhone</font>(String phone, Errors erros)<br />            {<br />             ValidationUtils.rejectIfEmpty(errors,"phone","required.phone","phoneis required");<br />             Perl5Util per5Util=new Perl5Util();<br />             if(!per5Util.math(PHONE_REGXP,phone))<br />            {<br />              errors.reject("invalid.phone","Phone number is invalid");<br />               }<br />               }    <br />              private static final String Email_REGXP="/(<a href="file://(%7B0,1%7D(//d%7B3%7D)))/">\\({0,1}(\\d{3})))/</a>"<br />            private void <font color="#ff1493">validateEmail</font>(String phone, Errors erros)<br />            {<br />             ValidationUtils.rejectIfEmpty(errors,"phone","required.phone","phoneis required");<br />             Perl5Util per5Util=new Perl5Util();<br />             if(!per5Util.math(Email_REGXP,email))<br />            {<br />              errors.reject("invalid.phone","Phone number is invalid");<br />               }<br />               }         <br />     <br /><br />}<br />2.配置bean<br />      &lt;bean id="methodNameResolver" <br />class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"&gt; <br />&lt;property name="paramName"&gt;&lt;value&gt;method&lt;/value&gt; <br />&lt;/property&gt; <br />&lt;property name="defaultMethodName"&gt;&lt;value&gt;view&lt;/value&gt; <br />&lt;/property&gt; <br />&lt;/bean&gt; <br /><font color="#ff1493">&lt;property name="validator"&gt;&lt;bean class="com.StudentValidator "/&gt; <br />&lt;/property&gt; <br /></font>&lt;property name="defaultMethodName"&gt;&lt;value&gt;view&lt;/value&gt; <br />&lt;/property&gt; <br />&lt;bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController"&gt; <br />&lt;property name="methodNameResolver"&gt; <br />&lt;ref local="methodNameResolver"/&gt; <br />&lt;/property&gt; <br />&lt;/bean&gt; <br /></p>
		<p> </p>
		<p>查看源代码：<br />MultiActionController类：<br />  protected void bind(ServletRequest request, Object command) throws Exception {<br />  logger.debug("Binding request parameters onto MultiActionController command");<br />  ServletRequestDataBinder binder = createBinder(request, command);<br />  binder.bind(request);<br />  if (this.validators != null) {<br />   for (int i = 0; i &lt; this.validators.length; i++) {<br />     <font color="#ff1493"> //首先调用supports<br /></font>      if (this.validators[i].<font color="#ff1493">supports</font>(command.getClass())) {<br />     ValidationUtils.invokeValidator(this.validators[i], command, binder.getErrors());<br />    }<br />   }<br />  }<br />  binder.closeNoCatch();<br /> }<br /><br />类ValidationUtils：<br />public static void invokeValidator(Validator validator, Object obj, Errors errors) {<br />  if (validator != null) {<br />   if (logger.isDebugEnabled()) {<br />    logger.debug("Invoking validator [" + validator + "]");<br />   }<br />   if (obj != null &amp;&amp; !validator.supports(obj.getClass())) {<br />    throw new IllegalArgumentException("Validator " + validator.getClass() +<br />      " does not support " + obj.getClass());<br />   }<br />  <font color="#ff1493"> validator.validate(obj, errors);<br /></font>   if (logger.isDebugEnabled()) {<br />    if (errors.hasErrors()) {<br />     logger.debug("Validator found " + errors.getErrorCount() + " errors");<br />    }<br />    else {<br />     logger.debug("Validator found no errors");<br />    }<br />   }<br />  }<br /> }<br /> </p>
<img src ="http://www.blogjava.net/dragonofson/aggbug/54118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dragonofson/" target="_blank">Dragonofson</a> 2006-06-21 09:39 <a href="http://www.blogjava.net/dragonofson/articles/54118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Spring MVC构架</title><link>http://www.blogjava.net/dragonofson/articles/53919.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Tue, 20 Jun 2006 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/dragonofson/articles/53919.html</guid><wfw:comment>http://www.blogjava.net/dragonofson/comments/53919.html</wfw:comment><comments>http://www.blogjava.net/dragonofson/articles/53919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dragonofson/comments/commentRss/53919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dragonofson/services/trackbacks/53919.html</trackback:ping><description><![CDATA[
		<p>总体图表（参照stucts）<br /><br />DispatcherServlet=ActionServlet<br />HandlerMapping=Struts-config.xml<br />Controller=Action<br />ModelAndView=mapping.findforward(string) 中的string;<br />ViewResolver=mapping.findforward(string) 中string的解释器<br /><br /><font color="#ff0000">特别注意：<br /></font>1.在web.xml里面配置好<br />&lt;servlet&gt;<br />    &lt;servlet-name&gt;springapp&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet<br />    &lt;/servlet-class&gt;<br />    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />  &lt;/servlet&gt;<br /> &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;springapp&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br /><br />不需要配置context-param<br />&lt;context-param&gt;<br />  <font color="#000000">&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />  &lt;param-value&gt;/WEB-INF/springapp-servlet.xml&lt;/param-value&gt;</font><br />&lt;/context-param&gt;<br />DispatcherServlet 能够自动的到WEB-INF下面查找与他同名的后面接-servlet,.xml的配置文件。<br />（springapp-servlet.xml）<br /><br /><font color="#ff1493">注意：DispatcherServlet 处理的跳转必须要在工程名下面。例如：工程名为:SpringMvc.则</font><a href="http://localhost:8080/SpringMvc/test.htm"><font color="#ff1493">Http://localhost:8080/SpringMvc/test.htm</font></a><font color="#ff1493">可以跳转。<br /></font><a href="http://localhost:8080/test.htm"><font color="#ff1493">Http://localhost:8080/test.htm</font></a><font color="#ff1493"> 不能跳转</font><br /><br /> <span class="postbody">详细说明MultiActionController的配置吧： <br />首先在bean.xml里面： <br /><br />&lt;bean id="methodNameResolver" <br />class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"&gt; <br />&lt;property name="paramName"&gt;&lt;value&gt;method&lt;/value&gt; //相当于DispatchAction的method后面接需要触发的方法<br />&lt;/property&gt;<br /> <br />//另一个触发方法的配置<br />//当提交coureList.htm时候触发coursesUnsorted方法，当提交coursesSort.htm时候触发coursesSortByDate方法<br /><br />&lt;property name="mapping"&gt;<br />  &lt;props&gt;<br />      &lt;prop key="/coureList.htm"&gt;coursesUnsorted&lt;/prop&gt;<br />      &lt;prop key="/coursesSort.htm"&gt;coursesSortByDate&lt;/prop&gt;<br />   &lt;/props&gt;<br />&lt;/property&gt; <br />&lt;/bean&gt; <br /><br />//默认方式页面跳转到Controller<br />&lt;bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController"&gt; <br />&lt;property name="methodNameResolver"&gt; <br />&lt;ref local="methodNameResolver"/&gt; <br />&lt;/property&gt; <br />&lt;/bean&gt;<br /> <br /><br />//SimpleUrlHandlerMapping页面跳转到Controller<br />&lt;bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHand"&gt;<br />&lt;property name="mapping"&gt;<br />&lt;props&gt;<br />&lt;prop key="/listCourses.htm"&gt;listCourseController&lt;/prop&gt;<br />&lt;prop key="/register.htm"&gt;registerController&lt;/prop&gt;<br />&lt;props&gt;<br />&lt;/props&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br /><br />配置呢就这么简单。methodNameResolver指定了调用MultiActionController中方法的方式，例如，如果在你的MultiActionController中有如下方法： <br /><br /><br />public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account) <br />{ <br />} <br /><br />那么要调用这个方法，你的JSP页面的请求URL就应该这样写： <br />&lt;form action="test.do?method=insertAccount"&gt; <br />&lt;/form&gt; <br /><br />至于绑定什么command和JSP是没有关系的。你在MultiActionController中的方法签名第三个参数是什么对象，Spring就会把request中参数的值绑定到方法签名的第三个对象中。 <br /><br />例子我倒是没有，最直接的办法就是去看一下MultiActionController的源代码，非常简单拉，一看就明白了。</span><br /><br /><br /><span style="FONT-WEIGHT: bold; COLOR: #990066" ?="">protected</span><span style="FONT-WEIGHT: bold; COLOR: #990066" ?="">final</span> ModelAndView invokeNamedMethod<span style="COLOR: #000000">(</span><span style="COLOR: #aaaadd" ?="">String</span> methodName, HttpServletRequest request, HttpServletResponse response<span style="COLOR: #000000">)</span><span style="FONT-WEIGHT: bold; COLOR: #990066" ?="">throws</span><span style="COLOR: #aaaadd" ?="">Exception</span><br /><span style="COLOR: #000000">{</span><br />                <br /><br />                        <br /><span style="COLOR: #6666ff">// If last parameter isn't of HttpSession type, it's a command.</span><br /><span style="COLOR: #6666ff">// 在这里，Spring会判断你的请求方法里面第三个参数的类型。如果第三个参数类型不是HttpSession，就认为是要绑定的command。</span><br /><span style="FONT-WEIGHT: bold; COLOR: #990066" ?="">if</span><span style="COLOR: #000000">(</span>method.<span style="COLOR: #000000">getParameterTypes</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>.<span style="COLOR: #000000">length</span> &gt;= <span style="COLOR: #000000" ?="">3</span> &amp;&amp; <br />!method.<span style="COLOR: #000000">getParameterTypes</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">[</span>method.<span style="COLOR: #000000">getParameterTypes</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>.<span style="COLOR: #000000">length</span> - <span style="COLOR: #000000" ?="">1</span><span style="COLOR: #000000">]</span>.<span style="COLOR: #000000">equals</span><span style="COLOR: #000000">(</span>HttpSession.<span style="COLOR: #000000">class</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">)</span><br /><span style="COLOR: #000000">{</span><br />    <span style="COLOR: #6666ff">// 根据类型利用反射产生Command对象</span><br />    <span style="COLOR: #aaaadd" ?="">Object</span> command = newCommandObject<span style="COLOR: #000000">(</span>method.<span style="COLOR: #000000">getParameterTypes</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">[</span>method.<span style="COLOR: #000000">getParameterTypes</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>.<span style="COLOR: #000000">length</span> - <span style="COLOR: #000000" ?="">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">)</span>; <br />    params.<span style="COLOR: #000000">add</span><span style="COLOR: #000000">(</span>command<span style="COLOR: #000000">)</span>; <br />   <span style="COLOR: #6666ff">// 绑定command对象</span><br />   bind<span style="COLOR: #000000">(</span>request, command<span style="COLOR: #000000">)</span>; <br /><span style="COLOR: #000000">}</span><br /><br /><br /><span style="COLOR: #6666ff">// 最后通过反射去调用你的方法，也就是说，在执行你的方法时，command已</span><br /><span style="COLOR: #6666ff">// 经帮你绑定好拉，你直接用就可以了。                        </span><br /><span style="FONT-WEIGHT: bold; COLOR: #990066" ?="">return</span><span style="COLOR: #000000">(</span>ModelAndView<span style="COLOR: #000000">)</span> method.<span style="COLOR: #000000">invoke</span><span style="COLOR: #000000">(</span>this.<span style="COLOR: #000000">delegate</span>, params.<span style="COLOR: #000000">toArray</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #990066" ?="">new</span><span style="COLOR: #aaaadd" ?="">Object</span><span style="COLOR: #000000">[</span>params.<span style="COLOR: #000000">size</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">)</span>; <br /><span style="COLOR: #000000">}</span><br /><br />使用模板视图<br />&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />&lt;property name="prefix"&gt;&lt;value&gt;/jsp&lt;/value&gt;&lt;/property&gt;//前缀<br />&lt;property name="suffix"&gt;&lt;value&gt;.jsp&lt;/value&gt;&lt;/property&gt;//后缀<br />&lt;/bean&gt;</p>
<img src ="http://www.blogjava.net/dragonofson/aggbug/53919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dragonofson/" target="_blank">Dragonofson</a> 2006-06-20 10:50 <a href="http://www.blogjava.net/dragonofson/articles/53919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring事务典型配置方法</title><link>http://www.blogjava.net/dragonofson/articles/53797.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Mon, 19 Jun 2006 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/dragonofson/articles/53797.html</guid><wfw:comment>http://www.blogjava.net/dragonofson/comments/53797.html</wfw:comment><comments>http://www.blogjava.net/dragonofson/articles/53797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dragonofson/comments/commentRss/53797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dragonofson/services/trackbacks/53797.html</trackback:ping><description><![CDATA[类：<br />public interface CustomerDAO {<br />public void createCustomer(Customer customer);<br />}<br /><br />public class HibernateCustomerDAO implements CustomerDAO {<br /><br />private HibernateTemplate hibernateTemplate = null;<br /><br />public void setSessionFactory(SessionFactory sessionFactory) {<br />this.hibernateTemplate = new HibernateTemplate(sessionFactory, false);<br />}<br /><br />public void createCustomer(Customer customer) {<br />this.hibernateTemplate.save(customer);<br />}<br />}<br />配置文件：<br />＜bean id="customerDAOTarget" class="test.usecase.HibernateCustomerDAO"＞<br />　＜property name="sessionFactory"＞＜ref bean="sessionFactory"/＞＜/property＞<br />＜/bean＞<br /><br />＜bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"＞<br />　＜property name="sessionFactory"＞＜ref bean="sessionFactory"/＞＜/property＞<br />＜/bean＞<br /><br />＜bean id="customerDAO" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"＞<br />　＜property name="transactionManager"＞＜ref bean="transactionManager"/＞＜/property＞<br />　＜property name="target"＞＜ref bean="customerDAOTarget"/＞＜/property＞<br />　＜property name="transactionAttributes"＞<br />　　＜props＞<br />　　　＜prop key="create*"＞PROPAGATION_REQUIRED＜/prop＞<br />　　　＜prop key="*"＞PROPAGATION_REQUIRED＜/prop＞<br />　　＜/props＞<br />　＜/property＞<br />＜/bean＞<br />上述Spring配置片断定义了业务对象HibernateCustomerDAO，它包裹了Hibernate SessionFactory。注意，默认时，Spring中定义的JavaBean都是单例的，HibernateCustomerDAO也不例外。这意味：多个线程可能同时执行createCustomer()方法。<br /><br />　　其次，配置了Hibernate事务管理器，它包裹了同一Hibernate SessionFactory实例。在事务管理器每次执行时，它都会完成如下几件事情。其一，检查Hibernate Session是否绑定到当前线程。如果已绑定，则直接使用它。如果还未绑定，事务管理器将告知Hibernate SessionFactory创建新的Session，然后将创建的Session绑定到当前线程。其二，如果当前没有处于活动的事务，则事务管理器将启动新的事务，并将Session包裹进来。否则，直接参与到活动事务中。<br /><br />　　整个过程是通过使用Spring提供的TransactionProxyFactoryBean实现的。当然，这是一种以声明方式实现的事务管理过程。 TransactionProxyFactoryBean能够为业务对象创建代理对象，从而通过事务管理器管理事务。当每次通过代理对象调用createCustomer()方法时，事务管理器将根据事务属性管理事务。当前，Spring除了提供HibernateTransactionManager事务管理器外，还为JDBC数据源、JDO、TopLink提供了相应的事务管理器。<br /><br />　　再来看看业务对象吧！当调用createCustomer()方法时，HibernateTemplate将查找绑定到当前线程的Hibernate Session。由于上述配置文件片断传入到HibernateTemplate构建器的第二个参数为false，因此如果没有绑定Hibernate Session，则将抛出未受查异常。这对于那些未正确配置事务管理功能的场和特别有用（注意，事务管理器很重要）。一旦事务管理配置好后，Hibernate Session将绑定到当前线程，从而启动事务。请注意，HibernateTemplate不会去检查事务是否激活，也不会显示地启动或终止事务。也请注意，如果在声明的方法（事务属性中给出的）中抛出了未受查异常，则当前活动事务将回滚。<br /><br /><img src ="http://www.blogjava.net/dragonofson/aggbug/53797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dragonofson/" target="_blank">Dragonofson</a> 2006-06-19 15:31 <a href="http://www.blogjava.net/dragonofson/articles/53797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web中spring配置</title><link>http://www.blogjava.net/dragonofson/articles/53779.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Mon, 19 Jun 2006 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/dragonofson/articles/53779.html</guid><wfw:comment>http://www.blogjava.net/dragonofson/comments/53779.html</wfw:comment><comments>http://www.blogjava.net/dragonofson/articles/53779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dragonofson/comments/commentRss/53779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dragonofson/services/trackbacks/53779.html</trackback:ping><description><![CDATA[1.web.xml<br /><br />监听器<br /> &lt;listener&gt;<br />        &lt;listener-class&gt;<br />            org.springframework.web.context.ContextLoaderListener<br />        &lt;/listener-class&gt;<br />    &lt;/listener&gt;<br /><br />在servlet上下文配置spring的配置文件<br /> &lt;context-param&gt;<br />        &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />        &lt;param-value&gt;<br />            /WEB-INF/config/hibernate/applicationContext-hibernate.xml<br />            /WEB-INF/config/spring/applicationContext-spring.xml<br />            &lt;!--/WEB-INF/config/spring/acegi-security-common.xml--&gt;<br />        &lt;/param-value&gt;<br />    &lt;/context-param&gt;<br /><br />2.得到Spring Bean<br />   public class test extends action<br /> {<br />   private static ApplicationContext ctx = null;<br />   public Object getBean(String name)<br />   if(ctx == null)<br />        {<br />            ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());<br />        }<br />        return ctx.getBean(name);<br />    }<br />}<br /><img src ="http://www.blogjava.net/dragonofson/aggbug/53779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dragonofson/" target="_blank">Dragonofson</a> 2006-06-19 14:44 <a href="http://www.blogjava.net/dragonofson/articles/53779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>