??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久免费,福利视频一区二区三区,av一区二区高清http://www.aygfsteel.com/algz/category/26972.htmlPurple Butterfly Flying QQ?7101519 Flex,Ext,Spring,Hibernate,EOS,SpringSecurity,Struts http://algz.googlecode.com/svn/trunk/zh-cnFri, 01 Jul 2011 03:05:01 GMTFri, 01 Jul 2011 03:05:01 GMT60spring 什么情况下q行事务回滚(面试?http://www.aygfsteel.com/algz/articles/352796.html紫蝶∏飛揚↗紫蝶∏飛揚↗Wed, 22 Jun 2011 03:53:00 GMThttp://www.aygfsteel.com/algz/articles/352796.htmlhttp://www.aygfsteel.com/algz/comments/352796.htmlhttp://www.aygfsteel.com/algz/articles/352796.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/352796.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/352796.htmlspring事务回滚.默认情况,unchecked异常,卌行时异常runntimeException回滚事务;checked异常,即Exception可try{}捕获的不会回?当然也可配置spring参数让其回滚.

紫蝶∏飛揚↗ 2011-06-22 11:53 发表评论
]]>
spring ?jdbcTemplate 快速数据库开?/title><link>http://www.aygfsteel.com/algz/articles/352789.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Wed, 22 Jun 2011 02:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/352789.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/352789.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/352789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/352789.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/352789.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> execSQL(String fileName) {<br />        <br />        File myFile </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> File(fileName);<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">!</span><span style="color: #000000; ">myFile.exists()) {<br />            System.err.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Can't Find </span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> fileName);<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />        }<br />        </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br />            DriverManagerDataSource dataSource</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> DriverManagerDataSource();<br />            dataSource.setDriverClassName(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">org.hsqldb.jdbcDriver</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />            dataSource.setUrl(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jdbc:hsqldb:hsql://localhost/algz</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />            dataSource.setUsername(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">sa</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />            dataSource.setPassword(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">);<br />            JdbcTemplate jt</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> JdbcTemplate();<br />            jt.setDataSource(dataSource);<br />            <br />                    <br />            BufferedReader in </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BufferedReader(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> FileReader(myFile));<br />            String sql;<br />            </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> ((sql </span><span style="color: #000000; ">=</span><span style="color: #000000; "> in.readLine()) </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">) {<br />                jt.execute(sql);<br />                System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />            }<br />            <br />            in.close();<br />            System.out.println();<br />        } </span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (IOException e) {<br />            e.getStackTrace();<br />        }<br />    }</span></div><img src ="http://www.aygfsteel.com/algz/aggbug/352789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2011-06-22 10:16 <a href="http://www.aygfsteel.com/algz/articles/352789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在spring的bean中获取ServletContext ?servletConfighttp://www.aygfsteel.com/algz/articles/352560.html紫蝶∏飛揚↗紫蝶∏飛揚↗Sat, 18 Jun 2011 01:44:00 GMThttp://www.aygfsteel.com/algz/articles/352560.htmlhttp://www.aygfsteel.com/algz/comments/352560.htmlhttp://www.aygfsteel.com/algz/articles/352560.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/352560.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/352560.html
在spring的bean中获取ServletContext ?nbsp;servletConfig
  常规方式下获取servletContext需要承HttpServletc,然后获取servletConfigQ通过q个获取servletContextQservletConfig.getServletContext()Q?/div>
  但是spring的bean都是pojoQ和我们常规的操作有些不同?/div>
springl我们提供了两个接口Qorg.springframework.web.context.ServletContextAware和org.springframework.web.context.ServletConfigAware。我们可以让我们的bean实现上边的Q何一个接口就能获取到servletContext?.
代码如下Q?/div>
public class DicBean implements ServletContextAware{
    
private ServletContext servletContext;

public void setServletContext(ServletContext sc) {
    
this.servletContext=sc;
    System.out.println(
"目应用的绝对\径ؓQ?/span>"+servletContext.getRealPath("/"));
}
}


]]>Spring aop 单实用的学习http://www.aygfsteel.com/algz/articles/317617.html紫蝶∏飛揚↗紫蝶∏飛揚↗Wed, 07 Apr 2010 02:01:00 GMThttp://www.aygfsteel.com/algz/articles/317617.htmlhttp://www.aygfsteel.com/algz/comments/317617.htmlhttp://www.aygfsteel.com/algz/articles/317617.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/317617.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/317617.htmlimport org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class BusinessHistory {

/* q接?定义一个类包含以下Ҏ):
 * public String list(String u){
  //this.
  System.out.println("list(String u)");
  return "return list(String u)";
 }*/
 /*切面(定义一个类):
  *
  *(1)切入?
  *@Pointcut("execution(* com.tb.app.cf.servicex.emp.*.* (..))") public void
  * pointcutA(){ }
  *
  *切入点表辑ּ(详见spring开发手册核心技术部?:
  a. "execution(* com.tb.app.cf.servicex.emp.*.*(..))" emp包下的所有方?br />   b. "execution(* com.CfDimissionLogManager.*(..))" CfDimissionLogManagercȝ所有方?br />   c. "execution(* com.service.save(..))" service包下Ҏ名ؓsave,参数个数L
  d. "execution(* org.service.*.*())" 限定service包中LcMQ意不带参数的Ҏ?br />   e. "execution(* org.service.*.*(..)) && args(n,..)
        限定service包中LcMQ意方法名L参数个数,q且传入通知的第一个参数名为n,作ؓ通知的参数名n.
        ?execution(* org.service.*.*(..)) && args(n,..) 报错,因ؓargs限定有参,但execution限定无参.所以冲H?
  f. @AfterReturning(value="execution(* org.springside.helloworld.service.UserManager.list(..))&& args(u1)",
   argNames="u", //?量不要使用argNames,采用args(..)
   returning="retVal")
  *
  *(2)通知:
 /*@AfterReturning(value="execution(* org.service.*.*(..))"
   returning="retVal")   //限定service包中,LcMQ意方法名L参数个数,但须有返回值的Ҏ
 //参数retVal必须与returning值retVal一?但retVal可与q接点返回值类型一?名字可不?br />  public void adviceA(String retVal) {
  System.err.println(retVal);
 }*/


 @AfterReturning(value="execution(* org.springside.helloworld.service.UserManager.list(..))&& args(u1)",
   returning="retVal")
 public void adviceA(String retVal,String u1) {
  System.err.println("return:"+retVal);
  System.err.println("param:"+u1);
 }
}



]]>
Spring多配|文?/title><link>http://www.aygfsteel.com/algz/articles/317241.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Thu, 01 Apr 2010 15:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/317241.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/317241.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/317241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/317241.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/317241.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt"> 众所周知QSpring框架以对象的依赖注入而著名,通过applicationContext.xml配置Q可以实现解耦合。如果我们把所有的对象都通过applicationContext.xml注入Q那׃昑־很臃肿,难于l护。对此,我们可以采用多配|文件相兌 。比?在struts-config.xml中如下定?br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><</span><span style="color: #000000">plug</span><span style="color: #000000">-</span><span style="color: #000000">in className</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.web.struts.ContextLoaderPlugIn</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> </span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"><</span><span style="color: #000000">set</span><span style="color: #000000">-</span><span style="color: #000000">property property</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">contextConfigLocation</span><span style="color: #000000">"</span><span style="color: #000000"> value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/WEB-INF/action-service.xml</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000"><br /> </span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"></</span><span style="color: #000000">plug</span><span style="color: #000000">-</span><span style="color: #000000">in</span><span style="color: #000000">></span><span style="color: #000000"><br /> </span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div> <p>在action-service.xml?br /> <br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><</span><span style="color: #000000">bean name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/login</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.lq.struts.action.LoginAction</span><span style="color: #000000">"</span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #0000ff">abstract</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">false</span><span style="color: #000000">"</span><span style="color: #000000"> lazy</span><span style="color: #000000">-</span><span style="color: #000000">init</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">default</span><span style="color: #000000">"</span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  autowire</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">default</span><span style="color: #000000">"</span><span style="color: #000000"> dependency</span><span style="color: #000000">-</span><span style="color: #000000">check</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">default</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">userService</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000"><</span><span style="color: #000000">ref bean</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">userService</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">/></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /> </span><span style="color: #000000"></</span><span style="color: #000000">bean</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div> <p></span><span style="font-size: 10pt">在sp-service.xml?/span><br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">userService</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.lq.service.impl.UserServiceImpl</span><span style="color: #000000">"</span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  lazy</span><span style="color: #000000">-</span><span style="color: #000000">init</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">default</span><span style="color: #000000">"</span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  autowire</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">default</span><span style="color: #000000">"</span><span style="color: #000000"> dependency</span><span style="color: #000000">-</span><span style="color: #000000">check</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">default</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">userinfoDAO</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000"><</span><span style="color: #000000">ref bean</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">userinfoDAO</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">/></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /> </span><span style="color: #000000"></</span><span style="color: #000000">bean</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div> <p><br /> 在applicationContext?br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">userinfoDAO</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.lq.dao.UserinfoDAO</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000"><</span><span style="color: #000000">ref bean</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">/></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /> </span><span style="color: #000000"></</span><span style="color: #000000">bean</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div> <p> </p> <p>q样也实C一U分层的思想Q易于维护,看v来多爽。最后在web.xml中将其关?br /> </p> <p> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><</span><span style="color: #000000">context</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">contextConfigLocation</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000">/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">sp</span><span style="color: #000000">-</span><span style="color: #000000">service.xml<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000">/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">applicationContext.xml<br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />  </span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /> </span><span style="color: #000000"></</span><span style="color: #000000">context</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /> </span><span style="color: #000000"><</span><span style="color: #000000">listener</span><span style="color: #000000">></span><span style="color: #000000">   <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000"><</span><span style="color: #000000">listener</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">></span><span style="color: #000000">   <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    org.springframework.web.context.ContextLoaderListener   <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000"></</span><span style="color: #000000">listener</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">></span><span style="color: #000000">   <br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />   </span><span style="color: #000000"></</span><span style="color: #000000">listener</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span></div> <p>注意两点<ref bean="sessionFactory" />不能写成<ref local="sessionFactory" />要不然只能在本文件中?br /> q有每个配置文g的名U空间一定要?/p> <img src ="http://www.aygfsteel.com/algz/aggbug/317241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2010-04-01 23:05 <a href="http://www.aygfsteel.com/algz/articles/317241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 2.0 AOP标签式和注解?声明式事务处?/title><link>http://www.aygfsteel.com/algz/articles/262941.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Mon, 30 Mar 2009 09:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/262941.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/262941.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/262941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/262941.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/262941.html</trackback:ping><description><![CDATA[<p>一.AOP(常用)<br /> <br /> <?xml version="1.0" encoding="UTF-8"?><br /> <beans xmlns="http://www.springframework.org/schema/beans"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> <span style="color: #008000">xmlns:aop="http://www.springframework.org/schema/aop"<br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><span id="wmqeeuq" class="bold"><strong>xmlns:tx="http://www.springframework.org/schema/tx"</strong></span></span></em></span><br /> xsi:schemaLocation="<br /> http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><span id="wmqeeuq" class="bold"><strong style="color: #008000">http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd</strong></span></span></em><br /> http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- q是我们要配置q它具有事务性的Service对象 --><br /> </span></em><br /> <bean id="fooService" class="x.y.service.DefaultFooService"/><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><br /> <!-- the transactional advice (i.e. what 'happens'; see the <code class="literal"><aop:advisor/></code> bean below) --><br /> </span></em><br /> <tx:advice id="txAdvice" transaction-manager="txManager"><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- the transactional semantics... --><br /> </span></em><br /> <tx:attributes><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- all methods starting with <code class="literal">'get'</code> are read-only --><br /> </span></em><br /> <tx:method name="get*" read-only="true"/><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- other methods use the default transaction settings (see below) --><br /> </span></em><br /> <tx:method name="*"/><br /> </tx:attributes><br /> </tx:advice><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- ensure that the above transactional advice runs for any executionof an operation defined by the <code class="interfacename">FooService</code> interface --><br /> </span></em><br /> <aop:config><br /> <aop:pointcut id="fooServiceOperation" expression="<span style="color: #008000">execution(*</span> x.y.service.FooService.<span style="color: #008000">*(..)</span>)"/><br /> <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/><br /> </aop:config><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- ******************************************************************--></span></em><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- don't forget the <code class="interfacename">DataSource</code> --><br /> </span></em><br /> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><br /> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><br /> <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/><br /> <property name="username" value="scott"/><br /> <property name="password" value="tiger"/><br /> </bean><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><br /> <!-- similarly, don't forget the (particular) <code class="interfacename">PlatformTransactionManager</code> --><br /> </span></em><br /> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><br /> <property name="dataSource" ref="dataSource"/><br /> </bean><br /> <em class="lineannotation"><span id="wmqeeuq" class="lineannotation"><!-- other <code class="literal"><bean/></code> definitions here --><br /> </span></em><br /> </beans></p> <pre class="programlisting"> <p>我们来分析一下上面的配置。我们要把一个服务对象(<code class="literal">'fooService'</code> beanQ做成事务性的。我们想施加的事务语义封装在<code class="literal"><tx:advice/></code>定义中?code class="literal"><tx:advice/></code> “<span id="wmqeeuq" class="quote"><span id="wmqeeuq" class="emphasis"><em>把所有以 <code class="literal">'get'</code> 开头的Ҏ看做执行在只M务上下文中,其余的方法执行在默认语义的事务上下文?/em></span></span>”?其中?<code class="literal">'transaction-manager'</code> 属性被讄Z个指?<code class="interfacename">PlatformTransactionManager</code> bean的名字(q里?<code class="literal">'txManager'</code>Q,该bean实际上实施事务理?/p> <div id="wmqeeuq" class="tip" style="margin-left: 0.5in; margin-right: 0.5in">配置中最后一D| <code class="literal"><aop:config/></code> 的定义,它确保由 <code class="literal">'txAdvice'</code> bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面,它匹?<code class="interfacename">FooService</code> 接口定义的所有操作,我们把该切面叫做 <code class="literal">'fooServiceOperation'</code>。然后我们用一个通知器(advisorQ把q个切面?<code class="literal">'txAdvice'</code> l定在一P表示?<code class="literal">'fooServiceOperation'</code> 执行Ӟ<code class="literal">'txAdvice'</code> 定义的通知逻辑被执行?/div> <p>一个普遍性的需求是让整个服务层成ؓ事务性的。满需求的最好方式是让切面表辑ּ匚w服务层的所有操作方法。例如:</p> </pre> <aop:config><br />     <aop:pointcut id="fooServiceMethods" expression="execution(* x.y.service.*.*(..))"/><br />     <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceMethods"/><br />   </aop:config> <img src ="http://www.aygfsteel.com/algz/aggbug/262941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2009-03-30 17:37 <a href="http://www.aygfsteel.com/algz/articles/262941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 事务处理错误http://www.aygfsteel.com/algz/articles/262893.html紫蝶∏飛揚↗紫蝶∏飛揚↗Mon, 30 Mar 2009 07:25:00 GMThttp://www.aygfsteel.com/algz/articles/262893.htmlhttp://www.aygfsteel.com/algz/comments/262893.htmlhttp://www.aygfsteel.com/algz/articles/262893.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/262893.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/262893.html nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy0] to required type [dao.book.BookDAO] for property 'bookDAO';
nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0] to required type [dao.book.BookDAO] for property 'bookDAO': no matching editors or conversion strategy found

数据讉K层没有提供接口生的错误.
解决Ҏ: XXXDAOc都必须加上接口.

]]>
[转]正则表达?0分钟入门教程http://www.aygfsteel.com/algz/articles/229762.html紫蝶∏飛揚↗紫蝶∏飛揚↗Thu, 18 Sep 2008 09:48:00 GMThttp://www.aygfsteel.com/algz/articles/229762.htmlhttp://www.aygfsteel.com/algz/comments/229762.htmlhttp://www.aygfsteel.com/algz/articles/229762.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/229762.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/229762.html正则表达?0分钟入门教程

版本Qv2.3 (2008-4-13) 作者:deerchao 转蝲h?a >来源

目录

跌目录

  1. 本文目标
  2. 如何使用本教E?/a>
  3. 正则表达式到底是什么东西?
  4. 入门
  5. 试正则表达?/a>
  6. 元字W?/a>
  7. 字符转义
  8. 重复
  9. 字符c?/a>
  10. 分枝条g
  11. 反义
  12. 分组
  13. 后向引用
  14. 零宽断言
  15. 负向零宽断言
  16. 注释
  17. 贪婪与懒?/a>
  18. 处理选项
  19. ql?递归匚w
  20. q有些什么东西没提到
  21. 联系作?/a>
  22. 最?来点q告...
  23. |上的资源及本文参考文?/a>
  24. 更新说明

本文目标

30分钟内让你明白正则表辑ּ是什么,q对它有一些基本的了解Q让你可以在自己的程序或|页里用它?/p>

如何使用本教E?/h2>

最重要的是——L?em>30分钟Q如果你没有使用正则表达式的l验Q请不要试图?0U?/em>内入?#8212;—除非你是h :)

别被下面那些复杂的表辑ּ吓倒,只要跟着我一步一步来Q你会发现正则表辑ּ其实q?span lang="zh-cn">没有你想像中的那么困难。当Ӟ如果你看完了q篇教程之后Q发现自己明白了很多Q却又几乎什么都C得,那也是很正常?#8212;—我认为,没接触过正则表达式的人在看完q篇教程后,能把提到q的语法C80%以上的可能性ؓ零。这里只是让你明白基本的原理Q以后你q需要多l习Q多使用Q才能熟l掌握正则表辑ּ?/p>

除了作ؓ入门教程之外Q本文还试图成ؓ可以在日常工作中使用的正则表辑ּ语法参考手册。就作者本人的l历来说Q这个目标还是完成得不错?#8212;—你看Q我自己也没能把所有的东西C来,不是吗?

清除格式 文本格式U定Q?span class="name">专业术语 元字W?语法格式 正则表达?/span> 正则表达式中的一部分(用于分析) 对其q行匚w的源字符?/span> Ҏ则表辑ּ或其中一部分的说?/span>

隐藏Ҏ 本文双有一些注释,主要是用来提供一些相关信息,或者给没有E序员背景的读者解释一些基本概念,通常可以忽略?/p>

正则表达式到底是什么东西?

字符是计机软g处理文字时最基本的单位,可能是字母,数字Q标点符PI格Q换行符Q汉字等{?span class="name">字符?/span>?个或更多个字W的序列?span class="name">文本也就是文字,字符丌Ӏ说某个字符?span class="name">匚w某个正则表达式,通常是指q个字符串里有一部分Q或几部分分别)能满辑ּl出的条件?/p>

在编写处理字W串的程序或|页Ӟl常会有查找W合某些复杂规则的字W串的需要?span class="name">正则表达?/span>是用于描述q些规则的工兗换句话_正则表达式就是记录文本规则的代码?/p>

很可能你使用qWindows/Dos下用于文件查扄通配W?wildcard)Q也是*?span class="code">?。如果你x找某个目录下的所有的Word文档的话Q你会搜?span style="color: red;">*.doc。在q里Q?span class="code">*会被解释成Q意的字符丌Ӏ和通配W类|正则表达式也是用来进行文本匹配的工具Q只不过比v通配W,它能更精地描述你的需?#8212;—当然Q代价就是更复杂——比如你可以编写一个正则表辑ּQ用来查?span class="desc">所有以0开_后面跟着2-3个数字,然后是一个连字号“-”Q最后是7?位数字的字符?/span>(?span class="string">010-12345678?span class="string">0376-7654321)?/p>

入门

学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子q行修改Q实验。下面给Z不少单的例子Qƈ对它们作了详l的说明?/p>

假设你在一英文小说里查找hiQ你可以使用正则表达?span class="regex">hi?/p>

q几乎是最单的正则表达式了Q它可以_匚wq样的字W串Q?span class="desc">׃个字W组成,前一个字W是h,后一个是i。通常Q处理正则表辑ּ的工具会提供一个忽略大写的选项Q如果选中了这个选项Q它可以匚whi,HI,Hi,hIq四U情况中的Q意一U?/p>

不幸的是Q很多单词里包含hiq两个连l的字符Q比?span class="string">him,history,high{等。用hi来查扄话,q里边的hi也会被找出来。如果要_地查找hiq个单词的话Q我们应该?span class="regex">\bhi\b?/p>

\b是正则表辑ּ规定的一个特D代码(好吧Q某些h叫它元字W,metacharacterQ,代表着单词的开头或l尾Q也是单词的分界处。虽焉常英文的单词是q|标点W号或者换行来分隔的,但是\bq不匚wq些单词分隔字符中的M一个,?strong>只匹配一个位|?/strong>?/p>

如果需要更_的说法,\b匚wq样的位|:它的前一个字W和后一个字W不全是(一个是,一个不是或不存?\w?/p>

假如你要扄?span class="desc">hi后面不远处跟着一个LucyQ你应该?span class="regex">\bhi\b.*\bLucy\b?/p>

q里Q?span class="part">.是另一个元字符Q匹?span class="desc">除了换行W以外的L字符?span class="part">*同样是元字符Q不q它代表的不是字W,也不是位|,而是数量——它指?前边的内容可以连l重复出CQ意次以整个表达式得到匹?/span>。因此,.*q在一起就意味着L数量的不包含换行的字W?/span>。现?span class="regex">\bhi\b.*\bLucy\b的意思就很明显了Q?span class="desc">先是一个单词hi,然后是Q意个L字符(但不能是换行)Q最后是Lucyq个单词?/p>

换行W就?\n',ASCII~码?0(十六q制0x0A)的字W?/p>

如果同时使用其它元字W,我们p构造出功能更强大的正则表达式。比如下面这个例子:

0\d\d-\d\d\d\d\d\d\d\d匚wq样的字W串Q?span class="desc">?开_然后是两个数字,然后是一个连字号“-”Q最后是8个数?/span>(也就是中国的电话L。当Ӟq个例子只能匚w区号?位的情Ş)?/p>

q里?span class="part">\d是个新的元字W,匚w一位数?0Q或1Q或2Q或……)?span class="part">-不是元字W,只匹配它本n——q字W或者减受?/p>

Z避免那么多烦人的重复Q我们也可以q样写这个表辑ּQ?span class="regex">0\d{2}-\d{8}?q里\d后面?span class="part">{2}({8})的意思是前面\d必须q箋重复匚w2?8??/p>

试正则表达?/h2>

如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么Q你不是地球人。正则表辑ּ的语法很令h头疼Q即使对l常使用它的人来说也是如此。由于难于读写,Ҏ出错Q所以找一U工具对正则表达式进行测试是很有必要的?/p>

׃在不同的环境下正则表辑ּ的一些细节是不相同的Q本教程介绍的是微Y .Net Framework 2.0下正则表辑ּ的行为,所以,我向你介l一?Net下的工具.Net Framework 2.0Q然?a title="从www.unibetter.com下蝲Regex Tester, 75KB" >下蝲Regex Tester。这是个l色软gQ下载完后打开压羃?直接q行RegexTester.exe可以了?/p>

下面是Regex Testerq行时的截图Q?/p>

Regex Testerq行时的截图

元字W?/h2>

现在你已l知道几个很有用的元字符了,?span class="code">\b,.,*Q还?span class="code">\d.正则表达式里q有更多的元字符Q比?span class="code">\s匚wL的空白符Q包括空|制表W?Tab)Q换行符Q中文全角空格等?span class="code">\w匚w字母或数字或下划U或汉字{?/span>?/p>

对中?汉字的特D处理是?Net提供的正则表辑ּ引擎支持的,其它环境下的具体情况h看相x档?/p>

下面来看看更多的例子Q?/p>

\ba\w*\b匚w以字?span class="part">a开头的单词——先是某个单词开始处(\b)Q然后是字母a,然后是Q意数量的字母或数?\w*)Q最后是单词l束?\b)?/p>

好吧Q现在我们说说正则表辑ּ里的单词是什么意思吧Q就是多于一个的q箋?span class="code">\w。不错,q与学习英文时要背的成千上万个同名的东西的确关系不大 :)

\d+匚w1个或更多q箋的数?/span>。这里的+是和*cM的元字符Q不同的?span class="code">*匚w重复L?可能??Q?span class="code">+则匹?span class="desc">重复1ơ或更多?/span>?/p>

\b\w{6}\b 匚w刚好6个字?数字的单?/span>?/p>
?.常用的元字符
代码 说明
. 匚w除换行符以外的Q意字W?/span>
\w 匚w字母或数字或下划U或汉字
\s 匚wL的空白符
\d 匚w数字
\b 匚w单词的开始或l束
^ 匚w字符串的开?/span>
$ 匚w字符串的l束

元字W?span class="code">^Q和数字6在同一个键位上的符P?span class="code">$都匹配一个位|,q和\b有点cM?span class="code">^匚w你要用来查找的字W串的开_$匚wl尾。这两个代码在验证输入的内容旉常有用,比如一个网站如果要求你填写的QQ号必Mؓ5位到12位数字时Q可以用:^\d{5,12}$?/p>

q里?span class="part">{5,12}和前面介l过?span class="part">{2}是类似的Q只不过{2}匚w只能不多不少重复2?/span>Q?span class="part">{5,12}则是重复的次C能少?ơ,不能多于12?/span>Q否则都不匹配?/p>

因ؓ使用?span class="part">^?span class="part">$Q所以输入的整个字符串都要用来和\d{5,12}来匹配,也就是说整个输入必须??2个数?/span>Q因此如果输入的QQ可匚wq个正则表达式的话,那就W合要求了?/p>

和忽略大写的选项cMQ有些正则表辑ּ处理工具q有一个处理多行的选项。如果选中了这个选项Q?span class="code">^?span class="code">$的意义就变成?span class="desc">匚w行的开始处和结束处?/p>

字符转义

如果你想查找元字W本w的话,比如你查?span class="desc">.,或?span class="desc">*,出C问题Q你没办法指定它们,因ؓ它们会被解释成别的意思。这时你得使用\来取消这些字W的Ҏ意义。因此,你应该?span class="regex">\.?span class="regex">\*。当Ӟ要查?span class="desc">\本nQ你也得?span class="regex">\\.

例如Q?span class="regex">unibetter\.com匚wunibetter.comQ?span class="regex">C:\\Windows匚wC:\Windows?/p>

重复

你已l看q了前面?span class="code">*,+,{2},{5,12}q几个匹配重复的方式了。下面是正则表达式中所有的限定W?指定数量的代码,例如*,{5,12}{?Q?/p>
?.常用的限定符
代码/语法 说明
* 重复零次或更多次
+ 重复一ơ或更多?/span>
? 重复零次或一?/span>
{n} 重复n?/span>
{n,} 重复nơ或更多?/span>
{n,m} 重复n到m?/span>

下面是一些用重复的例子Q?/p>

Windows\d+匚wWindows后面?个或更多数字

^\w+匚w一行的W一个单?或整个字W串的第一个单词,具体匚w哪个意思得看选项讄)

字符c?/h2>

要想查找数字Q字母或数字Q空白是很简单的Q因为已l有了对应这些字W集合的元字W,但是如果你想匚w没有预定义元字符的字W集?比如元音字母a,e,i,o,u),应该怎么办?

很简单,你只需要在Ҏ号里列出它们p了,?span class="regex">[aeiou]匹?span class="desc">M一个英文元韛_?/span>Q?span class="regex">[.?!]匚w标点W号(.??)?/p>

我们也可以轻村֜指定一个字W?span class="name">范围Q像[0-9]代表的含意与\d是完全一致的Q?span class="desc">一位数?/span>Q同?span class="regex">[a-z0-9A-Z_]也完全等同于\wQ如果只考虑英文的话Q?/p>

下面是一个更复杂的表辑ּQ?span class="regex">\(?0\d{2}[) -]?\d{8}?/p>

“(”?#8220;)”也是元字W,后面?a >分组?/a>里会提到Q所以在q里需要?a >转义?/p>

q个表达式可以匹?span class="desc">几种格式的电话号?/span>Q像(010)88886666Q或022-22334455Q或02912345678{。我们对它进行一些分析吧Q首先是一个{义字W?span class="part">\(,它能出现0ơ或1??),然后是一?span class="part">0Q后面跟着2个数?\d{2})Q然后是)?span class="part">-?span class="part">I格中的一个,它出?ơ或不出??)Q最后是8个数?\d{8})?/p>

分枝条g

不幸的是Q刚才那个表辑ּ也能匚w010)12345678?span class="string">(022-87654321q样?#8220;不正?#8221;的格式。要解决q个问题Q我们需要用?span class="name">分枝条g。正则表辑ּ里的分枝条g指的是有几种规则Q如果满_中Q意一U规则都应该当成匚wQ具体方法是?span class="code">|把不同的规则分隔开。听不明白?没关p,看例子:

0\d{2}-\d{8}|0\d{3}-\d{7}q个表达式能匚w两种以连字号分隔的电话号码:一U是三位区号Q?位本地号(?10-12345678)Q一U是4位区P7位本地号(0376-2233445)?/p>

\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}q个表达?span class="desc">匚w3位区L电话LQ其中区号可以用括hhQ也可以不用Q区号与本地号间可以用连字号或空格间隔,也可以没有间?/span>。你可以试试用分枝条件把q个表达式扩展成也支?位区L?/p>

\d{5}-\d{4}|\d{5}q个表达式用于匹配美国的邮政~码。美国邮~的规则?位数字,或者用q字号间隔的9位数字。之所以要l出q个例子是因为它能说明一个问题:使用分枝条gӞ要注意各个条件的序。如果你把它Ҏ\d{5}|\d{5}-\d{4}的话Q那么就只会匚w5位的邮编(以及9位邮~的??。原因是匚w分枝条gӞ会从左到右地测试每个条Ӟ如果满了某个分枝的话,׃会去再管其它的条件了?/p>

分组

我们已经提到了怎么重复单个字符Q直接在字符后面加上限定W就行了Q;但如果想要重复多个字W又该怎么办?你可以用括h指定子表辑ּ(也叫?span class="name">分组)Q然后你可以指定这个子表达式的重复ơ数了,你也可以对子表达式进行其它一些操?后面会有介绍)?/p>

(\d{1,3}\.){3}\d{1,3}是一?span class="desc">单的IP地址匚w表达式。要理解q个表达式,h下列序分析它:\d{1,3}匚w1?位的数字Q?span class="part">(\d{1,3}\.){3}匚w三位数字加上一个英文句?q个整体也就是这?span class="name">分组)重复3?/span>Q最后再加上一个一C位的数字(\d{1,3})?/p>

IP地址中每个数字都不能大于255Q大家千万不要被?4》第三季的编剧给忽悠?..

不幸的是Q它也将匚w256.300.888.999q种不可能存在的IP地址。如果能使用术比较的话Q或许能单地解决q个问题Q但是正则表辑ּ中ƈ不提供关于数学的M功能Q所以只能用冗长的分组Q选择Q字W类来描qC个正的IP地址Q?span class="regex">((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)?/p>

理解q个表达式的关键是理?span class="part">2[0-4]\d|25[0-5]|[01]?\d\d?Q这里我׃l说了,你自己应该能分析得出来它的意义?/p>

反义

有时需要查找不属于某个能简单定义的字符cȝ字符。比如想查找除了数字以外Q其它Q意字W都行的情况Q这旉要用?span class="name">反义Q?/p>
?.常用的反义代?/caption>
代码/语法 说明
\W 匚wL不是字母Q数字,下划U,汉字的字W?/span>
\S 匚wL不是I白W的字符
\D 匚wL非数字的字符
\B 匚w不是单词开头或l束的位|?/span>
[^x] 匚w除了x以外的Q意字W?/span>
[^aeiou] 匚w除了aeiouq几个字母以外的L字符

例子Q?span class="regex">\S+匚w不包含空白符的字W串?/p>

<a[^>]+>匚w用尖括号括v来的以a开头的字符?/span>?/p>

后向引用

使用括h定一个子表达式后Q?strong>匚wq个子表辑ּ的文?/strong>(也就是此分组捕获的内?可以在表辑ּ或其它程序中作进一步的处理。默认情况下Q每个分l会自动拥有一?span class="name">l号Q规则是Q从左向叻I以分l的左括号ؓ标志Q第一个出现的分组的组号ؓ1Q第二个?Q以此类推?/p>

后向引用用于重复搜烦前面某个分组匚w的文本。例如,\1代表分组1匚w的文?/span>。难以理解?LCZQ?/p>

\b(\w+)\b\s+\1\b可以用来匚w重复的单?/span>Q像go go, 或?span class="string">kitty kitty。这个表辑ּ首先?span class="desc">一个单?/span>Q也是单词开始处和结束处之间的多于一个的字母或数?/span>(\b(\w+)\b)Q这个单词会被捕获到~号?的分l中Q然后是1个或几个I白W?/span>(\s+)Q最后是分组1中捕L内容Q也是前面匚w的那个单词)(\1)?/p>

你也可以自己指定子表辑ּ?span class="name">l名。要指定一个子表达式的l名Q请使用q样的语法:(?<Word>\w+)(或者把括h?span class="code">'也行Q?span class="code">(?'Word'\w+)),q样把\w+的组名指定ؓWord了。要反向引用q个分组捕获的内容,你可以?span class="code">\k<Word>,所以上一个例子也可以写成q样Q?span class="regex">\b(?<Word>\w+)\b\s+\k<Word>\b?/p>

使用括L时候,q有很多特定用途的语法。下面列Z最常用的一些:

?.常用分组语法
分类 代码/语法 说明
捕获 (exp) 匚wexp,q捕h本到自动命名的组?/span>
(?<name>exp) 匚wexp,q捕h本到名称为name的组里,也可以写??'name'exp)
(?:exp) 匚wexp,不捕获匹配的文本Q也不给此分l分配组?/span>
零宽断言 (?=exp) 匚wexp前面的位|?/span>
(?<=exp) 匚wexp后面的位|?/span>
(?!exp) 匚w后面跟的不是exp的位|?/span>
(?<!exp) 匚w前面不是exp的位|?/span>
注释 (?#comment) q种cd的分l不Ҏ则表辑ּ的处理生Q何媄响,用于提供注释让h阅读

我们已经讨论了前两种语法。第三个(?:exp)不会改变正则表达式的处理方式Q只是这Ll匹配的内容不会像前两种那样被捕获到某个l里面,也不会拥有组?/span>?/p>

零宽断言

地球人,是不是觉得这些术语名U太复杂Q太难记了?我也和你一栗知道有q么一U东西就行了Q它叫什么,随它dQ?#8220;无名Q万物之?..”

接下来的四个用于查找在某些内?但ƈ不包括这些内?之前或之后的东西Q也是说它们像\b,^,$那样用于指定一个位|,q个位置应该满一定的条g(xa)Q因此它们也被称?span class="name">零宽断言。最好还是拿例子来说明吧Q?/p>

断言用来声明一个应该ؓ真的事实。正则表辑ּ中只有当断言为真时才会l进行匹配?/p>

(?=exp)也叫零宽度正预测先行断言Q它断言自n出现的位|的后面能匹配表辑ּexp。比?span class="regex">\b\w+(?=ing\b)Q匹?span class="desc">以ingl尾的单词的前面部分(除了ing以外的部?Q如查找I'm singing while you're dancing.Ӟ它会匚wsing?span class="desc">danc?/p>

(?<=exp)也叫零宽度正回顾后发断言Q它断言自n出现的位|的前面能匹配表辑ּexp。比?span class="regex">(?<=\bre)\w+\b会匹?span class="desc">以re开头的单词的后半部?除了re以外的部?Q例如在查找reading a bookӞ它匹?span class="desc">ading?/p>

假如你想要给一个很长的数字中每三位间加一个逗号(当然是从双加v?Q你可以q样查找需要在前面和里面添加逗号的部分:((?<=\d)\d{3})*\bQ用它对1234567890q行查找时结果是234567890?/p>

下面q个例子同时使用了这两种断言Q?span class="regex">(?<=\s)\d+(?=\s)匚w以空白符间隔的数?再次Q不包括q些I白W??/p>

负向零宽断言

前面我们提到q怎么查找不是某个字符或不在某个字W类?/strong>的字W的Ҏ(反义)。但是如果我们只是想?strong>保某个字符没有出现Q但q不惛_匚w?/strong>时怎么办?例如Q如果我们想查找q样的单?-它里面出C字母q,但是q后面跟的不是字母u,我们可以试q样Q?/p>

\b\w*q[^u]\w*\b匚w包含后面不是字母u的字母q的单?/span>。但是如果多做测?或者你思维_敏锐Q直接就观察出来?Q你会发玎ͼ如果q出现在单词的l尾的话Q像Iraq,BenqQ这个表辑ּ׃出错。这是因?span class="part">[^u]总要匚w一个字W,所以如果q是单词的最后一个字W的话,后面?span class="part">[^u]会匚wq后面的单词分隔符(可能是空|或者是句号或其它的什?Q后面的\w*\b会匚w下一个单词,于是\b\w*q[^u]\w*\bp匚w整个Iraq fighting?span class="name">负向零宽断言能解册L问题Q因为它只匹配一个位|,q不消费M字符。现在,我们可以q样来解册个问题:\b\w*q(?!u)\w*\b?/p>

零宽度负预测先行断言(?!exp)Q?span class="desc">断言此位|的后面不能匚w表达式exp。例如:\d{3}(?!\d)匚w三位数字Q而且q三位数字的后面不能是数?/span>Q?span class="regex">\b((?!abc)\w)+\b匚w不包含连l字W串abc的单?/span>?/p>

同理Q我们可以用(?<!exp),零宽度正回顾后发断言?span class="desc">断言此位|的前面不能匚w表达式expQ?span class="regex">(?<![a-z])\d{7}匚w前面不是写字母的七位数?/span>?/p>

误l分析表辑ּ(?<=<(\w+)>).*(?=<\/\1>)Q这个表辑ּ最能表现零宽断a的真正用途?/p>

一个更复杂的例子:(?<=<(\w+)>).*(?=<\/\1>)匚w不包含属性的单HTML标签内里的内?/span>?span class="code">(<?(\w+)>)指定了这L前缀Q?span class="desc">被尖括号括v来的单词(比如可能?lt;b>)Q然后是.*(L的字W串),最后是一?span class="name">后缀(?=<\/\1>)。注意后~里的\/Q它用到了前面提q的字符转义Q?span class="part">\1则是一个反向引用,引用的正?span class="desc">捕获的第一l?/span>Q前面的(\w+)匚w的内容,q样如果前缀实际上是<b>的话Q后~是</b>了。整个表辑ּ匚w的是<b>?lt;/b>之间的内?再次提醒Q不包括前缀和后~本n)?/p>

注释

括L另一U用途是通过语法(?#comment)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)?/p>

要包含注释的话,最好是启用“忽略模式里的I白W?#8221;选项Q这样在~写表达式时能Q意的dI格QTabQ换行,而实际用时q些都将被忽略。启用这个选项后,?后面到这一行结束的所有文本都被当成注释忽略掉。例如,我们可以前面的一个表辑ּ写成q样Q?/p>

      (?<=    # 断言要匹配的文本的前~
<(\w+)> # 查找括hh的字母或数字(即HTML/XML标签)
) # 前缀l束
.* # 匚wL文本
(?= # 断言要匹配的文本的后~
<\/\1> # 查找括hh的内容:前面是一?/"Q后面是先前捕获的标{?br /> ) # 后缀l束

贪婪与懒?/h2>

当正则表辑ּ中包含能接受重复的限定符Ӟ通常的行为是Q在使整个表辑ּ能得到匹配的前提下)匚w可能多的字W。考虑q个表达式:a.*bQ它会匚w最长的以a开始,以bl束的字W串。如果用它来搜烦aabab的话Q它会匹配整个字W串aabab。这被称?span class="name">贪婪匚w?/p>

有时Q我们更需?span class="name">懒惰匚wQ也是匚w可能少的字W。前面给出的限定W都可以被{化ؓ懒惰匚w模式Q只要在它后面加上一个问?span class="code">?。这?span class="regex">.*?意味着匚wL数量的重复,但是在能使整个匹配成功的前提下用最的重复。现在看看懒惰版的例子吧Q?/p>

a.*?b匚w最短的Q以a开始,以bl束的字W串。如果把它应用于aabab的话Q它会匹?span class="desc">aabQ第一到第三个字符Q?/span>?span class="desc">abQ第四到W五个字W)?/p>

Z么第一个匹配是aabQ第一到第三个字符Q而不是abQ第二到W三个字W)Q简单地_因ؓ正则表达式有另一条规则,比懒惎ͼ贪婪规则的优先更高Q最先开始的匚w拥有最高的优先?#8212;—The match that begins earliest wins?/p>
?.懒惰限定W?/caption>
代码/语法 说明
*? 重复Lơ,但尽可能重?/span>
+? 重复1ơ或更多ơ,但尽可能重?/span>
?? 重复0ơ或1ơ,但尽可能重?/span>
{n,m}? 重复n到mơ,但尽可能重?/span>
{n,}? 重复nơ以上,但尽可能重?/span>

处理选项

在C#中,你可以?a title="MSDN 相关文档" >Regex(String, RegexOptions)构造函?/a>来设|正则表辑ּ的处理选项。如QRegex regex = new Regex("\ba\w{6}\b", RegexOptions.IgnoreCase);

上面介绍了几个选项如忽略大写Q处理多行等Q这些选项能用来改变处理正则表辑ּ的方式。下面是.Net中常用的正则表达式选项Q?/p>
?.常用的处理选项
名称 说明
IgnoreCase(忽略大小? 匚w时不区分大小写?/td>
Multiline(多行模式) 更改^?span class="code">$的含义,使它们分别在L一行的行首和行֌配,而不仅仅在整个字W串的开头和l尾匚w?在此模式?$的精含意是:匚w\n之前的位|以及字W串l束前的位置.)
Singleline(单行模式) 更改.的含义,使它与每一个字W匹配(包括换行W\nQ?
IgnorePatternWhitespace(忽略I白) 忽略表达式中的非转义I白q启用由#标记的注释?/td>
RightToLeft(从右向左查找) 匚w从右向左而不是从左向双行?/td>
ExplicitCapture(昑ּ捕获) 仅捕获已被显式命名的l?/td>
ECMAScript(JavaScript兼容模式) 使表辑ּ的行Z它在JavaScript里的行ؓ一致?/td>

一个经常被问到的问题是Q是不是只能同时使用多行模式和单行模式中的一U?{案是:不是。这两个选项之间没有M关系Q除了它们的名字比较怼Q以至于让h感到疑惑Q以外?/p>

ql?递归匚w

q里介绍的^衡组语法是由.Net Framework支持的;其它语言Q库不一定支持这U功能,或者支持此功能但需要用不同的语法?/p>

有时我们需要匹配像( 100 * ( 50 + 15 ) )q样的可嵌套的层ơ性结?/span>Q这时简单地使用\(.+\)则只会匹配到最左边的左括号和最双的右括号之间的内?q里我们讨论的是贪婪模式Q懒惰模式也有下面的问题)。假如原来的字符串里的左括号和右括号出现的次C相等Q比?span class="string">( 5 / ( 3 + 2 ) ) )Q那我们的匹配结果里两者的个数也不会相{。有没有办法在这L字符串里匚w到最长的Q配对的括号之间的内容呢Q?/p>

Z避免(?span class="code">\(把你的大脑彻底搞p涂Q我们还是用括号代替圆括号吧。现在我们的问题变成了如何把xx <aa <bbb> <bbb> aa> yyq样的字W串里,最长的配对的尖括号内的内容捕获出来Q?/p>

q里需要用C下的语法构造:

  • (?'group') 把捕L内容命名为group,q压?span class="name">堆栈(Stack)
  • (?'-group') 从堆栈上弹出最后压入堆栈的名ؓgroup的捕获内容,如果堆栈本来为空Q则本分l的匚wp|
  • (?(group)yes|no) 如果堆栈上存在以名ؓgroup的捕获内容的话,l箋匚wyes部分的表辑ּQ否则l匹配no部分
  • (?!) 零宽负向先行断言Q由于没有后~表达式,试图匚wLp|

如果你不是一个程序员Q或者你自称E序员但是不知道堆栈是什么东西)Q你pL解上面的三种语法吧:W一个就是在黑板上写一?group"Q第二个是从黑板上擦掉一?group"Q第三个是看黑板上写的q有没有"group"Q如果有ql匹配yes部分Q否则就匚wno部分?/p>

我们需要做的是每碰C左括P在压入一?Open",每碰C个右括号Q就弹出一个,C最后就看看堆栈是否为空Q-如果不ؓI那p明左括号比右括号多,那匹配就应该p|。正则表辑ּ引擎会进行回?攑ּ最前面或最后面的一些字W?Q尽量整个表达式得到匹配?/p>

<                         #最外层的左括号
[^<>]* #最外层的左括号后面的不是括L内容
(
(
(?'Open'<) #到了左括号Q在黑板上写一?Open"
[^<>]* #匚w左括号后面的不是括号的内?br /> )+
(
(?'-Open'>) #到了右括号Q擦掉一?Open"
[^<>]* #匚wx号后面不是括L内容
)+
)*
(?(Open)(?!)) #在遇到最外层的右括号前面Q判断黑板上q有没有没擦掉的"Open"Q如果还有,则匹配失?br /> > #最外层的右括号

ql的一个最常见的应用就是匹配HTML,下面q个例子可以匚w嵌套?lt;div>标签Q?span class="regex"><div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>.

q有些什么东西没提到

我已l描qC构造正则表辑ּ的大量元素,q有一些我没有提到的东ѝ下面是未提到的元素的列表,包含语法和简单的说明。你可以在网上找到更详细的参考资料来学习它们--当你需要用到它们的时候。如果你安装了MSDN Library,你也可以在里面找到关?net下正则表辑ּ详细的文档?/p>
?.未详细讨论的语?/caption>
代码/语法 说明
\a 报警字符(打印它的效果是电脑嘀一?
\b 通常是单词分界位|,但如果在字符c里使用代表退?/span>
\t 制表W,Tab
\r 回R
\v 竖向制表W?/span>
\f 换页W?/span>
\n 换行W?/span>
\e Escape
\0nn ASCII代码中八q制代码为nn的字W?/span>
\xnn ASCII代码中十六进制代码ؓnn的字W?/span>
\unnnn Unicode代码中十六进制代码ؓnnnn的字W?/span>
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开?cM^Q但不受处理多行选项的媄?
\Z 字符串结或行尾(不受处理多行选项的媄?
\z 字符串结?cM$Q但不受处理多行选项的媄?
\G 当前搜烦的开?/span>
\p{name} Unicode中命名ؓname的字W类Q例如\p{IsGreek}
(?>exp) 贪婪子表辑ּ
(?<x>-<y>exp) ql?/span>
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 辑ּ后面的部分改变处理选项
(?(exp)yes|no) 把exp当作零宽正向先行断言Q如果在q个位置能匹配,使用yes作ؓ此组的表辑ּQ否则用no
(?(exp)yes) 同上Q只是用空表达式作为no
(?(name)yes|no) 如果命名为name的组捕获C内容Q用yes作ؓ表达式;否则使用no
(?(name)yes) 同上Q只是用空表达式作为no

联系作?/h2>

好吧,我承?我骗了你,dq里你肯定花了不?0分钟.怿?q是我的?而不是因Z太笨.我之所以说"30分钟",是ؓ了让你有信心,有耐心l箋下去.既然你看Cq里,那证明我的阴谋成功了.被忽悠的感觉很爽吧?

要投诉我,或者觉得我其实可以做得更好,或者有M其它问题,Ƣ迎?a >我的博客让我知道.

                                                                      ----------------------http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm



]]>jsf+spring+hibernate 整合出现的错误集?/title><link>http://www.aygfsteel.com/algz/articles/228548.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Fri, 12 Sep 2008 03:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/228548.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/228548.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/228548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/228548.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/228548.html</trackback:ping><description><![CDATA[一.错误信息提示:<br /> <span style="color: #99cc00;">WARN [main] (Configurator.java:126) - No configuration found. Configuring ehcache from <span style="color: #339966;">ehcache-failsafe.xml </span>found in the classpath: </span>jar:file:/E:/Users/algz/workspace/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/item/WEB-INF/lib/ehcache-1.1.jar!/ehcache-failsafe.xml<br /> <br /> 解决Ҏ:<br /> ehcache-1.1.jar 包下的ehcache-failsafe.xml 文g复制?src 目录?新徏文g,复制内容). <br /> <br /> ?错误信息提示:<br /> <span style="color: #99cc00;">log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).</span><br /> <span style="color: #339966;">log4j:WARN Please initialize the log4j system properly.</span><br /> <br /> 解决Ҏ:<br /> src 目录下创?log4j.properties 文g(具体内容,详见log4j配置文g).<br /> <br /> ?错误信息提示:<br /> <p><span style="color: #99cc00;">ERROR [main] (CGLIBLazyInitializer.java:130) - CGLIB Enhancement failed:</span> item.common.hibernate.query.partsum.Partsum<br /> <span style="color: #99cc00;">java.lang.NoSuchMethodError:</span> org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V</p> <p><span style="color: #339966;"> WARN [main] (PojoEntityTuplizer.java:173) - could not create proxy factory for:</span> item.common.hibernate.query.partsum.Partsum<br /> <span style="color: #339966;">org.hibernate.HibernateException: CGLIB Enhancement failed:</span> item.common.hibernate.query.partsum.Partsum</p> <p><span style="color: #33cccc;">Caused by: java.lang.NoSuchMethodError:</span> org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V</p> <p>///////////////////////////////////////////////////////////////////////////////////////////</p> <p>ERROR [main] (CGLIBLazyInitializer.java:130) - CGLIB Enhancement failed: item.common.hibernate.fourm.Fourm<br /> java.lang.NoClassDefFoundError</p> <p> WARN [main] (PojoEntityTuplizer.java:173) - could not create proxy factory for:item.common.hibernate.fourm.Fourm<br /> org.hibernate.HibernateException: CGLIB Enhancement failed: item.common.hibernate.fourm.Fourm</p> <p>Caused by: java.lang.NoClassDefFoundError<br />  at org.hibernate.proxy.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:116)</p> <p>////////////////////////////////////////////////////////////////////////////////////////////</p> <p>ERROR [main] (CGLIBLazyInitializer.java:130) - CGLIB Enhancement failed: item.common.hibernate.picture<br /> java.lang.NoClassDefFoundError</p> <p> WARN [main] (PojoEntityTuplizer.java:173) - could not create proxy factory for:item.common.hibernate.picture<br /> org.hibernate.HibernateException: CGLIB Enhancement failed: item.common.hibernate.picture</p> <p>Caused by: java.lang.NoClassDefFoundError<br />  at org.hibernate.proxy.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:116)</p> <p><br /> 解决Ҏ:<br /> Spring ?Hibernate q的一?jar 文g发生了版本冲H? 删除 WEB-INF/lib/asm-2.2.3.jar 然后重启 Tomcat.<br /> <br /> ?错误提示:<br /> <span>org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in <span id="wmqeeuq" class="keyword">class</span><span> path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V  </span></span><br /> ...<br /> Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br /> <br /> 解决Ҏ:<br /> q不是真正的bean name错了,也不是找不到他的Ҏ.是asm-2.2.3.jar与asm.jar冲突.<br /> <span style="color: #339966;">正确的删除asm-2.2.3.jarҎ是到目的发布文件夹\WEB-INF\lib中删?不能用MyEclipse里删?因ؓ他在发布时仍没删?</span></p> <p><br /> </p> <p>五?/p> <p>严重: Exception sending context initialized event to listener instance of class <br /> <br /> org.springframework.web.context.ContextLoaderListener<br /> org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in <br /> <br /> ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is <br /> <br /> org.hibernate.DuplicateMappingException: Duplicate class/entity mapping Check<br />     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean<br /> <br /> (AbstractAutowireCapableBeanFactory.java:1336)<br /> <br />     ... 39 more<br /> 2009-8-21 11:52:37 org.apache.catalina.core.StandardContext start<br /> <br /> <br />         <property name="mappingResources"><br />             <list><br />                 <value>com/dao/Check.hbm.xml</value><br />                 <value>./Check.hbm.xml</value></list><br />         </property></p> <p><br /> </p> <p>六?/p> <p> <class catalog="page" name="com.dao.Check" table="check0908100816"><br />   <id name="checkid" type="java.lang.Integer"><br />    <column name="checkid"/><br />    <generator class="native"/><br />   </id><br /> <br /> <br /> 严重: Exception sending context initialized event to listener instance of class <br /> <br /> org.springframework.web.context.ContextLoaderListener<br /> org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in <br /> <br /> ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is <br /> <br /> org.hibernate.MappingException: entity class not found: Check<br />     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean<br />     ... 52 more<br /> 2009-8-21 11:56:45 org.apache.catalina.core.StandardContext start<br /> </p> <img src ="http://www.aygfsteel.com/algz/aggbug/228548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2008-09-12 11:25 <a href="http://www.aygfsteel.com/algz/articles/228548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String,int,Integer,char cd转换http://www.aygfsteel.com/algz/articles/227937.html紫蝶∏飛揚↗紫蝶∏飛揚↗Tue, 09 Sep 2008 06:18:00 GMThttp://www.aygfsteel.com/algz/articles/227937.htmlhttp://www.aygfsteel.com/algz/comments/227937.htmlhttp://www.aygfsteel.com/algz/articles/227937.html#Feedback1http://www.aygfsteel.com/algz/comments/commentRss/227937.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/227937.html 如何字?String 转换成整?int?
int i = Integer.valueOf(my_str).intValue();

int i=Integer.parseInt(str);

如何字?String 转换成Integer ?
Integer integer=Integer.valueOf(str);

如何整?int 转换成字?String ?
1.) String s = String.valueOf(i);
 
2.) String s = Integer.toString(i);
 
3.) String s = "" + i;

如何整?int 转换成Integer ?
Integer integer=new Integer(i);

如何Integer 转换成字?String ?
Integer integerQString

如何Integer 转换?int ?
int num=Integer.intValue();

如何String转换?nbsp; BigDecimal  ?
 BigDecimal d_id = new BigDecimal(str);


如何?String 转换?char ?
char[] ca="123".toCharArray();

如何char转换成String?
String s=ca.toString();      //Mcd都可以采用toString()转换成Stringcd

//-----------------日期-------------------------

Calendar calendar=Calendar.getInstance();
  int year=calendar.get(Calendar.YEAR);
  int month=calendar.get(Calendar.MONTH)+1;
  int day=calendar.get(Calendar.DATE);

获取今天的日期字W串
String today=java.text.DateFormat.getDateInstance().format(new java.util.Date());
获取今天的日?br /> new java.sql.Date(System.currentTimeMillis())



]]>
myeclipse 手动逆向数据库表?/title><link>http://www.aygfsteel.com/algz/articles/223460.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Thu, 21 Aug 2008 04:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/223460.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/223460.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/223460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/223460.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/223460.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.aygfsteel.com/images/blogjava_net/algz/myeclipse.jpg" border="0" width="570" height="438" /><br /> (一)  在其中的 <span style="color: rgb(0, 128, 0);">"Spring DAO"</span> 无法选中的情况下,按上N|?然后在完成后产生的一些文件中,只留?span style="color: rgb(51, 102, 255);">POJO</span>,<span style="color: rgb(51, 102, 255);">DAO</span>,<span style="color: rgb(51, 102, 255);">XML</span>三个文g.<br /> ?<br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/algz/myeclipse1.jpg" border="0" width="223" height="139" />     <= 转化?>   <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/algz/myeclipse2.jpg" border="0" width="205" height="79" /><br /> <br /> (?  修改其中?span style="color: rgb(0, 128, 0);">DAO文g</span>.<br /> ?<br /> "public class FourmDAO extends <span style="color: rgb(153, 204, 0);"><span style="color: rgb(128, 128, 0);">BaseHibernateDAO </span></span>{..."   <=转化?>   "public class FourmDAO extends <span style="color: rgb(128, 128, 0);">HibernateDaoSupport </span>{..."<br /> <br /> (?  Spring ?xml文g?<span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 128, 0);">applicationContext.xml </span></span>d如下代码<br />  <bean id="sessionFactory"<br />   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><br />   <property name="dataSource"><br />    <ref bean="dataSource" /><br />   </property><br />   <property name="hibernateProperties"><br />    <props><br />     <prop key="hibernate.dialect"><br />      org.hibernate.dialect.MySQLDialect<br />     </prop><br />    </props><br />   </property><br />   <property name="mappingResources"><br />    <list><br />     <value>item/common/hibernate/picture.hbm.xml</value><br />     <value>item/common/hibernate/fourm/Fourm.hbm.xml</value><br />     <span style="color: rgb(0, 128, 128);"><value>item/common/hibernate/tem/Fourm.hbm.xml</value></span><br />   </list><br />   </property></bean><br />   <br /> <span style="color: rgb(0, 128, 128);"> <bean id="fourmDAO" class="item.common.hibernate.tem.FourmDAO"><br />   <property name="sessionFactory"><br />    <ref bean="sessionFactory" /><br />   </property><br />  </bean></span> <img src ="http://www.aygfsteel.com/algz/aggbug/223460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2008-08-21 12:43 <a href="http://www.aygfsteel.com/algz/articles/223460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取ApplicationContext.xml文g中定义的BEANhttp://www.aygfsteel.com/algz/articles/222982.html紫蝶∏飛揚↗紫蝶∏飛揚↗Tue, 19 Aug 2008 05:26:00 GMThttp://www.aygfsteel.com/algz/articles/222982.htmlhttp://www.aygfsteel.com/algz/comments/222982.htmlhttp://www.aygfsteel.com/algz/articles/222982.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/222982.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/222982.htmljsp文g:
<%@ page import="javax.servlet.ServletContext" %>
<%@ page import="org.springframework.context.ApplicationContext" %>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>

<%
//获取ApplicationContext对象
ServletContext   servletContext   =   request.getSession().getServletContext();          
ApplicationContext   ac   =   WebApplicationContextUtils.getWebApplicationContext(servletContext);

//获取ApplicationContext.xml文g中定义的BEAN
PictureService ps=(PictureService)ac.getBean("pictureService");



]]>
webapps JSF+Spring+Hibernate目开发流E?/title><link>http://www.aygfsteel.com/algz/articles/190077.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Tue, 01 Apr 2008 06:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/190077.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/190077.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/190077.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/190077.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/190077.html</trackback:ping><description><![CDATA[<h:outputText value="主题Q?{index.appinfo.maxdocsum} value里不能加入HTML代码但可以加入EL" /><br /> <br /> ?LE图.<br /> <span style="color: #008000">一.创徏数据?</span><br /> ?<br /> 1.数据库中设计INT(java.lang.Interger),  VARCHAR(N)(java.lang.String),  DATE(java.lang.Date)<br /> 2.1:N的情况下, 数据库中设计外键(N?和集?一?.<br /> 2.hibernate q向工程.<br /> <br /> <span style="color: #008000">?dJSF, Spring, Hibernate 库引?<br /> <span style="color: #000000">Spring d如下Q?/span><br /> </span><img height="98" alt="" src="http://www.aygfsteel.com/images/blogjava_net/algz/addspring1.jpg" width="397" border="0" /><br /> <img height="95" alt="" src="http://www.aygfsteel.com/images/blogjava_net/algz/addspring2.jpg" width="394" border="0" /><br /> <br /> <span style="color: #008000">? 为spring 配置 web.xml ?faces-config.xml .</span><br /> (1)web.xml<br />  <context-param><br />   <param-name><span style="color: #339966">contextConfigLocation</span></param-name><br />   <param-value>/WEB-INF/applicationContext.xml</param-value><br />  </context-param><br /> <br /> (2)web.xml<br /> <listener><br />        <listener-class><span style="color: #339966">org.springframework.web.context.ContextLoaderListener</span></listener-class><br /> </listener>              //Servlet API 2.3以后<br /> ?<br />  <servlet><br />   <servlet-name>context</servlet-name><br />   <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class><br />   <load-on-startup>1</load-on-startup><br />  </servlet> <p><br /> (3)faces-config.xml<br /> <application><br /> <variable-resolver><span style="color: #339966">org.springframework.web.jsf.DelegatingVariableResolver</span></variable-resolver><br /> </application><br /> <br /> (4)讄qo?解决q问题<br /> 详见:<a href="http://www.aygfsteel.com/algz/articles/201833.html ">http://www.aygfsteel.com/algz/articles/201833.html </a>W二?br /> <br /> 以上配置完成?<span style="color: #33cccc">JSF</span>可以访?span style="color: #33cccc">SPRING理的BEAN</span>.<br /> <br /> <span style="color: #339966"><span style="color: #339966"><span style="color: #008000">?spring+hiberante集成?asm-2.2.3.jar与asm.jar冲突:</span><br /> </span></span><span>org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SessionFactory' defined in <span id="wmqeeuq" class="keyword">class</span><span> path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V  </span></span><br /> ...<br /> Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br /> <br /> 正确的解x?<br /> <span style="color: #000000">是到目的发布文件夹\WEB-INF\lib下删?span style="color: #339966">asm-2.2.3.jar</span>,不能用MyEclipse里删?因ؓ他在发布时仍没删?</span><br /> <br /> <span style="color: #008000">?创徏q行分类的包.<br /> </span>com.dao(数据讉K?, com.service(业务?, com.web(表示?<br /> <br /> <span style="color: #008000">?创徏c?(完成MODEL层设?.   <br />     <br /> <span style="color: #000000">*****************************(<u>也可以利用MyEclipse反向ORM功能自动产生,<span style="color: #339966">但应注意自动配置引v?cd全名"的错?/span></u>)*******************</span><br /> <br /> </span>  (一)数据讉K?<span style="color: #008000">DAO</span>)开? <br /> <br />          Spring 配置文gQ附加) <br />            (1)配置数据?nbsp;         <span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span> ...>      //Myeclipse Hibernate自动反{工具自动配置<br />            (2)配置会话工厂     <span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">" ...>  //Myeclipse Hibernate自动反{工具自动配置<br />            (3)<span style="color: #000000"><span style="color: #000000"><span style="color: #000000">配置事务理?/span>  </span><bean id="transactionManager" ...><br /> </span></span>           (4)配置事务代理      <a href="http://www.aygfsteel.com/algz/articles/163236.html">www.aygfsteel.com/algz/articles/163236.html</a><br /> <span style="color: #339966">          <span style="color: #808000"> <span style="color: #000000">(5)数据讉K?span style="color: #808000">Bean</span>作ؓ属性注入业务层<span style="color: #808000">Property</span>? </span></span>(?不要用NEW创徏数据讉K层对?否则得不到ServletContext而报?)<br /> </span>?<br /> /**数据讉K层BeanQMyeclipse Hibernate自动反{工具配置Q?/<br />  <bean id="<span style="color: #99cc00">userDao</span>" class="com.data.dao.impl.UserDaoImpl"><br />   <property name="sessionFactory"><br />    <ref local="sessionFactory" /><br />   </property><br />  </bean><br /> <br />  /**业务层BeanQMyeclipse Spring配置文档中可以配|,但需先定义好相关c)*/<br />  <bean id="<span style="color: #33cccc">userService</span>" class="com.model.service.impl.UserServiceImpl"><br />   <property name="userDao"><br />    <ref bean="<span style="color: #99cc00">userDao</span>" /><br />   </property><br />  </bean><br /> <br />         1. 创徏 <span style="color: #99cc00">数据讉K层接?    </span><span style="color: #008080">必须创徏</span>,详见:<a href="http://www.aygfsteel.com/algz/articles/262893.html">http://www.aygfsteel.com/algz/articles/262893.html</a><br />             public interface <span style="color: #99cc00">数据讉K层接?</span>{   //在类已存在的情况?d其接?Refactor(重构Q?>Extract Interfaces提取接口<br />                 public String add...();<br />                 public String save...();<br />                   ......                                            //update, delete, load<br />             }<br /> <br />         2 .创徏<span style="color: #33cccc">数据讉K层实现类</span>    //<span style="color: #000000"><span style="color: #000000">ORM反向功能自动配置<br /> </span></span><span style="color: #339966">           <span style="color: #000000"> public class </span><span style="color: #33cccc">数据讉K层实现类</span> <span style="color: #000000">extends <span style="color: #339966">HibernateDaoSupport</span> implements </span><span style="color: #99cc00">数据讉K层接?</span></span>{<br />             ......                                          //getHibernateTemplate().save(user)<br />             }<br />              在实现类的方?throw DataAccessException)中封?getHibernateTemplate().save(user) {Spring已封装的持久化方?(?如果使用Hibernate API 要用try{...}catch{...}自行处理导常.)         <br /> <br />         3.注意事项:<span style="color: #3366ff"> could not initialize proxy - no Session </span>异常,  可能是没有联表查?详见<a href="http://www.aygfsteel.com/algz/articles/191835.html"><font color="#000000">: </font>http://www.aygfsteel.com/algz/articles/191835.html</a><br /> <br /> <br /> <span style="color: #000000"><span style="color: #000000">*****************************(<u>也可以利用MyEclipse反向ORM功能自动产生</u>)***********************************</span></span><br /> <br />    (?业务逻辑?<span style="color: #33cccc"><span style="color: #008000">Service</span></span>)开?<br />          1.创徏<span style="color: #99cc00">业务逻辑层接?/span>. <br /> package com.service;<br /> import com.dao.CheckDAO;<br /> public interface <span style="color: #99cc00">ICheckService </span>{<br />     public abstract CheckDAO getCheckDAO();<br />     public abstract void setCheckDAO(CheckDAO checkDAO);<br />     public abstract String searchCheck();<br /> }<br /> <br />          2.创徏<span style="color: #33cccc">业务逻辑层实现类</span> <br /> <span style="color: #339966">             public class <span style="color: #33cccc">业务逻辑层实现类</span> implements <span style="color: #99cc00">业务逻辑层接?/span></span>.<br />              在实现类? 引用的数据访问层对象实例采用DI的设值方式注?br />                                    在业务逻辑Ҏ(throw DataAccessException)?使用数据讉K层对象实例来讉K数据?  <br /> package com.service;<br /> import java.util.List;<br /> import org.json.simple.JSONArray;<br /> import org.json.simple.JSONObject;<br /> import com.dao.Check;<br /> import com.dao.CheckDAO;<br /> import com.dao.ICheckDAO;<br /> <br /> public class <span style="color: #33cccc">CheckService </span>implements <span style="color: #99cc00">ICheckService </span>{<br /> private CheckDAO checkDAO;</p> <p>public CheckDAO getCheckDAO() {<br />  return checkDAO;<br /> }</p> <p>public void setCheckDAO(CheckDAO checkDAO) {<br />  this.checkDAO = checkDAO;<br /> }<br /> <br /> public String searchCheck(){<br />  List<Check> l=checkDAO.findAll();<br />  JSONArray ja=new JSONArray();<br />  JSONObject jo=new JSONObject();<br /> for(Check c:l){<br /> //  jo.put("department", c.getDepartment());<br /> //  jo.put("checkid", c.getCheckid());<br /> //  jo.put("nam", c.getNam());<br /> //  jo.put("num", c.getNum());<br /> //  jo.put("ondutytime", c.getOndutytime());<br /> //  jo.put("offdutytime", c.getOffdutytime1());<br /> //  jo.put("registerdate", c.getRegisterdate());<br /> //  jo.put("overtime", c.getOvertime());<br /> //  ja.add(jo.clone());<br /> //  jo.clear();<br />  }<br />   return "";<br /> }</p> <p>}<br /> <br />          <span style="color: #808000"><span style="color: #000000">3.数据</span><span style="color: #000000">讉K?span style="color: #808000">Bean</span>作ؓ属性注?span style="color: #33cccc">业务逻辑层实现类</span>?span style="color: #808000">Property</span>? </span></span>(?不要用NEW创徏数据讉K层对?否则得不到ServletContext而报?)<br /> ?<br /> /**数据讉K层BeanQHibernate自动反{工具<span style="color: #008000">自动</span>配置Q?/<br />  <bean id="<span style="color: #99cc00">userDao</span>" class="com.data.dao.impl.UserDaoImpl"><br />   <property name="sessionFactory"><br />    <ref local="sessionFactory" /><br />   </property><br />  </bean><br /> <br />  /**业务逻辑层BeanQSpring配置文档?span style="color: #008000">手动</span>配置Q但需先定义好相关c)*/<br />  <bean id="<span style="color: #33cccc">userService</span>" class="com.model.service.impl.UserServiceImpl"><br />   <property name="userDao"><br />    <ref bean="<span style="color: #99cc00">userDao</span>" /><br />   </property><br />  </bean><br /> <br /> <span style="color: #008000">   (?.表示层开?br /> <br />        <span style="color: #000000">(1)?faces-config.xml 中配|托BEAN</span></span>.(实现<font color="#008000">控制?/font>层设? <br /> <span style="color: #339966">           业务层bean作ؓ属性注入CONTROL层中.<br /> </p> <p><span style="color: #000000"><br /> package com.web;</span><span style="color: #000000"><br /> import com.service.ICheckService;<br /> </span><span style="color: #000000"><br /> public class SearchAll {<br />  private <span style="color: #339966">ICheckService </span>searchService;<br />  private String searchData;</span></p> <p><span style="color: #000000"> public SearchAll() {<br />  }</span></p> <p><span style="color: #000000"> public <span style="color: #339966">ICheckService </span>getSearchService() {<br />   return searchService;<br />  }</span></p> <p><span style="color: #000000"> public void setSearchService(<span style="color: #339966">ICheckService </span>searchService) {<br />   this.searchService = searchService;<br />  }</span></p> <p><span style="color: #000000"> public String getSearchData() {<br />   searchData = searchService.searchCheck();<br />   return searchData;<br />  }</span></p> <p><span style="color: #000000"> public void setSearchData(String searchData) {<br />   this.searchData = searchData;<br />  }<br /> }</span><br /> <br /> <span style="color: #000000"> <managed-bean><br />     <managed-bean-name><span style="color: #3366ff">userBean</span></managed-bean-name><br />     <managed-bean-class>com.web.SearchAll</managed-bean-class><br />     <managed-bean-scope>session</managed-bean-scope><br />     <managed-property><br />        <property-name>searchService</property-name><br />           <value> <span style="color: #33cccc">#{userService}</span></value>   <span style="color: #3366ff"><span style="color: #008080"> //直接引用spring定义的bean</span><br /> </span>    </managed-property><br />     <managed-property><br />        <property-name>searchData</property-name>    //面?userBean.name讉K属性的数据<br />           <value>123</value>                                      //属性默认?br />     </managed-property><br />  </managed-bean></span><br /> <br />         <span style="color: #000000">(2)Bean讉K客户端传来的参数?br /> </span>  <span style="color: #000000">          HttpServletRequest request=(HttpServletRequest)<span style="color: #008000"> FacesContext</span>.<span style="color: #008000">getCurrentInstance</span>().<span style="color: #008000">getExternalContext</span>().<span style="color: #008000">getRequest</span>();<br />             String s=request.<span style="color: #008000">getParameter</span>("webnam");</span><br /> <br /> </span><span style="color: #008000">?面设计</span>.(实现<span style="color: #008000">VIEW</span>层设? <br /> <br /> index.facesQ?׃?<br /> <span style="color: #008000"><span style="color: #99cc00"><%@ page language="java" pageEncoding="UTF-8"%>     //解决EXTJS 接收数据中有中文出现"?????"{ؕ?br />  ${searchAll.searchData}                                                    //解决JS接收数据.Ext.store({urlQindex.facesQ?..})</span></span><br /> <br />     面中访问Bean的二U方?br /> <span style="color: #99cc00">    <span style="color: #3366ff">Ҏ一Q直接在.faces面中?{<span style="color: #00ccff">userBean</span>.property} <strong>(推荐) </strong></span><strong> //property:get/set methord</strong></span><br />          ?不能使用${<span style="color: #00ccff">userBean</span>.method}<br /> <span style="color: #339966"><br /> </span>    <f:view>        //JSF标签必须攑֜里面<br />             名稱1: ${userBean.searchData}                              //正确<br />                  <span style="color: #339966">  <span style="color: #008080">//#{userBean.searchData}                           //报错</span><br /> </span>            名稱2: <h:inputText value="#{userBean.searchData}"/>      //正确<br />                     <span style="color: #008080">//<h:inputText value="${userBean.searchData}"/>      //报错<br />                     //<input value="#{userBean.searchData}"/>               //报错<br />              <span style="color: #000000">名稱3:</span> <span style="color: #000000"><input value="${userBean.searchData}"/>               //正确,而且仍然可以使用JSF的ManagedBean</span><br /> </span>    </f:view><br /> JSF表达?span style="color: #339966">#{...}</span>只能用在JSF标签里,JSP表达?span style="color: #339966">${...}</span>也只能用JSP面?<br /> JSP EL的语法格?${...} 不能攑֜<%...%>? <span style="color: #008000"><span style="color: #99cc00"><br /> <br />      <span style="color: #3366ff">Ҏ二: ?JSP面?直接获取业务层定义的BEAN<br /> </span></span></span><%@ page import="javax.servlet.ServletContext" %><br /> <%@ page import="org.springframework.context.ApplicationContext" %><br /> <%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %><br /> <br /> <% <br /> <span style="color: #339966">//获取ApplicationContext对象</span><br /> ServletContext   servletContext   =   request.getSession().getServletContext();           <br /> ApplicationContext   ac   =   WebApplicationContextUtils.getWebApplicationContext(servletContext); </p> <p><span style="color: #339966">//获取ApplicationContext.xml文g中定义的BEAN</span><br /> userServiceps=(userService)ac.getBean("userService");<br /> <br /> <span style="color: #339966">?导出war</span><br />       File->Export->J2EE->WAR file</p> <img src ="http://www.aygfsteel.com/algz/aggbug/190077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2008-04-01 14:48 <a href="http://www.aygfsteel.com/algz/articles/190077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring + Hibernate 数据?业务层开发框?/title><link>http://www.aygfsteel.com/algz/articles/187053.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Tue, 18 Mar 2008 09:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/187053.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/187053.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/187053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/187053.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/187053.html</trackback:ping><description><![CDATA[<p>        题外?之从有了框架?后台的一切开发都变的不那么复杂了,应该说成是简单了.对于数据讉K的开?都是于接口的编E?C,接口~程!<br /> <br />   (一)数据讉K层开?            (importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;)<br />         (1) 创徏<span style="color: #99cc00">数据讉K层接?/span>.<br />         (2) 创徏 <span style="color: #339966">public class <span style="color: #33cccc">数据讉K层实现类</span> extends HibernateDaoSupport implements <span style="color: #99cc00">数据讉K层接?/span></span>.<br />              在实现类的方?throw DataAccessException)中封?getHibernateTemplate().save(user) {Spring已封装的持久化方?(?如果使用Hibernate API 要用try{}catch{}自行处理导常.)</p>          *************************************<br /> <br />    (?业务逻辑层开?<br />          (1)创徏<span style="color: #99cc00">业务逻辑层接?/span>.<br />          (2)创徏 <span style="color: #339966">public class <span style="color: #33cccc">业务逻辑层实现类</span> implements <span style="color: #99cc00">业务逻辑层接?/span></span>.<br />              在实现类? 引用的数据访问层对象实例采用DI的设值方式注?br />                                    在业务逻辑Ҏ(throw DataAccessException)?使用数据讉K层对象实例来讉K数据?  <br />             *************************************<br /> <br />     (? Spring 配置文g<br />            (1)配置数据?nbsp;         <span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span> ...><br />            (2)配置会话工厂     <span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">" ...><br />            (3)<span style="color: #000000"><span style="color: #000000"><span style="color: #000000">配置事务理?/span>  </span><bean id="transactionManager" ...><br /> </span></span>           (4)配置事务代理      <a href="http://www.aygfsteel.com/algz/articles/163236.html">www.aygfsteel.com/algz/articles/163236.html</a><br /> ?<br />    <span style="color: #000000"><?</span><span style="color: #000000">xml version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000"> encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><!</span><span style="color: #000000">DOCTYPE beans PUBLIC </span><span style="color: #000000">"</span><span style="color: #000000">-//SPRING//DTD BEAN//EN</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /> <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><</span><span style="color: #000000">beans</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />     </span><span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="color: #000000">"</span><span style="color: #000000"> destroy</span><span style="color: #000000">-</span><span style="color: #000000">method</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">close</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />           </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">driverClassName</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                 </span><span style="color: #000000"><</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000">com.mysql.jdbc.Driver</span><span style="color: #000000"></</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />           </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />           </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">url</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                 </span><span style="color: #000000"><</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><span style="color: #008000">jdbc:mysql://localhost/test</span></span><span style="color: #008000"><span style="color: #000000"></value><br /> </span></span><span style="color: #008000"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">           </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />           </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                 </span><span style="color: #000000"><</span><span style="color: #000000">value</span><span style="color: #000000">><span style="color: #99cc00">用户?/span></span><span style="color: #000000"></</span><span style="color: #000000">value</span><span style="color: #000000">>            <!-- <value />讄的?自动转换为字W串,不用加引??"用户? X  --></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                  </span><span style="color: #000000"><</span><span style="color: #000000">value</span><span style="color: #000000">><span style="color: #99cc00">密码</span></span><span style="color: #000000"></</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />             </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #000000"></</span><span style="color: #000000">bean</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /> <br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" /> </span><span style="color: #000000"><span style="color: #339966"><!-- 配置sessionFactory  --></span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000"><</span><span style="color: #000000">bean id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.orm.hibernate3.LocalSessionFactoryBean</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />         </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span><span style="color: #000000">>   <span style="color: #339966"><!-- 数据?--><br /> </span></span><span style="color: #000000"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />               </span><span style="color: #000000"><</span><span style="color: #000000">ref local</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">/></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />         </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />         </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mappingResources</span><span style="color: #000000">"</span><span style="color: #000000">>    <span style="color: #339966"><!-- ORM映射文g --></span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />               </span><span style="color: #000000"><</span><span style="color: #000000">list</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                   </span><span style="color: #000000"><</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000">com</span><span style="color: #000000">/</span><span style="color: #000000">test</span><span style="color: #000000">/</span><span style="color: #000000">Hibernate</span><span style="color: #000000">/</span><span style="color: #000000">User.hbm.xml</span><span style="color: #000000"></</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />               </span><span style="color: #000000"></</span><span style="color: #000000">list</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />          </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />          </span><span style="color: #000000"><</span><span style="color: #000000">property name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hibernateProperties</span><span style="color: #000000">"</span><span style="color: #000000">>    <span style="color: #339966"><!-- Hibernate 属?--></span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                </span><span style="color: #000000"><</span><span style="color: #000000">props</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                      </span><span style="color: #000000"><</span><span style="color: #000000">prop key</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hibernate.dialect</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000">org.hibernate.dialect.MySQLDialect</span><span style="color: #000000"></</span><span style="color: #000000">prop</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                      </span><span style="color: #000000"><</span><span style="color: #000000">prop key</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hibernate.show_sql</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #0000ff">true</span><span style="color: #000000"></</span><span style="color: #000000">prop</span><span style="color: #000000">>        <span style="color: #339966"><!--控制台显C?-><br /> </span></span><span style="color: #000000"><img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />                 </span><span style="color: #000000"></</span><span style="color: #000000">props</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />           </span><span style="color: #000000"></</span><span style="color: #000000">property</span><span style="color: #000000">></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align="top" />      </span><span style="color: #000000"></</span><span style="color: #000000">bean</span><span style="color: #000000">><br /> <br /> </span><span style="color: #000000"><span style="color: #000000"><span style="color: #339966">         <!-- 配置事务理?nbsp; --></span></span><br />          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <br />                <property name="sessionFactory"><br />                     <ref local="sessionFactory" /><br />                </property><br />          </bean><br />  <br />          <bean id="userDAO" class="com.test.数据讉K层实现类"><br />                <property name="sessionFactory"><br />                      <ref local="sessionFactory" /><br />                </property><br />          </bean><br />  <br />          <span style="color: #000000"><span style="color: #339966"><!-- 声明式事务代理其中方法一  --></span></span><br />          <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><br />                <property name="transactionManager"><br />                      <ref bean="transactionManager" /><br />                </property><br />                <property name="target"><br />                      <ref local="userDAO" /><br />                </property><br />                <property name="transactionAttributes"><br />                      <props><br />                            <prop key="insert*">PROPAGATION_REQUIRED</prop><br />                            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><br />                            <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop><br />                      </props><br />                  </property><br />            </bean><br />  <br />           <bean name="/login" class="业务层实现类" singleton="false"><br />                 <property name="userDAO"><br />                       <ref bean="userDAOProxy" /><br />                 </property><br />           </bean><br />     </beans><br /> </span> <img src ="http://www.aygfsteel.com/algz/aggbug/187053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2008-03-18 17:39 <a href="http://www.aygfsteel.com/algz/articles/187053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 1.2声明式事务管?三种动态事务代理区?http://www.aygfsteel.com/algz/articles/163236.html紫蝶∏飛揚↗紫蝶∏飛揚↗Mon, 26 Nov 2007 09:00:00 GMThttp://www.aygfsteel.com/algz/articles/163236.htmlhttp://www.aygfsteel.com/algz/comments/163236.htmlhttp://www.aygfsteel.com/algz/articles/163236.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/163236.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/163236.htmlSpring 2.0 事务处理方式: http://www.aygfsteel.com/algz/articles/262941.html

前?   都需创徏HibernateTransactionManagerc?
<bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>

(一)org.springframework.transaction.interceptor.TransactionProxyFactoryBean:  创徏代理事务.

事务代理Bean:

 1 <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
 2       <property name="transactionManager">
 3             <ref bean="transactionManager" />
 4       </property>
 5       <property name="target">
 6            <ref local="userDAO" />
 7       </property>
 8       <property name="transactionAttributes">
 9            <props>
10                 <prop key="insert*">PROPAGATION_REQUIRED</prop>
11           </props>
12       </property>
13 </bean>


引用代理Bean:

1 <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
2     <property name="userDAO">                                     <!--q里的userDAO是LoginAction的属?/span>-->
3           <ref bean="userDAOProxy" />                              <!--ref bean=userDAO,  调用的是原来的Bean,  ?span style="color: #008080">不是在事务中q行
-->
4     </property>
5 </bean>



(?org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator:  ҎBeanName自动创徏事务代理
org.springframework.transaction.interceptor.TransactionInterceptor:  拦截?br />

 1<!--                    无需引用代理BEAN(bean id 可去?,业务?/login)?span style="color: #008080">直接调用原来的Bean==>userDAO(userDAO已封装入事务)                          -->
 2 <bean  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
 3       <property name="beanNames">
 4             <value>userDAO</value>
 5       </property>
 6       <property name="interceptorNames">
 7             <list>
 8                 <value>transactionInterceptorName</value>
 9             </list>
10        </property>
11 </bean>
12
13<!--                   拦截?定义事务{略                               -->
14 <bean id="transactionInterceptorName" class="org.springframework.transaction.interceptor.TransactionInterceptor">
15       <property name="transactionAttributes">
16           <props>
17               <prop key="*">PROPAGATION_REQUIRED</prop>                    <!--事务{略定义-->
18           </props>
19       </property>
20       <property name="transactionManager">
21             <ref local="transactionManager" />
22       </property>
23 </bean>


 

(?DefaultAdvisorAutoProxyCreator:  自动创徏事务代理.(与二cM)

]]>
Spring中ref local与ref bean区别http://www.aygfsteel.com/algz/articles/163072.html紫蝶∏飛揚↗紫蝶∏飛揚↗Mon, 26 Nov 2007 01:21:00 GMThttp://www.aygfsteel.com/algz/articles/163072.htmlhttp://www.aygfsteel.com/algz/comments/163072.htmlhttp://www.aygfsteel.com/algz/articles/163072.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/163072.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/163072.html今天在做SSH框架Demo实例?在ApplicationResources.properties文g时对<ref bean>?lt;ref local>感到不解,l查找资料才弄明?如下:

   <
bean id = "userDAOProxy"

        class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >

        < property name = "transactionManager" >

            < ref bean = "transactionManager" />

        </ property >

        < property name = "target" >

            < ref local = "UserDAO" />

        </ property >

    </ bean >

1 、用 local 属性指定目?/span> bean 可以利用 xml 解析器的能力在同一?XML配置文g中验?xml id 引用,没有?/span>配的元素,xml 解析器就会生一?/span> error, 所以如果引用的 bean 在同一?XML配置 文g?/span> , 那么?/span> local 形式是最好的选择 .


2 、可以这么说,<ref bean> 是寻找所?XML配置文g中的 bean; <ref local> 是寻找本 xml 文g中的 bean.

3 ?/span><ref> 提供了如下几斚w的属?/span> :
1)bean: 在当?/span> Spring XML 配置文g中,或者在同一 BeanFactory(ApplicationContext) ?/span>的其?/span> JavaBean 中寻扑ּ入的BEAN.
2)local: ?span style="font-family: 宋体">在当?/span> Spring XML 配置文g中寻扑ּ入的BEAN.
如果借助?/span> Spring IDE, 则在~译期可以对其依赖的 JavaBean q行验证。基?/span> local 方式Q开发者能够用到 XML 本n提供的优势,而进行验证?/font>
3)parent:
用于指定其依赖的?/span> JavaBean 定义?/span>



]]>
[转]spring声明式事务管理祥q?http://www.aygfsteel.com/algz/articles/162875.html紫蝶∏飛揚↗紫蝶∏飛揚↗Sat, 24 Nov 2007 09:36:00 GMThttp://www.aygfsteel.com/algz/articles/162875.htmlhttp://www.aygfsteel.com/algz/comments/162875.htmlhttp://www.aygfsteel.com/algz/articles/162875.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/162875.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/162875.htmlSpring也提供了声明式事务管理。这是通过Spring AOP实现的?/p>

Spring 中进行事务管理的通常方式是利用AOPQ面向切片编E)的方式,为普通javacd装事务控Ӟ它是通过动态代理实现的Q由于接口是延迟实例化的Q?spring在这D|间内通过拦截器,加蝲事务切片。原理就是这P具体l节请参考jdk中有兛_态代理的文档。本文主要讲解如何在spring中进行事务控制?br /> 动态代理的一个重要特征是Q它是针Ҏ口的Q所以我们的dao要通过动态代理来让spring接管事务Q就必须在dao前面抽象Z个接口,当然如果没有q样的接口,那么spring会用CGLIB来解决问题,但这不是spring推荐的方式,所以不做讨?

大多数Spring用户选择声明式事务管理。这是最媄响应用代码的选择Q?因而这是和非R入?/em>的轻量容器的观忉|一致的?

从考虑EJB CMT和Spring声明式事务管理的怼以及不同之处出发是很有益的?它们的基本方法是怼的:都可以指定事务管理到单独的方法;如果需要可以在事务?下文调用

  • 不象EJB CMTl定在JTA上,Spring声明式事务管理可以在M环境下用?/span> 只需更改配置文gQ?/span>它就可以和JDBC、JDO、Hibernate或其他的事务机制一起工?

  • Spring 的声明式事务理可以应用到普通Java对象Q不仅仅是特D的c,如EJB

  • Spring提供声明?span class="emphasis">回滚规则QEJB没有对应的特性, 我们在下面讨论q个Ҏ。回滚可以声明式控制Q不仅仅是编E式?

  • Spring允许你通过AOP定制事务行ؓ。例如,如果需要,你可以在事务 回滚中插入定制的行ؓ。你也可以增加Q意的通知Q就象事务通知一栗?EJB CMTQ除了?tt class="literal">pȝ异常Q通常是运行时异常Q, EJB容器自动回滚事务。EJB CMT遇到应用E序异常 Q除?span class="emphasis">java.rmi.RemoteException外的checked异常Q时不会自动回滚事务。虽然Spring声明式事务管理沿用EJB的约定(遇到unchecked 异常自动回滚事务Q,但是q是可以定制的?/p>

    按照我们的测试,Spring声明式事务管理的性能要胜qEJB CMT?/p>

    通常通过TransactionProxyFactoryBean讄Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBeanӞ必须提供一个相关的 PlatformTransactionManager的引用和事务属?/strong>?事务属?/strong>含有上面描述的事务定义?/p>

    <bean id="petStore" 
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager"><ref bean="transactionManager"/></property>
    <property name="target"><ref bean="petStoreTarget"/></property>
    <property name="transactionAttributes">
    <props>
    <prop key="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean>

    事务代理会实现目标对象的接口Q这里是id为petStoreTarget的bean。(使用 CGLIB也可以实现具体类的代理。只要设|proxyTargetClass属性ؓtrue可以。如果目标对象没有实CQ何接口,q将自动讄该属性ؓtrue。通常Q我们希望面向接口而不是类~程。)使用proxyInterfaces属性来限定事务代理来代 理指定接口也是可以的Q一般来说是个好xQ。也可以通过?-前缀强制回滚Q?前缀指定提交Q这允许即抛出unchecked异常时也可以提交事务Q当然你自己要明白自?在做什么)?/p>

         PROPAGATION_REQUIRES_NEW, -MyException
    </prop>
    注:上面的意思是addҎ独占一个事务,当事务处理过E中产生MyException异常或者该异常的子cd回滚该事务?br />
    <prop key="loadAll">
        PROPAGATION_SUPPORTS, ISOLATION_READ_COMMITED, Readonly
    </prop>
    注:表示loadAllҎ支持事务Q而且不会d没有提交事务的数据。它的数据ؓ只读Q这h助于提高d的性能Q?br />
    附A Spring中的所有事务策?br />
    PROPAGATION_MANDATORY
    PROPAGATION_NESTED
    PROPAGATION_NEVER
    PROPAGATION_NOT_SUPPORTED
    PROPAGATION_REQUIRED
    PROPAGATION_REQUIRED_NEW
    PROPAGATION_SUPPORTS

    附B Spring中所有的隔离{略Q?br />
    ISOLATION_DEFAULT
    ISOLATION_READ_UNCOMMITED
    ISOLATION_COMMITED
    ISOLATION_REPEATABLE_READ
    ISOLATION_SERIALIZABLE


                                               ----------------------http://www.aygfsteel.com/DenisLing/archive/2005/12/01/22096.html

    ]]>Spring 事务传播行ؓU类http://www.aygfsteel.com/algz/articles/162784.html紫蝶∏飛揚↗紫蝶∏飛揚↗Sat, 24 Nov 2007 01:56:00 GMThttp://www.aygfsteel.com/algz/articles/162784.htmlhttp://www.aygfsteel.com/algz/comments/162784.htmlhttp://www.aygfsteel.com/algz/articles/162784.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/162784.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/162784.html/**
    * @author 王政
    * @date 2006-11-24
    * @note 转蝲?/em>http://www.javaeye.com/topic/35907?page=1
    */

    ]]>
    Spring+Hibernate DAO 持久层开? Spring ?Hibernate 讉K数据库的三种Ҏ.推荐使用回调.http://www.aygfsteel.com/algz/articles/162578.html紫蝶∏飛揚↗紫蝶∏飛揚↗Fri, 23 Nov 2007 03:30:00 GMThttp://www.aygfsteel.com/algz/articles/162578.htmlhttp://www.aygfsteel.com/algz/comments/162578.htmlhttp://www.aygfsteel.com/algz/articles/162578.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/162578.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/162578.html
    ?
    (1)以下两者都需在Spring XML配置文g?注册Bean(实现c?来依赖注入SessionFactory.
    (2.1)Spring 中进行事务管理的通常方式是利用AOPQ面向切片编E)的方式,为普通javacd装事务控Ӟ它是通过动态代理实现的Q由于接口是
            延迟实例化的Q?spring在这D|间内通过拦截器,加蝲事务切片。原理就是这P具体l节请参考jdk中有兛_态代理的文档。本文主要讲?br />         如何在spring中进行事务控制?br /> (2.2)动态代理的一个重要特征是Q它是针Ҏ口的,所以我们的DAO要通过动态代理来让spring接管事务Q就必须在DAO前面抽象Z个接?  当然
           如果没有q样的接口,那么spring会用CGLIB来解决问题,但这不是spring推荐的方?

    (一)直接使用Hibernate API (不推荐?
    public class DaoImp implate Dao{
             private SessionFactory sessionFactory;
             private static String hql = "from User u where u.username=? ";

              public void setSessionFactory(SessionFactory sessionFactory){
                        this.sessionFactory=sessionFactory;
              }

               public boolean isValidUser(String username) { 
                    try{
                         List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list();
                         if (userList.size() > 0) {
                         return true; 
                     } catch (HibernateException ex){
                         throw converHibernaterAccessException(ex);
                      }   
                 } 
    }
     
    优点:与Spring框架完全分离
    ~点:(1)无法使用Spring框架装所提供的额外功??直接使用Hibernate API 需用try...catch()处理HibernateException异常.
             (2)需在实现类中加入setSessionFactory(SessionFactory sessionFactory)属?接收依赖注入的SessionFactory.

    (?l承 Spring ?HibernateDaoSupport 使用 HibernateTemplate (不推荐用getSession())
    public class DaoImp extend HibernateDaoSupport implates Dao{
             //private SessionFactory sessionFactory;
             private static String hql = "from User u where u.username=? ";

              //public void setSessionFactory(SessionFactory sessionFactory){
              //          this.sessionFactory=sessionFactory;
              //}


               public boolean isValidUser(String username) { 
                  //  try{
                  //     List userList = sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list(); 

                         List userList = getHibernateTemplate().find(hql,username); 
                         if (userList.size() > 0) {
                         return true; 
                   // } catch (HibernateException ex){
                  //     throw converHibernaterAccessException(ex);
                 //  }  
     
                 }
     
               public boolean isValidUser(String username,String password) throw DataAccessException { 
                         Session session = getSession();                 //不推荐?用完后需手动关闭
                         String[] userlist=new String[2];
                         userlist[0]=username;
                         userlist[1]=password;
                     try{
                         List userList = session.find(hql,userlist);       //Hibernate语句; 
                         session.close();
                         if (userList.size() > 0) {
                         return true; 
                      } catch (HibernateException ex){
                         throw converHibernaterAccessException(ex);
                      }   
                 } 
    }

    特点:对HibernateTemplate没有提供的功?可以直接调用HibernateDaoSuppor对象?span style="color: #339966">getSession()Ҏ(极其不推荐?得到Session对象实例用try{ Hibernate API }catch (HibernateException ex )操作.

    (??HibernateTemplate 没有提供的功? q可以用HibernateCallback 回调的方法管理数据库. (极其推荐)

     /**
      * 使用 hql 语句q行操作
      * @param hql       HSQL 查询语句
      * @param offset   开始取数据的下?br />   * @param length   d数据记录?br />   * @return List       l果?br />   */
     public List getListForPage ( final String hql , final int offset , final int length ) {

         List list = getHibernateTemplate().executeFind ( new HibernateCallback ( ) {
               public Object doInHibernate ( Session session ) throws HibernateException, SQLException {
                         Query query = session.createQuery ( hql ) ;
                         query.setFirstResult ( offset ) ;
                         query.setMaxResults ( length ) ;
                         List list = query.list ( ) ;
                         return list ;
               }
        }) ;
        return list ;
     }


    //---------------------------------------------------------------------------

    final String queryString = "from Fourm";                 //必须定义finalcd
       List l= getHibernateTemplate().executeFind(new HibernateCallback(){
        public Object doInHibernate ( Session session ) throws HibernateException, SQLException {
                        Query query = session.createQuery ( queryString ) ;
                        query.setFirstResult ( 0 ) ;
                        query.setMaxResults ( 10 ) ;
                        List list = query.list ( ) ;
                        return list ;
              }

    //------------------------------------------------------------



    Z么不使用getSession(),而用回调的详细说明:

    紫蝶∏飛揚?br /> 听个SPRING+HIBERNATE开发的问题.
    SPRING惌用HIBERNATE的方法有两种,一U是使用getSession();一U是:HibernateCallback回调.
    他们有什么不?
    L♂宝?br /> 前者没有事务管控,Spring把Hibernate最原始的Sessionl你Q但是它不被声明式事务管理的服务Q?br /> 紫蝶∏飛揚?br /> ...声明式事务不会对他进行事务管?
    L♂宝?br /> 后者也是把Sessionq给你,但是通过闭包回调的Ş式给你用,Spring会在l你之前做一下手脚,例如Q添加声明式事务理中声明的事务属性!
    L♂宝?br /> 因ؓ你写的方法通过匿名函数闭包Q然后由Spring去负责执行闭包体内的ҎQ?br /> L♂宝?br /> Java里的借口回调基本都是借用匿名内部cd现的闭包Q?br /> L♂宝?br /> 你看一下Spring的HibernateDaoSupport的源代码q道运行过E了Q?br /> L♂宝?br /> 直接使用getSession()q不享有Spring提供的模板支持,也就是说你得手动关闭q接Q否则会一直挂在那儿,直到时q接池才会回收这个连接!
    L♂宝?br /> q样很容器连接池q接数量溢出Q你懂了啊?
    紫蝶∏飛揚?br /> ?
    紫蝶∏飛揚?br /> new HibernateCallback(){
        public Object doInHibernate ( Session session ) throws HibernateException, SQLException {
    必须q样的方式吗?
    L♂宝?br /> 补习一下编E中的闭包、回调的知识Q再看看Spring的那D代码就可以d理解了!
    L♂宝?br /> 恩!
    紫蝶∏飛揚?br /> ?明白?
    L♂宝?br /> 如果你觉得getHibernateTemplate()提供的方法不以满你的要求Q你得q么使用Q?br /> 紫蝶∏飛揚?br /> 明白.不够用的情况下用回调.
    L♂宝?br /> 闭包JavaScript支持的比较好Q因为它是以函数为单元的QJavaq于面向对象Q所以只能用匿名内部cL有限的支持闭包!标准的回调都是方法回调,也就是闭包到Ҏ中,而不是类中!所以Java中的闭包和其他的语言有一些区别的Q例如访问外部变量必Lfinal的!
    L♂宝?br /> 据说JDK1.7会加入对函数闭包调用的支持!
    紫蝶∏飛揚?br /> ...历害.
    紫蝶∏飛揚?br /> 偶只知道q样?不知道ؓ什么这L.
    L♂宝?br /> 那可不行啊!呵呵Q我最一开始也不大明白Q后来仔l研I了闭包、回调的知识懂了!
    其实q种用法在Swing~程里天天都用啊Q把一个匿名的监听器实现类注册C件源Q只不过那个时候没有注意到q是闭包和回调Ş了!
    紫蝶∏飛揚?br /> 看来有时间得好好看看?..



    ]]>
    [转蝲][译] 利用JSF+SpringFramework+Hibernate构徏Web应用的实例讲q?http://www.aygfsteel.com/algz/articles/158473.html紫蝶∏飛揚↗紫蝶∏飛揚↗Tue, 06 Nov 2007 03:00:00 GMThttp://www.aygfsteel.com/algz/articles/158473.htmlhttp://www.aygfsteel.com/algz/comments/158473.htmlhttp://www.aygfsteel.com/algz/articles/158473.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/158473.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/158473.html阅读全文

    ]]>
    AOP概述...http://www.aygfsteel.com/algz/articles/157505.html紫蝶∏飛揚↗紫蝶∏飛揚↗Thu, 01 Nov 2007 07:32:00 GMThttp://www.aygfsteel.com/algz/articles/157505.htmlhttp://www.aygfsteel.com/algz/comments/157505.htmlhttp://www.aygfsteel.com/algz/articles/157505.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/157505.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/157505.html模块?/span>,q以声明的方式将它们应用到需要日志的lg?
           AOP的功能完全集成到了SPRING事务理,日志和其他各U特性的上下文中.

    q接点(join pointsQ?在计机U学中,“q接?#8221;是连接程序中“控制程Qcontrol flowQ?#8221;的点。在面向斚w的编E中Q一pd的连接点集合被描qCؓ“切入?#8221;。连接点是主E序?#8220;斚w”的相会之处。在面向对象语言中,q接ҎE序执行中定义良好的炏V这些点包括Ҏ和构造函数的调用、字D访问以{等内容
    切入点(pointcutQ?/strong>Q在面向斚w计算机编E中Q切入点是一pdq接点的集合。当E序执行到切入点所描述的其中一个连接点Ӟ与这个切入点相关的代码片Q被UCؓ通知Q就会被执行。这׃得一个程序员可以描述“何处”以及“何时”在已定义的行Z外去执行附加的代码。这样就能向已经存在的Y件增加新的方面(aspectsQ?或者是软g的设计带有清晰的“x分离Qseparation of concernsQ?#8221;的特点,从而ɾ~程者将不同的方面融入到一个完整的应用中?br /> 通知QadviceQ? 在面向方面计机~程中,一?#8220;通知”描述用于应用于程序中l定q接点的一个函敎ͼfunctionQ、方法(methodQ和q程(procedure) ?br />

    q接Ҏ型(Join point modelsQ?/h2>
    面向斚w语言中与通知相关的组件定义了一个连接点模型Qjoin point model-JPMQ,JPM定义了三件事情:

    何时QadviceQ通知可以q行?/strong>之所以叫q接点(join pointsQ是因ؓ它们是正在运行程序中那些附加行ؓ可以被有效接入的炏Vؓ了之可用,q接炚w要被普通程序员所表达和理解。(Z使应用的某个斚w在跨不q诏的变化时保持E_Q连接点应当在跨这些变化时E_
    一U指定(或者量化)q接点的ҎQ称之ؓ“切入?#8221;。切入点军_一个给定的q接Ҏ否匹配。大多数有效的切入点语言使用cM基础语言的语法(例如QAspectJ 使用javaW号Q,q且允许通过命名和组合来实现Q切入点Q重用(reuseQ?br /> 一U指定代码在q接点处q行的方法?/strong>在AspectJ中,被称为通知QadviceQ?q且能够在连接点之前、之后或者包围连接点q行?br />

    AOP~程的适用领域


    Authentication 权限
    Caching ~存
    Context passing 内容传?br /> Error handling 错误处理
    Lazy loading 懒加?br /> Debugging  调试
    logging, tracing, profiling and monitoring 记录跟踪 优化 校准
    Performance optimization 性能优化
    Persistence  持久?br /> Resource pooling 资源?br /> Synchronization 同步
    Transactions 事务

    ]]>IOC的概q?..http://www.aygfsteel.com/algz/articles/157484.html紫蝶∏飛揚↗紫蝶∏飛揚↗Thu, 01 Nov 2007 06:32:00 GMThttp://www.aygfsteel.com/algz/articles/157484.htmlhttp://www.aygfsteel.com/algz/comments/157484.htmlhttp://www.aygfsteel.com/algz/articles/157484.html#Feedback0http://www.aygfsteel.com/algz/comments/commentRss/157484.htmlhttp://www.aygfsteel.com/algz/services/trackbacks/157484.html        IOC属于设计模式的一U概?  采用Dependency Injection (依赖注入)方式实现IOC容器. 
           通俗的讲,ICO容器?span style="color: #339966">?/span>一个通用?span style="color: #339966">Bean工厂.

    ]]>
    [转]入門 02 - 控制反轉IoC --------理解IOC不错的文?/title><link>http://www.aygfsteel.com/algz/articles/156886.html</link><dc:creator>紫蝶∏飛揚↗</dc:creator><author>紫蝶∏飛揚↗</author><pubDate>Tue, 30 Oct 2007 03:12:00 GMT</pubDate><guid>http://www.aygfsteel.com/algz/articles/156886.html</guid><wfw:comment>http://www.aygfsteel.com/algz/comments/156886.html</wfw:comment><comments>http://www.aygfsteel.com/algz/articles/156886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/algz/comments/commentRss/156886.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/algz/services/trackbacks/156886.html</trackback:ping><description><![CDATA[<p> IoC全名Inversion of ControlQ如果中文硬要翻譯過來的話,是「控制反轉」。初看IoCQ從字面上不Ҏ瞭解其意,我覺得要瞭解IoCQ要先從Dependency Inversion開始瞭解Q也是依賴關係的反轉?/p> <p> Dependency Inversion在下面這篇文章中有了清楚的解釋Q?br /> <span id="wmqeeuq" class="nobr"><a title="Visit page outside Confluence" rel="nofollow">http://www.objectmentor.com/publications/dip.pdf<sup><img class="rendericon" height="7" alt="" src="http://www.javaworld.com.tw/confluence/images/icons/linkext7.gif" width="7" align="absMiddle" border="0" /></sup></a></span></p> <p> 單的說Q在模組a計時,高層的抽象模i通常是與業務盔R的模i,它應該具有重用性,而不依賴g層的實作模組Q例如如果低層模i原先是軟碟存取模式Q而高層模i是個存檔備份的需求,如果高層模組直接叫用低層模組的函式,則就其產生了依賴關係?/p> <p>舉個例子,例如下面這個程式:</p> <div id="wmqeeuq" class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid"> <div id="wmqeeuq" class="codeContent"> <pre class="code-java">#include <floppy.h> .... void save() { .... saveToFloppy() } }</pre> </div> </div> <p> 由於save()E式依賴於saveToFloppy()Q如果今天要更換低層的存儲模i為Usb,則這個程式沒有辦法重用,必須加以修改才行Q低層模i的更動造成了高層模i也必須跟著更動Q這不是一個好的設a方式,我們希望模i都依賴於模i的抽象Q這樣才可以重用高層的業務a計?/p> <p> 如果以物件導向的方式來設a,依賴反轉QDependency InversionQ的解釋變為E式不應依賴實作Q而是依賴於抽象,實作必須依賴於抽象。我們來看看下面這個JavaE式Q?/p> <div id="wmqeeuq" class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid"> <div id="wmqeeuq" class="codeHeader" style="border-bottom-style: solid"><strong>BusinessObject.java</strong></div> <div id="wmqeeuq" class="codeContent"> <pre class="code-java"><span id="wmqeeuq" class="code-keyword">public</span> class BusinessObject { <span id="wmqeeuq" class="code-keyword">private</span> FloppyWriter writer = <span id="wmqeeuq" class="code-keyword">new</span> FloppyWriter(); .... <span id="wmqeeuq" class="code-keyword">public</span> void save() { ... writer.saveToFloppy(); } }</pre> </div> </div> <p> 在這個程式中QBusinessObject的存檔依賴於實際的FloppyWriterQ如果今天我們想要將存檔改為存至Usb,我們必須修ҎJ承BusinessObject進行擴展Q而無法直接用BusinessObject?/p> <p>如果透過介面的宣告,可以攚w此一情況Q例如:</p> <div id="wmqeeuq" class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid"> <div id="wmqeeuq" class="codeContent"> <pre class="code-java"><span id="wmqeeuq" class="code-keyword">public</span> <span id="wmqeeuq" class="code-keyword">interface</span> IDeviceWriter { <span id="wmqeeuq" class="code-keyword">public</span> void saveToDevice(); } <span id="wmqeeuq" class="code-keyword">public</span> class BusinessObject { <span id="wmqeeuq" class="code-keyword">private</span> IDeviceWriter writer; <span id="wmqeeuq" class="code-keyword">public</span> void setDeviceWriter(IDeviceWriter writer) { <span id="wmqeeuq" class="code-keyword">this</span>.writer = writer; } <span id="wmqeeuq" class="code-keyword">public</span> void save() { .... writer.saveToDevice(); } }</pre> </div> </div> <p> 這樣一來,BusinessObject是可重用的Q如果今天我有存儲至Floppy或Usb的需求,我只要實作IDeviceWriter卛_Q而不用修改BusinessObjectQ?/p> <div id="wmqeeuq" class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid"> <div id="wmqeeuq" class="codeContent"> <pre class="code-java"><span id="wmqeeuq" class="code-keyword">public</span> class FloppyWriter implement IDeviceWriter { <span id="wmqeeuq" class="code-keyword">public</span> void saveToDevice() { .... <span id="wmqeeuq" class="code-comment">// 實際儲存至Floppy的程式碼 </span> } } <span id="wmqeeuq" class="code-keyword">public</span> class UsbDiskWriter implement IDeviceWriter { <span id="wmqeeuq" class="code-keyword">public</span> void saveToDevice() { .... <span id="wmqeeuq" class="code-comment">// 實際儲存至UsbDisk的程式碼 </span> } }</pre> </div> </div> <p> 從這個角度來看,Dependency Inversion的意思即是程式不依賴於實作,而是E式與實作都要依賴於抽象?/p> <p> IoC的Control是控制的意思,其實其背後的意義也是一E依賴關係的轉移Q如果A依賴於BQ其意義xB擁有控制Ɗ,我們要轉移這種關係Q所以依賴關係的反轉x控制關係的反轉,藉由控制關係的轉U,我們可以獲得元件的可重用性,在上面的JavaE式中,整個控制權從實際的 FloppyWriter轉移x象的IDeviceWriter介面上,使得BusinessObject、FloppyWriter?UsbDiskWriter這幾個實現依賴於抽象的IDeviceWriter介面?/p> <p> 從容器(ContainerQ的角度Q程式的業務邏輯部䆾應是可以重用的,不應受到所使用框架或容器的影響Q因為我們可能轉UL個業務邏輯至其它的框架或容器Q如果業務邏輯過g賴容器,則轉U至其它的框架或容器時,會發生困難?/p> <p> IoC在容器的角度Q可以用這麼一句好萊塢名言來代表:"Don't call me, I'll call you." 以程式的術語來說的話Q就是「不要向容器要求您所需要的Q物Ӟ資源Q容器會自動這些物gi您Q」。IoC要求的是容器不R入應用程式本w,應用E式本n提供好介面,容器可以透過這些介面所需的資源注至程式中Q?span style="color: #339966">應用E式不向容器d要求資源Q故而不會依賴於容器的元Ӟ應用E式本n不會意識到正被容器用,可以隨時從容器中脫離轉移而不用作M的修?/span>Q而這個特性正是一些業務邏輯中間g最需要的?br /> <br /> <br />                                                              -------------[?a >http://www.javaworld.com.tw</a> <span id="wmqeeuq" class="smalltext">Added by <a >良葛?/a>, last edited by <a >Forth</a> on Aug 13, 2005  (<a >view change</a>) ] <style type="text/css"> div.auto_complete { width: 350px; background: #fff; } div.auto_complete ul { border: 1px solid #888; margin: 0; padding: 0; width: 100%; list-style-type: none; } div.auto_complete ul li { margin: 0; padding: 3px; } div.auto_complete ul li.selected { background-color: #ffb; } div.auto_complete ul strong.highlight { color: #800; margin: 0; padding: 0; } </style> <!-- Delay the loading of the external javascript file needed for labels (as it takes too long to load and visibly holds loading of the page body) --><!-- To do this without javascript errors over undefined functions, we need to declare stubs here (that are overrided later by the proper implementations) --><script language="JavaScript" type="text/javascript"> function doAddLabel(hideTextfieldAfterAddParam) { // stub } function onAddLabel() { // stub } function showLabelsInput() { // stub } </script><!-- This is a hack to work around an apparent SiteMesh bug - http://jira.opensymphony.com/browse/SIM-198 --></span></p> <img src ="http://www.aygfsteel.com/algz/aggbug/156886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/algz/" target="_blank">紫蝶∏飛揚↗</a> 2007-10-30 11:12 <a href="http://www.aygfsteel.com/algz/articles/156886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȩ</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">߰</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">֥</a>| <a href="http://" target="_blank">пǰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank">Ѩ</a>| <a href="http://" target="_blank">Ϫ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>