﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BeanSoft's Java Blog-随笔分类-Spring</title><link>http://www.blogjava.net/beansoft/category/23350.html</link><description>MyEclipse 教程, Java EE 5, JSPWiki, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript, Netbeans</description><language>zh-cn</language><lastBuildDate>Thu, 21 Feb 2008 06:12:54 GMT</lastBuildDate><pubDate>Thu, 21 Feb 2008 06:12:54 GMT</pubDate><ttl>60</ttl><item><title>IBM 中文网站的 Spring 系列等资料</title><link>http://www.blogjava.net/beansoft/archive/2008/01/04/172725.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 04 Jan 2008 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/01/04/172725.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/172725.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/01/04/172725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/172725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/172725.html</trackback:ping><description><![CDATA[<p>在电子书《MyEclipse 6 Java 开发中文教程》中列入了大量作者精心搜集的资料，今天把Spring部分的参考资料和大家分享：</p> <p>翻译: MyEclipse Spring 入门教程(含官方视频和AOP例子) <a href="http://www.blogjava.net/beansoft/archive/2007/11/27/163416.html">http://www.blogjava.net/beansoft/archive/2007/11/27/163416.html</a>  <p>使用 HibernateTemplate 实现分页查询 <a href="http://www.blogjava.net/beansoft/archive/2007/10/10/151702.html">http://www.blogjava.net/beansoft/archive/2007/10/10/151702.html</a>  <p>转载: Eclipse插件之Spring IDE <a href="http://www.blogjava.net/beansoft/archive/2007/10/02/150127.html">http://www.blogjava.net/beansoft/archive/2007/10/02/150127.html</a>  <p><b>IBM </b><b>开发网站的Spring</b><b>系列（含代码）：</b>  <p><a href="http://www-128.ibm.com/developerworks/cn/java/wa-spring1/">http://www-128.ibm.com/developerworks/cn/java/wa-spring1/</a> Spring 系列: Spring 框架简介――Spring AOP 和 IOC 容器入门  <p><a href="http://www-128.ibm.com/developerworks/cn/java/wa-spring2/">http://www-128.ibm.com/developerworks/cn/java/wa-spring2/</a> Spring 系列，第 2 部分: 当 Hibernate 遇上 Spring――Hibernate 事务天生适合 Spring AOP  <p><a href="http://www-128.ibm.com/developerworks/cn/java/wa-spring3/">http://www-128.ibm.com/developerworks/cn/java/wa-spring3/</a> Spring 系列，第 3 部分: 进入 Spring MVC――用 Spring MVC 轻松进行应用程序开发  <p><a href="http://www-128.ibm.com/developerworks/cn/java/wa-spring4/">http://www-128.ibm.com/developerworks/cn/java/wa-spring4/</a> Spring 系列，第 4 部分: Spring JMS 消息处理 1-2-3――Spring JMS 把企业消息处理变得轻而易举  <p>来自满江红开源网站（<a href="http://wiki.redsaga.com/confluence/display/RSTEAM/Home">http://wiki.redsaga.com/confluence/display/RSTEAM/Home</a>）的中文文档：  <p>《Spring 开发指南》 作者：Xiaxin (夏昕) PDF 格式169页, 1.02M 下载地址：<a href="http://www.xiaxin.net/Spring_Dev_Guide.rar">http://www.xiaxin.net/Spring_Dev_Guide.rar</a>  <p>SpringFramework概述 翻译：DigitalSonic PDF 格式 24 页，322K 下载地址：  <p><a href="http://www.redsaga.com/opendoc/OpenDoc-IntroduceToSpringFramework.pdf">http://www.redsaga.com/opendoc/OpenDoc-IntroduceToSpringFramework.pdf</a>  <p>Spring 2.0 Reference（官方参考手册） 翻译：DigitalSonic 2006/10/22 完成 HTML版本地址：<a href="http://www.redsaga.com/opendoc/Seam2.0/html">http://www.redsaga.com/opendoc/Seam2.0/html</a> PDF版本(509页, 3.74M) 下载地址：<a href="http://download.gro.clinux.org/jaction/spring2.0-reference_final_zh_cn.pdf">http://download.gro.clinux.org/jaction/spring2.0-reference_final_zh_cn.pdf</a> ,CHM版本(2.2M)下载地址：<a href="https://gro.clinux.org/frs/download.php/1828/spring2.0-reference_final_zh_cn.chm">https://gro.clinux.org/frs/download.php/1828/spring2.0-reference_final_zh_cn.chm</a></p><img src ="http://www.blogjava.net/beansoft/aggbug/172725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-01-04 13:33 <a href="http://www.blogjava.net/beansoft/archive/2008/01/04/172725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 1.2和2.0的简单AOP例子</title><link>http://www.blogjava.net/beansoft/archive/2008/01/02/172266.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 02 Jan 2008 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/01/02/172266.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/172266.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/01/02/172266.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/172266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/172266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天一看，Blog爬到了第一，又很久没更新了，因此就把这两天正在写的电子书的一部分贴上吧。今天想找找Spring 2.0 AOP的例子，谁料想网上文章一大抄，而且呢，大部分人是直接copy Spring的文档，自己连个demo也不写一种的那个，就见一堆文章说的云里雾里热火朝天的AOP，也没见着几个能跑的例子。最后总算找到了个兄弟的小短文，有个能跑的例子，这才算弄好了1.2和2.0的对比部分。好了，...&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2008/01/02/172266.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/172266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-01-02 17:33 <a href="http://www.blogjava.net/beansoft/archive/2008/01/02/172266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 2.5 标注开发的简单例子</title><link>http://www.blogjava.net/beansoft/archive/2007/11/30/164230.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 30 Nov 2007 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/11/30/164230.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/164230.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/11/30/164230.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/164230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/164230.html</trackback:ping><description><![CDATA[<div>&nbsp;</div> <p>研究了很久新出的 Spring 2.5, 总算大致明白了如何用标注定义 Bean, 但是如何定义和注入类型为 java.lang.String 的 bean 仍然未解决, 希望得到高人帮助.</p> <p>总的来看 Java EE 5 的标注开发方式开来是得到了大家的认可了.</p> <p>@Service 相当于定义 bean, 自动根据 bean 的类名生成一个首字母小写的 bean</p> <p>@Autowired 则是自动注入依赖的类, 它会在类路径中找成员对应的类/接口的实现类, 如果找到多个, 需要用 @Qualifier("chineseMan") 来指定对应的 bean 的 ID.<br></p> <p>一定程度上大大简化了代码的编写, 例如一对一的 bean 映射现在完全不需要写任何额外的 bean 定义了.<br></p> <p>下面是代码的运行结果:</p> <p>man.sayHello()=抽你丫的<br>SimpleMan said: Hi<br>org.example.EnglishMan@12bcd4b said: Fuck you! <p>&nbsp;</p> <p>代码:</p> <p>beans.xml</p> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="UTF-8"</span>?<span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span>
       <span style="color: #ff0000">xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span>
       <span style="color: #ff0000">xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span>
       <span style="color: #ff0000">xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd"</span><span style="color: #0000ff">&gt;</span>
     <span style="color: #0000ff">&lt;</span><span style="color: #800000">context:annotation-config</span><span style="color: #0000ff">/&gt;</span>
     <span style="color: #0000ff">&lt;</span><span style="color: #800000">context:component-scan</span> <span style="color: #ff0000">base-package</span><span style="color: #0000ff">="org.example"</span><span style="color: #0000ff">/&gt;</span>
     
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></pre></div>
<p>测试类:</p>
<p>import org.example.IMan;<br>import org.example.SimpleMan;<br>import org.springframework.context.ApplicationContext;<br>import org.springframework.context.support.ClassPathXmlApplicationContext; 
<p>public class SpringTest {<br>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleMan dao = (SimpleMan) ctx.getBean("simpleMan");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(dao.hello());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMan man = (IMan) ctx.getBean("usMan");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(man.sayHello());<br>&nbsp;&nbsp;&nbsp; }<br>}
<p>自动探测和注入bean的类:</p>
<p>package org.example; 
<p>import org.springframework.beans.factory.annotation.Autowired;<br>import org.springframework.beans.factory.annotation.Qualifier;<br>import org.springframework.stereotype.Service; 
<p>@Service<br>public class SimpleMan {<br>&nbsp;&nbsp;&nbsp; // 自动注入名称为 Man 的 Bean<br>&nbsp;&nbsp;&nbsp; @Autowired(required = false)<br>&nbsp;&nbsp;&nbsp; @Qualifier("chineseMan")<br>&nbsp;&nbsp;&nbsp; //@Qualifier("usMan")<br>&nbsp;&nbsp;&nbsp; private IMan man;&nbsp;&nbsp;&nbsp; <p>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return the man<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public IMan getMan() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return man;<br>&nbsp;&nbsp;&nbsp; } 
<p>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * @param man the man to set<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public void setMan(IMan man) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.man = man;<br>&nbsp;&nbsp;&nbsp; } 
<p>&nbsp;&nbsp;&nbsp; public String hello() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("man.sayHello()=" + man.sayHello());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "SimpleMan said: Hi";<br>&nbsp;&nbsp;&nbsp; }<br>}
<p>&nbsp;</p>
<p>一个接口和两个实现类:</p>
<p>package org.example; 
<p>/**<br> * 抽象的人接口.<br> * @author BeanSoft<br> * @version 1.0<br> */<br>public interface IMan {<br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp; * 打招呼的抽象定义.<br>&nbsp;&nbsp;&nbsp;&nbsp; * @return 招呼的内容字符串<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; public String sayHello();<br>}
<p>&nbsp;</p>
<p>package org.example; 
<p>import org.springframework.stereotype.Service; 
<p>/**<br> * 中国人的实现.<br> * @author BeanSoft<br> */<br>@Service<br>public class ChineseMan implements IMan { 
<p>&nbsp;&nbsp;&nbsp; public String sayHello() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "抽你丫的";<br>&nbsp;&nbsp;&nbsp; } 
<p>}
<p>&nbsp; <p>package org.example; 
<p>import org.springframework.stereotype.Service; 
<p>/**<br> * @author BeanSoft<br> * 美国大兵<br> */<br>@Service("usMan")<br>// 这里定义了一个 id 为 usMan 的 Bean, 标注里面的属性是 bean 的 id<br>public class EnglishMan implements IMan { 
<p>&nbsp;&nbsp;&nbsp; public String sayHello() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this + " said: Fuck you!";<br>&nbsp;&nbsp;&nbsp; } 
<p>}
<img src ="http://www.blogjava.net/beansoft/aggbug/164230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-11-30 12:53 <a href="http://www.blogjava.net/beansoft/archive/2007/11/30/164230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>翻译: MyEclipse Spring 入门教程(含官方视频和AOP例子)</title><link>http://www.blogjava.net/beansoft/archive/2007/11/27/163416.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 27 Nov 2007 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/11/27/163416.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/163416.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/11/27/163416.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/163416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/163416.html</trackback:ping><description><![CDATA[<p>这是 MyEclipse 帮助文档中的内容的翻译, 点击菜单 Help -&gt; Contents 可以看到 MyEclipse 的全部英文帮助文档.</p> <p>在线阅读(完整内容含 Flash 动画): <a href="http://beansoft.java-cn.org/myeclipse_doc_cn/springintroduction/">http://beansoft.java-cn.org/myeclipse_doc_cn/springintroduction/</a> </p> <p>下载: <a href="http://cid-519b3f7aa2172030.skydrive.live.com/self.aspx/Public/MyEclipse中文文档/MyEclipse Spring 快速入门.zip">http://cid-519b3f7aa2172030.skydrive.live.com/self.aspx/Public/MyEclipse中文文档/MyEclipse Spring 快速入门.zip</a> 2.31MB&nbsp; </p> <h3><strong><font color="#ff0000">友情提示: 下载微软网盘文件时关闭下载工具,&nbsp; 否则你将得到错误的文件, 双击 EXE 会出来 DOS 窗口. 正确操作是点击文件名后能看到显示下载链接和文件大小等信息.</font> </strong></h3> <h3>MyEclipse Spring 入门教程<br>翻译: 刘长炯 <a href="mailto:BeanSoft@126.com">BeanSoft@126.com</a><br>Blog: <a href="http://www.blogjava.net/beansoft/">http://www.blogjava.net/beansoft/</a><br>日期: 2007-11-26<br>声明: 中文文字版权归 刘长炯 所有, 原文及相关的图片等资源的版权归原作者 Genuitec L.L.C 公司所有. </h3> <h3>目录 </h3> <ol> <li>简介 <li>建议的听众<a href="#Suggested%20Audience"></a> <li>系统需求<a href="#System%20Requirements"></a> <li>Spring 介绍 <li>开始工作 <li>可视化项目 <li>理解和运行代码 <li>修改项目 <li>小结  <li>FAQ <li>资源  <li>反馈</li></ol> <p>&nbsp;</p> <p>&nbsp;</p> <p>本人原创 MyEclipse 6 帮助文档中文版集中下载  <p><a title="http://cid-519b3f7aa2172030.skydrive.live.com/browse.aspx/Public/MyEclipse中文文档" href="http://cid-519b3f7aa2172030.skydrive.live.com/browse.aspx/Public/MyEclipse中文文档">http://cid-519b3f7aa2172030.skydrive.live.com/browse.aspx/Public/MyEclipse中文文档</a></p><img src ="http://www.blogjava.net/beansoft/aggbug/163416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-11-27 12:06 <a href="http://www.blogjava.net/beansoft/archive/2007/11/27/163416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>击破谎言: Spring 2.5 并非&amp;quot;完全&amp;quot;支持基于标注的配置</title><link>http://www.blogjava.net/beansoft/archive/2007/11/23/162700.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 23 Nov 2007 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/11/23/162700.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/162700.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/11/23/162700.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/162700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/162700.html</trackback:ping><description><![CDATA[<p>近日看到各大中文网站纷纷呛声说 Spring 2.5 发布, 典型消息如下:</p> <p>&nbsp;</p> <blockquote> <p>来自 Springframework 官方的消息，Spring 2.5 正式发布了。  <p><a href="http://www.springframework.org/node/561">http://www.springframework.org/node/561</a> <p>该版本的主要特征包括： <br>对Spring2.0的平滑升级 —— Spring2.5被设计成为对Spring2.0的平滑升级，现存的代码和配置文件不需要做任何更改。 <br>更多XML命名空间配置 —— 新的命名空间包括和 <br>完全支持Java 6和Java EE 5 —— Spring2.5支持Java 6和Java EE 5的所有新特性——同时也提供了对Java 1.4.2和J2EE1.3的支持。 <br>完全支持基于注解的配置 —— 现在所有的配置都可以使用注解来实现，并且也支持 JSR250 注解。 <br>基于注解的MVC controller —— Web Controller现在可以用如@RequestMapping这样的注解来创建，无需实现任何接口。 <br>对AspectJ的支持 —— 在一些环境下，增加了对AspectJ的装载时编织支持，同时提供了一个新的bean切入点。 <br>对OSGi的支持 —— Spring2.5框架的所有jar包都是兼容于OSGi的，以此来简化在OSGi环境下对其的使用。 <br>测试框架的巨大改变 —— 现在新的基于注解的测试框架已经支持TestNG和JUnit4 <br>性能的改良 —— Spring2.5各方面的性能指标都有了显著的改善。</p></blockquote> <p>冲着 完全支持基于注解的配置 这句话, 我兴冲冲的下载了 Spring 2.5 以及其文档, 企图体验一下 EJB 3 式的简单快速的基于标注的开发, 然而, 遗憾的是官方文档和消息的来源页面: <a href="http://www.springframework.org/node/561">http://www.springframework.org/node/561</a>, 没有任何文字说到自己<strong>完全支持基于注解的配置. </strong>我打开英文的 Reference, 仔细阅读其中关于标注的部分, 然而遗憾的发现只是部分实现了标注, 请参考 <a title="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config">http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config</a> , 简单说就是实现了对 Autowired 和 Transaction, AOP 的标注支持, 而不是所有 bean 定义, 更不是说从此你可以不用写 Bean 配置的 XML 文件了. 下午仔细试了半天, 企图写出标注配置的例子来, 也没有成功实现不写 bean 定义 XML 文件就能初始化 Bean 并注入所有属性的功能(本来想做的例子是注入一个 message 的 String 属性), 去阅读下载的示例代码(example目录下的文件), 也没有这样的例子. 最后又发现了原来支持标注的版本在这里:  <p><a title="http://www.jroller.com/habuma/entry/guice_vs_spring_javaconfig_a" href="http://www.jroller.com/habuma/entry/guice_vs_spring_javaconfig_a">http://www.jroller.com/habuma/entry/guice_vs_spring_javaconfig_a</a> <p>它的名字叫 Spring JavaConfig. <p>最后我们再来看看原始页面是如何介绍自己的标注的(<a href="http://www.springframework.org/node/561">http://www.springframework.org/node/561</a>): <p>Spring 2.5 enhances Spring 2.0 with many exciting new features, including:<br>Full Java 6 and Java EE 5 support (JDBC 4.0, JTA 1.1, JavaMail 1.4, JAX-WS 2.0)<br>Full-featured annotation-driven dependency injection, including support for 'qualifiers'<strong> (注意这里只是说完整支持标注驱动的依赖注入, 而不是 complete supported annotation of all features)<br></strong>Support for auto-detecting application components in the classpath and auto-configuring them as Spring managed objects<br>A new bean name pointcut element in AspectJ pointcut expressions<br>Built-in support for AspectJ load-time weaving based on the LoadTimeWeaver abstraction<br>New XML configuration namespaces "context" and "jms", for maximum convenience<br>A completely revised integration test framework, with first-class support for JUnit 4 and TestNG<br>A new annotation-based controller model for Spring MVC supporting Servlet and Portlet environments<br>Extended SimpleJdbcTemplate functionality, including support for named SQL parameters<br>Officially certified WebSphere support<br>The packaging of Spring Framework jars as OSGi-compliant bundles out of the box<br>The ability to deploy a Spring ApplicationContext as a JCA RAR file, for headless application modules<br>JCA 1.5 message endpoint management, for Spring-managed JMS and CCI message listeners <p>小小的兴奋了一把, 最后又不得不归于失望, 继续研究 XML 文件的编写格式吧. 希望下次看到类似消息的时候能翻译的准确一些, 免得误导偶等开源软件"消费者". <p>&nbsp; <p>当然了, 也欢迎 Spring 2.5 高人们向偶分享完全使用标注的例子代码, 那样的话我真是太感谢了!</p><img src ="http://www.blogjava.net/beansoft/aggbug/162700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-11-23 18:14 <a href="http://www.blogjava.net/beansoft/archive/2007/11/23/162700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>钱啊钱 当 Spring 的首页充斥了培训信息</title><link>http://www.blogjava.net/beansoft/archive/2007/11/06/158490.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 06 Nov 2007 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/11/06/158490.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/158490.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/11/06/158490.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/158490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/158490.html</trackback:ping><description><![CDATA[<table id="content" cellspacing="0" cellpadding="15" width="100%" border="0"> <tbody> <tr> <td valign="top"> <div id="mission">Welcome to the home of the <strong>Spring Framework</strong>, the leading full-stack Java/JEE application framework. Led and sustained by <a href="http://www.interface21.com">Interface21</a>, Spring delivers significant benefits for many projects, increasing development productivity and runtime performance while improving test coverage and application quality.</div> <div id="main"> <div class="node sticky"> <h1 class="title"><a href="http://www.springframework.org/node/550">Article: Introduction to the Spring Framework 2.5</a></h1><span class="submitted">Submitted by Nicole Konicki on Tue, 2007-10-30 10:38.</span> <span class="taxonomy"><a href="http://www.springframework.org/articles">Technical Article</a></span>  <div class="content"> <p>In this <a href="http://www.theserverside.com/tt/articles/article.tss?l=IntrotoSpring25" target="_blank">TSS article</a>, Rod Johnson explains what Spring sets out to achieve and how it can help the community develop enterprise Java applications.</p></div> <div class="links">» <a href="http://www.springframework.org/user/login">login</a> or <a href="http://www.springframework.org/user/register">register</a> to post comments</div></div> <div class="node "> <h1 class="title"><a href="http://www.springframework.org/node/555">Spring Framework Training Summary (November)</a></h1><span class="submitted">Submitted by Colin Sampaleanu on Thu, 2007-11-01 16:00.</span> <span class="taxonomy"><a href="http://www.springframework.org/taxonomy/term/4">News and Announcements</a></span>  <div class="content"><a href="http://www.interface21.com/" target="_self">Interface21</a> is pleased to offer a number of Spring Framework 2.0 and AOP training events in the upcoming period, delivered by the people who build and sustain the Spring Framework. For full details, please visit the main <a href="http://www.springframework.com/training/" target="_self">training information page</a>. Here is a summary of some of the upcoming courses and venues:<br> <ul> <li>North America  <ul> <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/core-nyc-7.html" target="_self">November 6th - 9th, New York, NY</a><br> <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/core-dal-3.html" target="_self">November 13th - 16th, Dallas, TX</a>  <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/core-iad-10.html" target="_self">November 27th - 30th, Washington, DC<br></a> <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/core-sdg-2.html" target="_self">December 4th - 7th, San Diego, CA</a>  <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/core-iad-11.html" target="_self">December 17th - 20th, Washington, DC</a>  <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/core-bos-4.html" target="_self">December 17th - 20th, Boston, MA</a><br> <li><em>Core Spring</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/core-mco-3.html" target="_self">January 8th - 11th, Orlando, FL</a>  <li><em>Core Spring</em><em>: </em><a href="http://www.interface21.com/training/eventDetails/core-ord-8.html" target="_self">January 15th - 18th, Chicago, IL</a><br> <li><em>Core Spring</em><em>: </em>January 22nd - 25th, Seattle, WA<br> <li><em>Core Spring</em><em>: </em><a href="http://www.interface21.com/training/eventDetails/2008/core-iad-12.html" target="_self">January 29th - Feb 1st, Washington, DC (Dulles)</a><br></li></ul></li></ul> <ul> <li>Europe  <ul> <li><em><em><em>Core Spring</em><em>:</em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/copy_of_core-osl-6.html" target="_self">November 5th - 8th, Oslo, Norway</a><em><em><em><br></em></em></em> <li><em><em><em>Core Spring</em><em>:</em></em></em> <a href="http://www.zenika.com/formation_spring.php" target="_self">November 6th - 9th, Paris, France</a>  <li><em>Core AOP</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/aop-sto-3.html" target="_self">November 15th - 16th, Malmo, Sweden</a>  <li><em>Core Spring</em>: <a href="http://www.interface21.com/training/eventDetails/2007/core-stu-1.html" target="_self">November 20th - 23rd, Stuttgard, Germany</a><br> <li><em><em><em>Core Spring</em><em>:</em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/Core-ams-3.html" target="_self">November 20th - 23rd, Amsterdam, Netherlands</a>  <li><em><em><em>Core Web Services</em><em>:</em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/ws-ams-1.html" target="_self">November 26th - 27th, Amsterdam, Netherlands</a>  <li><em><em><em>Core Spring</em><em>:</em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/copy_of_core-cop-2.html" target="_self">November 27th - 30th, Copenhagen, Denmark</a>  <li><em>Core AOP</em><em>:</em> <a href="http://www.interface21.com/training/eventDetails/2007/aop-lon-6.html" target="_self">December 6th - 7th, London, UK</a>  <li><em>Core Spring</em><em>: </em><a href="http://www.interface21.com/training/eventDetails/core-lon-25.html" target="_self">December 11th - 14th, London, UK</a><br> <li><em>Core Spring</em><em>: </em><a href="http://www.interface21.com/training/eventDetails/core-lon-26.html" target="_self">January 15th - 18th, London, UK</a><em><br></em></li></ul></li></ul> <ul> <li><em><em><em><em><em><em><em>Australia/Asia/Other<br></em></em></em></em></em></em></em> <ul> <li><em><em><em><em><em><em><em>Core Spring</em><em>:</em></em></em></em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/core-bri-4.html" target="_self">November 5th - 8th, Brisbane, Australia</a><em><em><em><br></em></em></em></em> <li><em><em><em><em><em><em><em><em>Core Spring</em><em>:</em></em></em></em></em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/core-del-1.html" target="_self">November 5th - 8th, New Delhi, India</a></em>  <li><em><em><em><em><em><em><em><em>Core Spring</em><em>:</em></em></em></em></em></em></em> <a href="http://www.interface21.com/training/eventDetails/2007/core-blr-1.html" target="_self">November 19th - 22nd, Bangalore, India</a></em>  <li><em><em><em><em><em><em><em>Core Spring</em><em>:</em></em></em></em></em></em> <a href="http://www.xml-asia.org/springtraining/" target="_self">November 20th - 23rd, Cheng Du, China</a></em>  <li><em><em>Core Spring</em><em>: </em><a href="http://www.interface21.com/training/eventDetails/2007/core-syd-9.html" target="_self">December 3rd - 6th, Sydney, Australia</a></em>  <li><em><em>Core Spring</em><em>: </em><a href="http://www.interface21.com/training/eventDetails/2007/core-mel-4.html" target="_self">December 10th - 13th, Melbourne, Australia</a><br></em> <li><em><em>Core Spring</em><em>:</em> <a href="http://www.xml-asia.org/springtraining/" target="_self">December 18th - 21st, Dalian, China</a></em></li></ul></li></ul> <p><em><em><em><em><em><em><em>... <a href="http://www.springframework.com/training/" target="_self">plus others</a></em></em></em></em></em></em><a href="http://www.springframework.com/training/" target="_self"> </a></em></p> <p><em>Interested in a full-course of Spring during Winter? The <a href="http://www.thespringexperience.com/conference/hollywood/2007/12/index.html" target="_self">Spring Experience 2007</a> conference is taking place in sunny Hollywood, Florida, from Dec. 12th-15th. <br></em></p></div> <div class="links">» <a href="http://www.springframework.org/user/login">login</a> or <a href="http://www.springframework.org/user/register">register</a> to post comments</div></div></div></td></tr></tbody></table> <p>今天去 <a title="http://www.springframework.org/" href="http://www.springframework.org/">http://www.springframework.org/</a> 看了一眼, 很不幸的首页充斥了培训信息, 还有在中国的...</p> <p>其实 Spring 的法律上的版权所有者: Interface21 公司, 是有他们自己的网站的. 不过, 开源软件不等于放弃版权, 这个大家一定要清楚啊. 让一个 .org 的网站充满了这样的信息, 真是一种悲哀. 钱, 钱, 钱....</p><img src ="http://www.blogjava.net/beansoft/aggbug/158490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-11-06 11:48 <a href="http://www.blogjava.net/beansoft/archive/2007/11/06/158490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 HibernateTemplate 实现分页查询</title><link>http://www.blogjava.net/beansoft/archive/2007/10/10/151702.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 10 Oct 2007 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/10/10/151702.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/151702.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/10/10/151702.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/151702.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/151702.html</trackback:ping><description><![CDATA[<p>最近有同学做项目的时候发现 Spring 整合 Hibernate 时候用的&nbsp;HibernateTemplate 不支持分页, 上网搜了搜找到结果并测试成功, 只需要用下面的方法就能分页:</p> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #008000">/**</span>
<span style="color: #008000">* 使用hql 语句进行操作</span>
<span style="color: #008000">* @param hql HSQL 查询语句</span>
<span style="color: #008000">* @param offset 开始取数据的下标</span>
<span style="color: #008000">* @param length 读取数据记录数</span>
<span style="color: #008000">* @return List 结果集</span>
<span style="color: #008000">*/</span>
<span style="color: #0000ff">public</span> List getListForPage(final String hql, final <span style="color: #0000ff">int</span> offset,
 final <span style="color: #0000ff">int</span> length) {

List list = getHibernateTemplate().executeFind(<span style="color: #0000ff">new</span> HibernateCallback() {
 <span style="color: #0000ff">public</span> Object doInHibernate(Session session)
 throws HibernateException, SQLException {
 Query query = session.createQuery(hql);
 query.setFirstResult(offset);
 query.setMaxResults(length);
 List list = query.list();
 <span style="color: #0000ff">return</span> list;
 }
});
<span style="color: #0000ff">return</span> list;
}</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/151702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-10-10 13:07 <a href="http://www.blogjava.net/beansoft/archive/2007/10/10/151702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 5.5 开发 Spring + Struts + Hibernate 的详解视频(长1.5小时)</title><link>http://www.blogjava.net/beansoft/archive/2007/10/07/150877.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sun, 07 Oct 2007 10:16:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/10/07/150877.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/150877.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/10/07/150877.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/150877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/150877.html</trackback:ping><description><![CDATA[
		<p>第一部分: Struts 开发 6.83MB 22分36秒 <a href="http://beansoft.java-cn.org/download/ssh_1_struts.exe">http://beansoft.java-cn.org/download/ssh_1_struts.exe</a></p>
		<p>第二部分: Hibernate + Spring 11.5MB 38分59秒 <a href="http://beansoft.java-cn.org/download/ssh_2_hibernate_spring.exe">http://beansoft.java-cn.org/download/ssh_2_hibernate_spring.exe</a></p>
		<p>第三部分: 自己实现 SpringProxyAction 5.05MB 14分25秒 <a href="http://beansoft.java-cn.org/download/ssh_3_struts_proxy_asm.exe">http://beansoft.java-cn.org/download/ssh_3_struts_proxy_asm.exe</a></p>
		<p>第四部分: ASM 错误解决及用 Spring 的代理实现整合 9.95MB 23分49秒 <a href="http://beansoft.java-cn.org/download/ssh_4_spring_struts.exe">http://beansoft.java-cn.org/download/ssh_4_spring_struts.exe</a></p>
		<p>大纲 PDF 下载: <a href="http://beansoft.java-cn.org/download/spring_struts_hibernate.pdf">http://beansoft.java-cn.org/download/spring_struts_hibernate.pdf</a> 427KB</p>
		<p>代码下载(不带类库): <a href="http://beansoft.java-cn.org/download/myssh.rar">http://beansoft.java-cn.org/download/myssh.rar</a> 45KB</p>
		<p> </p>
		<p>
				<strong>视频大纲:</strong>
		</p>
		<h3>Java EE 讲座</h3>
		<p>MyEclipse 5.5 开发 Spring 整合 Struts, Hibernate 的应用  </p>
		<p>刘长炯  </p>
		<p>2007.10  </p>
		<h3>
				<strong>本章要点</strong>
		</h3>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001.jpg" />创建数据库  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_1.jpg" />快速开发 Struts 应用  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001%5B2%5D.jpg" border="0" />添加 Hibernate 功能  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_3.jpg" />添加 Spring 功能  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_4.jpg" />Spring 整合 Hibernate  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_5.jpg" />模拟 Action 代理类实现 Struts + Spring  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_6.jpg" />Spring 整合 Struts  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_7.jpg" />Asm 出错和 log4j.properties 文件  </p>
		<p>
				<img alt="*" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/clip_image001_8.jpg" />测试运行  </p>
		<h3>创建数据库</h3>
		<h4>• 创建数据库</h4>
		<h5>Ø 用 MyEclipse Derby 或者其它数据库</h5>
		<h5>Ø 用 MyEclipse Database Explorer 管理数据库</h5>
		<h5>Ø 执行 SQL:</h5>
		<h6>• CREATE TABLE bbsuser (</h6>
		<h6>• id int(11) NOT NULL,</h6>
		<h6>• username varchar(200) NOT NULL,</h6>
		<h6>• password varchar(20) NOT NULL,</h6>
		<h6>• age int,</h6>
		<h6>• PRIMARY KEY (id)</h6>
		<h6>• ) </h6>
		<h6>• ENGINE=MyISAM DEFAULT CHARSET=GBK;</h6>
		<h3>快速开发 Struts 应用</h3>
		<h3>添加 Hibernate 功能</h3>
		<h3>添加 Spring 功能</h3>
		<h3>Spring 整合 Hibernate</h3>
		<h3>Spring 整合 Hibernate(续)</h3>
		<h3>模拟 Action 代理类实现 Struts + Spring</h3>
		<h3>Spring 整合 Struts</h3>
		<h4>• 添加 Spring Plug in</h4>
		<h5>Ø &lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;</h5>
		<h5>Ø &lt;set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" /&gt;</h5>
		<h5>Ø &lt;/plug-in&gt;</h5>
		<h4>• 替换 Action 的 Type</h4>
		<h5>Ø &lt;action path="/login“ …</h5>
		<h5>Ø type="org.springframework.web.struts.DelegatingActionProxy" /&gt;</h5>
		<h4>• 在 Spring 配置文件中配置 Bean</h4>
		<h5>Ø 要点: 通过 path 和 bean 的 name 进行匹配, 这两个值必须一样</h5>
		<h5>Ø &lt;bean name="/login" class="com.test.struts.action.LoginAction"&gt;&lt;/bean&gt;</h5>
		<h4>• 注入 DAO 的代理 bean</h4>
		<h4>• 详细步骤参考文档</h4>
		<h4>
		</h4>
		<h3>Spring 整合 Struts 的两种方式</h3>
		<h4>• struts1加载spring的两种方式：<br />第一种：通过web.xml配置加载spring上下文环境，其配置方式如下：<br />web.xml<br />     &lt;context-param&gt;<br />        &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />        &lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<br />      &lt;/context-param&gt;<br />通过listener加载<br />&lt;listener&gt;<br />            &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />      &lt;/listener&gt;<br />或者利用severlet类加载<br />&lt;servlet&gt;<br />            &lt;servlet-name&gt;context&lt;/servlet-name&gt; <br />            &lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt;<br />            &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />        &lt;/servlet&gt; <br />第二种方式：<br />使用Struts插件<br />在struts-config.xml中<br />&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<br />        &lt;set-property property="contextConfigLocation" <br />            value="/WEB-INF/applicationContext.xml"/&gt;<br />    &lt;/plug-in&gt;</h4>
		<h4>• 这两种配置的明显区别就是，第一种方式可以配置多个spring配置文件。</h4>
		<h3>Asm 出错和 log4j.properties 文件</h3>
		<h4>• Log4j.properties</h4>
		<h5>Ø # Configure logging for testing: optionally with log file</h5>
		<h5>Ø log4j.rootLogger=WARN, stdout</h5>
		<h5>Ø # log4j.rootLogger=WARN, stdout, logfile</h5>
		<h5>
		</h5>
		<h5>Ø log4j.appender.stdout=org.apache.log4j.ConsoleAppender</h5>
		<h5>Ø log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</h5>
		<h5>Ø log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n</h5>
		<h5>
		</h5>
		<h5>Ø log4j.appender.logfile=org.apache.log4j.FileAppender</h5>
		<h5>Ø <u>log4j.appender.logfile.File</u>=target/spring.log</h5>
		<h5>Ø log4j.appender.logfile.layout=org.apache.log4j.PatternLayout</h5>
		<h5>Ø log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n</h5>
		<h4>• 删除 asm-2.2.3.jar</h4>
		<h3>测试运行</h3>
		<h4>• 测试运行</h4>
		<h5>Ø 用 MyEclipse 发布到 Tomcat</h5>
		<h5>Ø 运行</h5>
		<h5>Ø 打开浏览器测试</h5>
		<h3>本章小结</h3>
		<h4>• 整合要点</h4>
		<h4>• ASM出错的解决方案</h4>
		<h4>• Q and A?</h4>
		<h4>截图:</h4>
		<p>PPT</p>
		<p>
				<img style="border-width: 0px;" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/image_1.png" border="0" height="632" width="778" />
		</p>
		<p>视频:</p>
		<p>
				<img style="border-width: 0px;" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MyEclipse5.5SpringStrutsHibernate_F778/image_3.png" border="0" height="554" width="862" />
		</p>
<img src ="http://www.blogjava.net/beansoft/aggbug/150877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-10-07 18:16 <a href="http://www.blogjava.net/beansoft/archive/2007/10/07/150877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载: Eclipse插件之Spring IDE</title><link>http://www.blogjava.net/beansoft/archive/2007/10/02/150127.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 01 Oct 2007 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/10/02/150127.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/150127.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/10/02/150127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/150127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/150127.html</trackback:ping><description><![CDATA[<div id="wrap"> <table id="maintable" cellspacing="0" cellpadding="0" width="100%" border="0" unselectable="on"> <tbody> <tr> <td valign="top" align="left"> <table cellspacing="0" cellpadding="0" width="100%" border="0" unselectable="on"> <tbody> <tr> <td id="col_main"><span class="h1b">Eclipse插件之Spring IDE <a title="http://dev2dev.bea.com.cn/bbsdoc/20060810313.html" href="http://dev2dev.bea.com.cn/bbsdoc/20060810313.html">http://dev2dev.bea.com.cn/bbsdoc/20060810313.html</a></span><br><br> <table cellspacing="0" cellpadding="0" width="100%" border="0" unselectable="on"> <tbody> <tr> <td height="64">时间：2006-08-10<br>作者：<a href="http://dev2dev.bea.com.cn/author/468.html">俞黎敏</a><br>浏览次数： 10905 <br>本文关键字：<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=Eclipse">Eclipse</a>,&nbsp;<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=WebLogic">WebLogic</a>,&nbsp;<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=部署">部署</a>,&nbsp;<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=插件">插件</a>,&nbsp;<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=Plugin">Plugin</a>,&nbsp;<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=Spring">Spring</a>,&nbsp;<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=IDE">IDE</a></td> <td> <table class="box_content" cellspacing="0" cellpadding="0" border="0" unselectable="on"> <tbody> <tr> <td><span class="h2b">文章工具</span><br><img height="10" alt="推荐给朋友" src="http://dev2dev.bea.com.cn/images/letter001.gif" width="19" align="absMiddle">&nbsp;<a href="javascript:sendmail()">推荐给朋友</a><br><img height="18" alt="打印文章" src="http://dev2dev.bea.com.cn/images/print001.gif" width="19" align="absMiddle">&nbsp;<a href="javascript:window.print()">打印文章</a></td></tr></tbody></table></td></tr></tbody></table> <div class="beas"><img height="1" alt="" src="http://dev2dev.bea.com.cn/images/dot6B6B6B.gif" width="100%"></div> <p>　　本文介绍如何利用Eclipse插件Spring IDE在Eclipse中的使用。</p> <p>　　Eclipse是目前非常流行的开发平台，开放扩展的架构让很多程序员找到了自己个性化的工作环境。</p> <p>　　问题提出：</p> <p>　　在采用Spring框架进行系统开发时，Bean的配置文件XML的书写、XML文件的内容校验及Bean之间的依赖关系查看等工作，如果能够采用合适的工具来完成，会成倍提高开发效率。</p> <p>　　解决方法：</p> <p>　　Spring IDE是Spring官方网站推荐的Eclipse插件，可提供在开发Spring时对Bean定义文件进行验证并以可视化的方式查看各个Bean之间的依赖关系等。</p> <p>　　同时，建议结合Eclipse XMLBuddy插件进行XML文件编辑与校验，是个不错的选择。</p> <h1>安装说明 </h1> <p>　　JDK：1.5.0　　　　　从<a href="http://java.sun.com/">http://java.sun.com</a>上去下载安装</p> <p>　　Eclipse：3.1.2　　　从<a href="http://www.eclipse.org/">http://www.eclipse.org</a> 上去下载解压</p> <p>　　Spring 1.2.8　　　　从<a href="http://www.springframework.org/">http://www.springframework.org</a> 上去下载解压</p> <p>　　Spring IDE 1.3.2　　从<a href="http://springide.org/">http://springide.org</a> 上去下载</p> <p>　　XMLBuddy 2.0.72　　从<a href="http://www.xmlbuddy.com/">http://www.xmlbuddy.com/</a> 上去下载</p> <p>　　Spring IDE 1.3.2 Update地址为：<a href="http://springide.org/updatesite/">http://springide.org/updatesite/</a></p> <h1>管理技巧 </h1> <h2>Eclipse使用技巧之插件管理</h2> <p>　　提示：新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去，一大堆，累死你：（</p> <ol> <li>前提是你已经下载解压并设置好Eclipse工具，比如解压在E:\OpenSource\Eclipse\目录下，以下这个目录以%ECLIPSE_HOME%来进行表示；  <li>此时默认的插件是在%ECLIPSE_HOME%\plugins目录中的；  <li>在%ECLIPSE_HOME%下建立一个PlugInsNew的目录；  <p>　　比如：E:\OpenSource\Eclipse\PlugInsNew</p> <li>如果你下载了一个新的插件，比如叫做：XYZ  <p>　　那么就在%ECLIPSE_HOME%\PlugInsNew\目录下建立XYZ目录，目录里面是eclipse目录，eclipse目录包含有features与plugins两个子目录；结构如下图所示：</p> <p align="center"><img height="410" alt="图1" src="http://dev2dev.bea.com.cn/images/image060810001.jpg" width="220" border="0"></p> <li>把下载的新插件的文件放在以下相应目录中；  <p>　　%ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features</p> <p>　　%ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins</p> <li>建立相关的.link的文件；  <p>　　然后在%ECLIPSE_HOME%\links目录里建立一个XYZ.link的文件</p> <p>　　内容如是：</p> <p>　　path=E:/OpenSource/Eclipse/PlugInsNew/XYZ</p> <p>　　就一行这样的路径指示而已。</p> <p>　　这样，如果你下载了多个插件就可以如法炮制建立多个Link文件，想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%\links的目录中即可，使用与管理都很方便，建议千万不要放在默认的安装目录中，这样对于升级Eclipse主程序也方便一些；当然如果你喜欢用Find and Install…进行安装的话也可以的；</p> <p>　　如果上面你的%ECLIPSE_HOME%与此不同，请修改XYZ.link文件里的路径。</p> <li>删除插件，先关闭Eclipse；  <p>　　删除%ECLIPSE_HOME%\links\XYZ.link文件即可</p> <p>　　删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录及文件</p> <li>重新启动Eclipse，这样就可以了。如果插件没有生效或者没有删除，请加上-clean进行启动Eclipse，即Eclipse.exe –clean  <li>插件安装验证及记录详见：Eclipse的workspace下面的.metadata\.log文件，比如：%ECLIPSE_HOME%\workspace\.metadata\.log文件，有问题的话，打开这个文件看看并进行解决。</li></ol> <h1>确认安装 </h1> <p>　　此插件安装方法采用上一节的《Eclipse使用技巧之插件管理》</p> <p>　　重新启动Eclipse后，在Help è About Eclipse SDK è Plug-in Details你可以看到由“Spring IDE Developer”提供的“Spring IDE”版本为“1.3.2”插件及相关的Graph、UI及UI Search插件，如下图所示：</p> <p align="center"><img height="262" alt="图2" src="http://dev2dev.bea.com.cn/images/image060810002.jpg" width="553" border="0"></p> <h1>相关要求 </h1> <p>　　注意：为了让Spring IDE插件能够显示可视化的Bean结构图形及Bean之间的依赖关系，需要Eclipse GEF(Graphical Editing Framework)的支持，自己下载并解压安装，安装技巧同上《Eclipse使用技巧之插件管理》。</p> <p>　　Spring 1.2系列当前最新的稳定版本为1.2.8，下载时可以选择包含Spring所依赖的一些开源包的文件spring-framework-1.2.8-with-dependencies.zip，如果你已经清楚并有了Spring所依赖的相关开源包，就单独下载spring-framework-1.2.8.zip即可。建议下载前者。</p> <p>　　解压后目录结构及包的说明如下：</p> <p align="center"><img height="379" alt="图3" src="http://dev2dev.bea.com.cn/images/image060810003.jpg" width="529" border="0"></p> <p>　　dist目录下是Spring的发布包，关于发布包下面会详细进行说明；</p> <p>　　docs目录下是相关的文档，包括有Spring api的javadoc、reference参考指南、Spring的taglib标签使用文件及Spring MVC的MVC-step-by-step讲解与示例；</p> <p>　　lib目录下是Spring所依赖的第三方开源包；</p> <p>　　mock目录下是Spring辅助应用测试的Mock源程序；</p> <p>　　samples目录下是Spring的示例源程序及简单的webapp示例框架的示例配置，值得好好学习的有jpetstore及petclinic，当然其它的countries、imagedb、tiles-example也可以好好参考一下；</p> <p>　　src目录下是Spring的源程序；</p> <p>　　test目录下Spring的单元测试源程序；</p> <p>　　tiger目录下是Java 1.5 Tiger方面的相关及测试源程序。</p> <h1>Spring包结构说明 </h1> <p>　　接下来详细说说dist目录下jar包的相关内容</p> <p>　　spring.jar是包含有完整发布的单个jar包，spring.jar中除了spring-mock.jar里所包含的内容外其它所有jar包的内容，因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试，正式应用系统中是用不得这些类的。</p> <p>　　除了spring.jar文件，Spring还包括有其它13个独立的jar包，各自包含着对应的Spring组件，用户可以根据自己的需要来选择组合自己的jar包，而不必引入整个spring.jar的所有类文件。</p> <p>　　spring-core.jar</p> <p>　　这个jar文件包含Spring框架基本的核心工具类，Spring其它组件要都要使用到这个包里的类，是其它组件的基本核心，当然你也可以在自己的应用系统中使用这些工具类。</p> <p>　　spring-beans.jar</p> <p>　　这个jar文件是所有应用都要用到的，它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection（IoC/DI）操作相关的所有类。如果应用只需基本的IoC/DI支持，引入spring-core.jar及spring-beans.jar文件就可以了。</p> <p>　　spring-aop.jar</p> <p>　　这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性，如声明型事务管理（Declarative Transaction Management），也要在应用里包含这个jar包。</p> <p>　　spring-context.jar</p> <p>　　这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类，JDNI所需的全部类，UI方面的用来与模板（Templating）引擎如Velocity、FreeMarker、JasperReports集成的类，以及校验Validation方面的相关类。</p> <p>　　spring-dao.jar</p> <p>　　这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持，还需在自己的应用里包含spring-aop.jar。</p> <p>　　spring-hibernate.jar</p> <p>　　这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。</p> <p>　　spring-jdbc.jar</p> <p>　　这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。</p> <p>　　spring-orm.jar</p> <p>　　这个jar文件包含Spring对DAO特性集进行了扩展，使其支持 iBATIS、JDO、OJB、TopLink，因为Hibernate已经独立成包了，现在不包含在这个包里了。这个jar文件里大部分的类都要依赖spring-dao.jar里的类，用这个包时你需要同时包含spring-dao.jar包。</p> <p>　　spring-remoting.jar</p> <p>　　这个jar文件包含支持EJB、JMS、远程调用Remoting（RMI、Hessian、Burlap、Http Invoker、JAX-RPC）方面的类。</p> <p>　　spring-support.jar</p> <p>　　这个jar文件包含支持缓存Cache（ehcache）、JCA、JMX、邮件服务（Java Mail、COS Mail）、任务计划Scheduling（Timer、Quartz）方面的类。</p> <p>　　spring-web.jar</p> <p>　　这个jar文件包含Web应用开发时，用到Spring框架时所需的核心类，包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。</p> <p>　　spring-webmvc.jar</p> <p>　　这个jar文件包含Spring MVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。当然，如果你的应用使用了独立的MVC框架，则无需这个JAR文件里的任何类。</p> <p>　　spring-mock.jar</p> <p>　　这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类，这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。</p> <p>　　如何选择这些发布包，决定选用哪些发布包其实相当简单。如果你正在构建Web应用并将全程使用Spring，那么最好就使用单个全部的spring.jar文件；如果你的应用仅仅用到简单的Inversion of Control / Dependency Injection（IoC/DI）容器，那么只需spring-core.jar与spring-beans.jar即可；如果你对发布的大小要求很高，那么就得精挑细选了，只取包含自己所需特性的jar文件了。采用独立的发布包你可以避免包含自己的应用不需要的全部类。当然你可以采用其它的一些工具来设法令整个应用包变小，节省空间的重点在于准确地找出自己所需的Spring依赖类，然后合并所需的类与包就可以了。Eclispe有个插件叫ClassPath Helper可以帮你找找所依赖的类。</p> <h1>Spring包依赖说明 </h1><pre class="code">　　spring-core.jar需commons-collections.jar，spring-core.jar是以下其它各个的基本。

spring-beans.jar需spring-core.jar/cglib-nodep-2.1_3.jar
spring-aop.jar需spring-core.jar/spring-beans.jar/cglib-nodep-2.1_3.jar/aopalliance.jar
spring-context.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/commons-collections.jar/aopalliance.jar

spring-dao.jar需spring-core.jar/spring-beans.jar/spring-aop.jar/spring-context.jar
spring-jdbc.jar需spring-core.jar/spring-beans.jar/spring-dao.jar
spring-web.jar需spring-core.jar/spring-beans.jar/spring-context.jar
spring-webmvc.jar需spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar
spring-hibernate.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-orm.jar/spring-web.jar/spring-webmvc.jar
spring-orm.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-web.jar/spring-webmvc.jar
spring-remoting.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-web.jar/spring-webmvc.jar
spring-support.jar需
spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-jdbc.jar

spring-mock.jar需spring-core.jar/spring-beans.jar/spring-dao.jar/spring-context.jar/spring-jdbc.jar</pre>
<h1>插件介绍 </h1>
<p>　　我们简单地创建一个示例工程，里面包含有一个接口类与两个实现该接口的实现类进行演示说明使用的方法。</p>
<p>　　需要引入spring.jar、commons-logging.jar、log4j.jar</p>
<p>　　单个引入需要引入spring-core.jar、spring-beans.jar、spring-context.jar</p>
<p>　　接口类：IHelloWorld.java</p><pre class="code">　　public interface  IHelloWorld
{
   String sayHelloWorld();
}</pre>
<p>　　实现类一：HelloWorld1.java</p><pre class="code">　　public class HelloWorld1 implements IHelloWorld
{
	public HelloWorld1()
	{
		super();
	}

	public String sayHelloWorld()
	{
		return "Hello World HelloWorld1";
	}
}
</pre>
<p>　　实现类二：HelloWorld2.java</p><pre class="code">　　public class HelloWorld2 implements IHelloWorld
{
	public HelloWorld2()
	{
		super();
	}

	public String sayHelloWorld()
	{
		return "Hello World HelloWorld2";
	}
}
</pre>
<p>　　根据常用的三层与Spring的最佳实践，将配置文件分成了四个</p>
<p>　　beanRefFactory.xml负责总装，由SingletonBeanFactoryLocator来装入</p>
<p>　　通过ClassPathXmlApplicationContext来把其它三个模块的文件引入</p>
<p>　　beanRefDataAccess.xml负责DAO，与数据库相关的bean都定义在这里</p>
<p>　　beanRefService.xml负责Service层的bean定义</p>
<p>　　beanRefMVC.xml负责Spring MVC方面相关的bean定义等等</p>
<p>　　以下配置文件的bean定义为演示所用，各自的内容如下：</p>
<p>　　beanRefFactory.xml的内容如下：</p><pre class="code">　　&lt;xml version="1.0" encoding="UTF-8"&gt;
&lt;!DOCTYPE beans PUBLIC 	"-//SPRING//DTD BEAN//EN" 
	"http://www.springframework.org/dtd/spring-beans.dtd"&gt;
&lt;beans&gt;
&lt;bean id="beanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext"&gt;
&lt;constructor-arg&gt;
&lt;list&gt;
&lt;value&gt;beanRefDataAccess.xml&lt;/value&gt;
&lt;value&gt;beanRefService.xml&lt;/value&gt;
&lt;value&gt;beanRefMVC.xml&lt;/value&gt;
&lt;/list&gt;
&lt;/constructor-arg&gt;
&lt;/bean&gt;
&lt;/beans&gt;</pre>
<p>　　beanRefDataAccess.xml的内容如下：</p><pre class="code">　　&lt;xml version="1.0" encoding="UTF-8"&gt;
&lt;!DOCTYPE beans PUBLIC 	"-//SPRING//DTD BEAN//EN" 
	"http://www.springframework.org/dtd/spring-beans.dtd"&gt;
&lt;beans&gt;
	&lt;bean id="helloWorldDAO1" class="HelloWorld1"/&gt;
	&lt;bean id="helloWorldDAO2" class="HelloWorld2"/&gt;
&lt;/beans&gt;</pre>
<p>　　beanRefService.xml的内容如下：</p><pre class="code">　　&lt;xml version="1.0" encoding="UTF-8"&gt;
&lt;!DOCTYPE beans PUBLIC 	"-//SPRING//DTD BEAN//EN" 
	"http://www.springframework.org/dtd/spring-beans.dtd"&gt;
&lt;beans&gt;
	&lt;bean id="helloWorld1" class="HelloWorld1"/&gt;
	&lt;bean id="helloWorld2" class="HelloWorld2"/&gt;
	&lt;bean id="springDemoConstructor" class="SpringDemoConstructor"&gt;
		&lt;constructor-arg&gt;
			&lt;value&gt;Spring IDE Constructor&lt;/value&gt;
		&lt;/constructor-arg&gt;
		&lt;property name="helloWorld"&gt;
			&lt;ref bean="helloWorld1"&gt;&lt;/ref&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
	&lt;bean id="springDemoSetter" class="SpringDemoSetter"&gt;
		&lt;property name="hello" value="Spring IDE Setter"/&gt;
		&lt;property name="helloWorld"&gt;
			&lt;ref bean="helloWorld2"&gt;&lt;/ref&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
&lt;/beans&gt;</pre>
<p>　　beanRefMVC.xml的内容如下：</p><pre class="code">　　&lt;xml version="1.0" encoding="UTF-8"&gt;
&lt;!DOCTYPE beans PUBLIC 
	"-//SPRING//DTD BEAN//EN" 
	"http://www.springframework.org/dtd/spring-beans.dtd"&gt;
&lt;beans&gt;
	&lt;bean id="helloWorldMVC1" class="HelloWorld1"/&gt;
	&lt;bean id="helloWorldMVC2" class="HelloWorld2"/&gt;
&lt;/beans&gt;
</pre>
<p>　　右键项目工程：可以看到“Add Spring Project Nature”菜单，单击它</p>
<p align="center"><img height="505" alt="图4" src="http://dev2dev.bea.com.cn/images/image060810004.jpg" width="314" border="0"></p>
<p>　　细心的你一定可以看到项目工程SpringIDEDemo前面的图标变成了一个S的标志，而不是原来的J，当然项目里与Spring相关的文件都会在图标上显示一个S标志。J</p>
<p>　　右键弹出的菜单里就会有个“Remove Spring Project Nature”的菜单了。</p>
<p>　　你选择这个菜单进行移除后就不能进行以下的相关操作了。</p>
<p align="center"><img height="504" alt="图5" src="http://dev2dev.bea.com.cn/images/image060810005.jpg" width="314" border="0"></p>
<p>　　Window è Show View è Other… è 可以看到Spring IDE，打开它，如下所示，所中它并确定。</p>
<p align="center"><img height="414" alt="图6" src="http://dev2dev.bea.com.cn/images/image060810001_0000.jpg" width="296"></p>
<p>　　可以看到如下的视图，右键工程的名称，在弹出的Properties菜单上点击它</p>
<p align="center"><img height="160" alt="图7" src="http://dev2dev.bea.com.cn/images/image060810002_0000.jpg" width="492"></p>
<p>　　弹出属性框，让我们来添加配置文件</p>
<p align="center"><img height="518" alt="图8" src="http://dev2dev.bea.com.cn/images/image060810003_0000.jpg" width="448"></p>
<p>　　确定后，可以看到刚才选择的四个配置文件已经在里面了，再次确定。</p>
<p align="center"><img height="518" alt="图9" src="http://dev2dev.bea.com.cn/images/image060810004_0000.jpg" width="448"></p>
<p>　　在Spring Beans视图里展开工程后，便可以看到增加进来的四个配置文件了。</p>
<p align="center"><img height="160" alt="图10" src="http://dev2dev.bea.com.cn/images/image060810005_0000.jpg" width="492"></p>
<p>　　也可以将配置文件放到配置集合里，如下所示：</p>
<p align="center"><img height="518" alt="图11" src="http://dev2dev.bea.com.cn/images/image060810006.jpg" width="549"></p>
<p>　　这样确定以后，可以看到四个文件都属于Service的节点下面，如下所示。</p>
<p align="center"><img height="518" alt="图12" src="http://dev2dev.bea.com.cn/images/image060810007.jpg" width="549"></p>
<p>　　再次确定后，在Spring Beans视图里看到Service节点，展开它，可以看到所有配置文件里的bean都在这里列出来了。</p>
<p align="center"><img height="419" alt="图13" src="http://dev2dev.bea.com.cn/images/image060810008.jpg" width="504"></p>
<p>　　展开显示两个定义的bean结点，右键其中的一个结点，弹出四个菜点，最后一个就是上面的配置菜单，不再讲解了，我们选中“Open Config File”菜单</p>
<p align="center"><img height="218" alt="图14" src="http://dev2dev.bea.com.cn/images/image060810009.jpg" width="492"></p>
<p>　　于是就会自动打开配置文件，并定位到bean的定义位置上面去了，如下所示，方便进行查看与改动。</p>
<p align="center"><img height="133" alt="图15" src="http://dev2dev.bea.com.cn/images/image060810010.jpg" width="430"></p>
<p>　　在右键弹出的菜单点选中“Open Bean Class”，</p>
<p align="center"><img height="218" alt="图16" src="http://dev2dev.bea.com.cn/images/image060810011.jpg" width="492"></p>
<p>　　就会自动定位到对应的类文件里去了，如下所示。</p>
<p align="center"><img height="234" alt="图17" src="http://dev2dev.bea.com.cn/images/image060810012.jpg" width="423"></p>
<p>　　在右键弹出的菜单点选中“Show Graph”，</p>
<p align="center"><img height="218" alt="图18" src="http://dev2dev.bea.com.cn/images/image060810013.jpg" width="492"></p>
<p>　　就会把当前这个bean以图形的方式显示出来，如下所示。</p>
<p align="center"><img height="98" alt="图19" src="http://dev2dev.bea.com.cn/images/image060810014.jpg" width="321"></p>
<p>　　但是这个演示的文件仅是一个独立的bean，没有任何关联等，下面会演示关联等。</p>
<p>　　在Spring Beans视图里展开工程后，选中src/beanRefSerice.xml配置文件，在右键弹出的菜单点选中“Show Graph”</p>
<p align="center"><img height="218" alt="图20" src="http://dev2dev.bea.com.cn/images/image060810015.jpg" width="492"></p>
<p>　　就会把当前整个配置文件的内容以bean图形的方式显示出来，如下所示。</p>
<p align="center"><img height="105" alt="图21" src="http://dev2dev.bea.com.cn/images/image060810016.jpg" width="283"></p>
<p>　　以下演示bean的引用及构造注入与setter注入何关联等，更多的操作类似了。</p>
<p>　　定义一个接口类ISpringDemo.java，有两个方法</p><pre class="code">　　public interface ISpringDemo
{
	IHelloWorld getHelloWorld();
	String getHello();
}
</pre>
<p>　　实现类一SpringDemoConstructor.java，含有构造注入及setter注入</p><pre class="code">　　public class SpringDemoConstructor implements ISpringDemo
{
	private String hello;
	private IHelloWorld helloWorld;
	
	public SpringDemoConstructor(String hello)
	{
		this.hello = hello;
	}
	
	public String getHello()
	{
		return hello;
	}

	public IHelloWorld getHelloWorld()
	{
		return helloWorld;
	}

	public void setHelloWorld(IHelloWorld helloWorld)
	{
		this.helloWorld = helloWorld;
	}
}

</pre>
<p>　　实现类二SpringDemoSetter.java，都是setter注入</p><pre class="code">　　public class SpringDemoSetter implements ISpringDemo
{
	private String hello;
	private IHelloWorld helloWorld;

	public String getHello()
	{
		return hello;
	}

	public void setHello(String hello)
	{
		this.hello = hello;
	}

	public IHelloWorld getHelloWorld()
	{
		return helloWorld;
	}

	public void setHelloWorld(IHelloWorld helloWorld)
	{
		this.helloWorld = helloWorld;
	}
}
</pre>
<p>　　配置文件beanRefService.xml增加bean定义，成为如下，红字为新增的</p><pre class="code">　　&lt;xml version="1.0" encoding="UTF-8"&gt;
&lt;!DOCTYPE beans PUBLIC 
	"-//SPRING//DTD BEAN//EN" 
	"http://www.springframework.org/dtd/spring-beans.dtd"&gt;
&lt;beans&gt;
	&lt;bean id="helloWorld1" class="HelloWorld1"/&gt;
	&lt;bean id="helloWorld2" class="HelloWorld2"/&gt;
	&lt;bean id="springDemoConstructor" class="SpringDemoConstructor"&gt;
		&lt;constructor-arg&gt;
			&lt;value&gt;Spring IDE Constructor&lt;/value&gt;
		&lt;/constructor-arg&gt;
		&lt;property name="helloWorld"&gt;
			&lt;ref bean="helloWorld1"&gt;&lt;/ref&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
	&lt;bean id="springDemoSetter" class="SpringDemoSetter"&gt;
		&lt;property name="hello" value="Spring IDE Setter"/&gt;
		&lt;property name="helloWorld"&gt;
			&lt;ref bean="helloWorld2"&gt;&lt;/ref&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
&lt;/beans&gt;</pre>
<p>　　注意：</p>
<p>　　如果bean是定义在同一个文件里的可以用</p><pre class="code">　　&lt;ref local="helloWorld2"&gt;&lt;/ref&gt;</pre>
<p>　　如果不是在同一个配置文件里的，要用</p><pre class="code">　　&lt;ref bean="helloWorld2"&gt;&lt;/ref&gt;</pre>
<p>　　要不然会报到bean找不到！</p>
<p>　　这样配置完成后，我们切换到“Spring Beans”视图，在beanRefService.xml节点上右键打开“Show Graph”菜单，可以看到如下所示：</p>
<p align="center"><img height="176" alt="图21" src="http://dev2dev.bea.com.cn/images/image060810017.jpg" width="335"></p>
<p>　　这时bean里面简单的引用关系就表现出来了。</p>
<p align="center"><img height="228" alt="图22" src="http://dev2dev.bea.com.cn/images/image060810018.jpg" width="365"></p>
<p>　　在bean图上右键，会打开三个操作菜单：</p>
<p>　　Open Java Type即定位到bean的类文件上面；</p>
<p>　　Open Config File即定位到bean的xml配置文件上面；</p>
<p>　　Show In Beans View即定位到“Spring Beans”的视图里的具体某个节点上，如下所示。</p>
<p align="center"><img height="419" alt="图23" src="http://dev2dev.bea.com.cn/images/image060810019.jpg" width="504"></p>
<p>　　此时我们可以在配置集合的Service节点上面右键，选择“Show Graph”</p>
<p align="center"><img height="419" alt="图24" src="http://dev2dev.bea.com.cn/images/image060810020.jpg" width="504"></p>
<p>　　这样就会显示出所有的配置文件集合里的所有bean文件及其关联引用情况，如下图。</p>
<p align="center"><img height="304" alt="图25" src="http://dev2dev.bea.com.cn/images/image060810021.jpg" width="526"></p>
<p>　　带圈的P图标表示是属性，即setter方法注入，带圈的C图标表示构造注入。箭头表示引用关系了。J</p>
<p>　　中间一排演示用的四个bean没有关联引入，就光杆司令地在那里排队了啦J</p>
<p>　　最下面的带圈的C后面又跟着一大排参数，表示集合类型的了。如list</p>
<p>　　Spring IDE提供错误检查功能，比如我在配置文件中输入一个不存在的类的名称，保存后，就会在边上出现红色提示，鼠标移上去就会出现提示信息，如下图所示。</p>
<p align="center"><img height="321" alt="图26" src="http://dev2dev.bea.com.cn/images/image060810023.jpg" width="553"></p>
<p>　　当然也会有Problems视图里显示相应的错误信息，如下图：</p>
<p align="center"><img height="200" alt="图27" src="http://dev2dev.bea.com.cn/images/image060810024.jpg" width="553"></p>
<p>　　XMLBuddy</p>
<p>　　由于打开XML文件时会根据XML文件里定义的DTD去网上查找相应的DTD文件，这样导至打开的时候会相当慢，特别是如果你的机器上不了外网的话，就更慢了。</p>
<p>　　解决的办法有两个：</p>
<p>　　一、在本机开启Web服务（如Tomcat等等），并设置端口为80，然后根据DTD 的目录结构建立相应的结构，并把DTD文件放进去。然后在hosts文件里把本机的地址映射到相应的DTD指定的网站去，如：</p>
<p>　　127.0.0.1// www.springframework.org</p>
<p>　　这样打开XML文件时就会在本机寻找DTD文件进行验证，速度就快很多了J</p>
<p>　　二、打开XMLBuddy插件的安装目录，并找到其中的cache目录，比如：%ECLIPSE_HOME%\PlugInsNew\xmlbuddy\eclipse\plugins\com.objfac.xmleditor_2.0.72\.cache</p>
<p>　　打开meta.xml文件，一看就知道怎么处理了吧，如法炮制，选把DTD文件拷贝到这个cache目录里，再增加内容到meta.xml里来，比如：</p><pre class="code">　　&lt;file&gt;
&lt;pub&gt;-//SPRING//DTD  BEAN//EN&lt;/pub&gt;
&lt;abs&gt;http://www.springframework.org/dtd/spring-beans.dtd&lt;/abs&gt;
&lt;rel&gt;spring-beans.dtd&lt;/rel&gt;
&lt;/file&gt;</pre>
<p>　　要增加其它的DTD文件方法类似，不断地增加说明与DTD文件即可。</p>
<p>　　于是在编辑XML文件时就会有相关的提示及错误提示信息，可以减少一些书写XML文件时发生的低级错误了。</p>
<p align="center"><img height="321" alt="图28" src="http://dev2dev.bea.com.cn/images/image060810026.jpg" width="553"></p>
<p>　　测试与运行</p>
<p>　　先建立一个Log4J的配置文件log4j.properties，内容如下</p><pre class="code">　　# Set root logger level to ERROR and its only appender to R.
log4j.rootLogger = INFO,R

# R is set to be a DailyRollingFileAppender.
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File = Application.log
log4j.appender.R.DatePattern = yyyy-MM-dd'.log'
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
</pre>
<p>　　再创建一个ServiceFactory.java静态类，用来做单元测试方便一些</p><pre class="code">　　import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.BeanFactoryReference;
import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;

public final class ServiceFactory
{
	private static BeanFactoryLocator bfLocator = null;
	private static BeanFactoryReference bfReference = null;
	private static BeanFactory factory = null;
	static
	{
		bfLocator = SingletonBeanFactoryLocator.getInstance();
		bfReference = bfLocator.useBeanFactory("beanFactory");
		factory = bfReference.getFactory();
	}
	
	private ServiceFactory()
	{
		super();
	}

	public static Object getBeanByName(final String beanName)
	{
		return factory.getBean(beanName);
	}
}
</pre>
<p>　　做成静态的这样我们可以ServiceFactory .getBeanByName(“beanname”)就可以得到相应的bean了。</p>
<p>　　测试类SpringIDETest.java代码如下：</p><pre class="code">　　import junit.framework.TestCase;

public class SpringIDETest extends TestCase
{
	private IHelloWorld helloWorld = null;
	private ISpringDemo springDemo = null;
	private final static String hello1 = "Hello World HelloWorld1";
	private final static String hello2 = "Hello World HelloWorld2";
	private final static String helloset = "Spring IDE Setter";
	private final static String hellocon = "Spring IDE Constructor";

	public void testSpringBeans()
	{
		helloWorld = (IHelloWorld)ServiceFactory.getBeanByName("helloWorld1");
		assertEquals(hello1,helloWorld.sayHelloWorld());
		helloWorld = (IHelloWorld)ServiceFactory.getBeanByName("helloWorld2");
		assertEquals(hello2,helloWorld.sayHelloWorld());
	}
	public void testIoCConstructor()
	{
		//Constructor
		springDemo = (ISpringDemo)ServiceFactory.getBeanByName("springDemoConstructor");
		assertEquals(hellocon,springDemo.getHello());
		assertEquals(hello1,springDemo.getHelloWorld().sayHelloWorld());
	}
	public void testIoCSetter()
	{
		//Setter
		springDemo = (ISpringDemo)ServiceFactory.getBeanByName("springDemoSetter");
		assertEquals(helloset,springDemo.getHello());
		assertEquals(hello2,springDemo.getHelloWorld().sayHelloWorld());
	}
}
</pre>
<p>　　　　Run As JUnit Test之，绿色打勾全部通过就收工走人了。。。J</p>
<p>　　当然也可以打开Application.log文件查看输出一些什么信息。</p>
<h1>使用总结 </h1>
<p>　　此插件的功能不错：）对于Spring这样优雅的框架来说，再加上这个助手，真的是很美很美了，美美地喝上一杯咖啡吧。J （<a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&amp;threadID=37023&amp;tstart=0" target="_blank">讨论或查看原贴</a>）</p>
<div class="dot001"><img height="1" alt="" src="http://dev2dev.bea.com.cn/images/_.gif" width="100%"></div>
<div class="dot001"><img height="1" alt="" src="http://dev2dev.bea.com.cn/images/_.gif" width="100%"></div>
<table cellspacing="1" cellpadding="0" width="100%" border="0" unselectable="on">
<tbody>
<tr valign="center" align="middle">
<td class="colC1C1C1"><img height="1" alt="dot" src="http://dev2dev.bea.com.cn/images/_.gif" width="1"></td>
<td class="colC1C1C1"><img height="1" alt="dot" src="http://dev2dev.bea.com.cn/images/_.gif" width="1"></td>
<td class="colC1C1C1"><img height="1" alt="dot" src="http://dev2dev.bea.com.cn/images/_.gif" width="1"></td></tr></tbody></table><br>
<div class="dot001"><img height="1" alt="dot" src="http://dev2dev.bea.com.cn/images/_.gif" width="100%"></div>&nbsp;&nbsp;<span class="h2b">作者其它文章</span> 
<ul>
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060123182.html">Eclipse插件之Bytecode Outline</a> 
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060124184.html">Eclipse插件之EasyExplorer</a> 
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060124186.html">Eclipse插件之FindBugs</a> 
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060124187.html">利用Eclipse开发Hibernate应用程序</a> 
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060124188.html">Eclipse插件之Implementors</a> 
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060126189.html">Eclipse插件之SQLExplorer</a> 
<li><a href="http://dev2dev.bea.com.cn/bbsdoc/20060619285.html">Eclipse插件之WebLogic Plugin 2.0.0</a> </li></ul></td></tr></tbody></table></td></tr></tbody></table></div><img src ="http://www.blogjava.net/beansoft/aggbug/150127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-10-02 00:09 <a href="http://www.blogjava.net/beansoft/archive/2007/10/02/150127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(Spring 学习)Spring 发布时所需的最小包依赖</title><link>http://www.blogjava.net/beansoft/archive/2007/09/22/147380.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 22 Sep 2007 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/22/147380.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/147380.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/22/147380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/147380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/147380.html</trackback:ping><description><![CDATA[<div>Copy the following files into the library directory:<br>- spring.jar<br>- commons-logging.jar<br>- servlet-api.jar</div> <div>&nbsp;</div> <div><font color="#008000"><strong>web.xml</strong></font></div> <div><font color="#333399">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</font></div> <div><font color="#333399">&lt;!DOCTYPE web-app PUBLIC<br>&nbsp;"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>&nbsp;"</font><a href="http://java.sun.com/dtd/web-app_2_3.dtd"><font color="#333399">http://java.sun.com/dtd/web-app_2_3.dtd</font></a><font color="#333399">"&gt;</font></div> <div><font color="#333399">&lt;!--<br>&nbsp; - Web app deployment descriptor that just loads an "example" DispatcherServlet<br>&nbsp; - with a specific context.<br>&nbsp; -<br>&nbsp; - Depends on the following libraries in WEB-INF/lib:<br>&nbsp; - * spring.jar<br>&nbsp; - * commons-logging.jar<br>&nbsp; --&gt;<br>&lt;web-app&gt;</font></div> <div><font color="#333399">&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp; - Servlet that dispatches request to registered handlers (Controller implementations).<br>&nbsp;&nbsp;&nbsp; - Has its own application context, by default defined in "{servlet-name}-servlet.xml",<br>&nbsp;&nbsp;&nbsp; - i.e. "example-servlet.xml".<br>&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp; - A web app can contain any number of such servlets.<br>&nbsp;&nbsp;&nbsp; - Note that this web app does not have a shared root application context,<br>&nbsp;&nbsp;&nbsp; - therefore the DispatcherServlet contexts do not have a common parent.<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&lt;servlet&gt;<br>&nbsp;&nbsp;&lt;servlet-name&gt;example&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br>&nbsp;&nbsp;&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br>&nbsp; &lt;/servlet&gt;</font></div> <div><font color="#333399">&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp; - Maps the example dispatcher to /example/*. All handler mappings in<br>&nbsp;&nbsp;&nbsp; - example-servlet.xml will by default be applied to this subpath.<br>&nbsp;&nbsp;&nbsp; - If a mapping isn't a /* subpath, the handler mappings are considered<br>&nbsp;&nbsp;&nbsp; - relative to the web app root.<br>&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp; - A single dispatcher could get mapped to multiple paths, like any servlet.<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&lt;servlet-mapping&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;example&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/example/*&lt;/url-pattern&gt;<br>&nbsp; &lt;/servlet-mapping&gt;<br>&nbsp; <br>&nbsp; &lt;welcome-file-list&gt;<br>&nbsp;&nbsp;&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br>&nbsp;&lt;/welcome-file-list&gt;</font></div> <div><font color="#333399">&lt;/web-app&gt;</font></div> <div>&nbsp;</div> <div><font color="#008000"><strong>example-servlet.xml</strong></font></div> <div><strong><font color="#008000"></font></strong>&nbsp;</div> <div><font color="#333399">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "</font><a href="http://www.springframework.org/dtd/spring-beans.dtd"><font color="#333399">http://www.springframework.org/dtd/spring-beans.dtd</font></a><font color="#333399">"&gt;</font></div> <div><font color="#333399">&lt;!--<br>&nbsp; - Application context definition for "example" DispatcherServlet.<br>&nbsp; --&gt;<br>&lt;beans&gt;</font></div> <div><font color="#333399">&nbsp;&lt;!--<br>&nbsp;&nbsp; - Due to the dispatcher mapping in web.xml and the default BeanNameUrlHandlerMapping<br>&nbsp;&nbsp; - in this context, "</font><a href="http://localhost/example/test"><font color="#333399">http://localhost/example/test</font></a><font color="#333399">" will trigger this controller.<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - Due to the default InternalResourceViewResolver, returned view names get treated<br>&nbsp;&nbsp; - as internal resources, e.g. JSPs: "/test.jsp" or "/WEB-INF/jsp/test.jsp" will<br>&nbsp;&nbsp; - render the respective file. So with the default resolver, controllers have to<br>&nbsp;&nbsp; - specify the whole resource path as view name (see below for an alternative).<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - HandlerMapping and ViewResolver are simple interfaces: Choose one of Spring's<br>&nbsp;&nbsp; - provided implementations, or write your own one.<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - A very simple Controller implementation could look as follows:<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; -&nbsp;&nbsp; public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {<br>&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; return new ModelAndView("/test.jsp");<br>&nbsp;&nbsp; -&nbsp;&nbsp; }<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - Or for writing the response directly:<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; -&nbsp;&nbsp; public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {<br>&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().write("This is a test");<br>&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; return null;<br>&nbsp;&nbsp; -&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&lt;bean name="/test" class="example.ExampleController"/&gt;</font></div> <div><font color="#333399">&nbsp;&lt;!--<br>&nbsp;&nbsp; - Optional: Explicit InternalResourceViewResolver definition,<br>&nbsp;&nbsp; - specifying view class, name prefix, and name suffix.<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - Specifying the JstlView class instead of the default InternalResourceView<br>&nbsp;&nbsp; - exports Spring's message source and the current user locale as standard<br>&nbsp;&nbsp; - JSTL attributes, to be leveraged by JSTL fmt tags.<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - A prefix/suffix combination allows for symbolic view names to be returned<br>&nbsp;&nbsp; - by controllers, still getting straightly mapped to internal resources.<br>&nbsp;&nbsp; - Example: view name "test" -&gt; resource "/WEB-INF/jsp/test.jsp".<br>&nbsp;&nbsp; -<br>&nbsp;&nbsp; - For more sophisticated mappings, consider ResourceBundleViewResolver<br>&nbsp;&nbsp; - (see "webapp-typical" skeleton) or XmlViewResolver.<br>&nbsp;&nbsp; --&gt;<br>&nbsp;&lt;!--<br>&nbsp;&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br>&nbsp;&nbsp;&lt;property name="viewClass"&gt;&lt;value&gt;org.springframework.web.servlet.view.JstlView&lt;/value&gt;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="prefix"&gt;&lt;value&gt;/WEB-INF/jsp/&lt;/value&gt;&lt;/property&gt;<br>&nbsp;&nbsp;&lt;property name="suffix"&gt;&lt;value&gt;.jsp&lt;/value&gt;&lt;/property&gt;<br>&nbsp;&lt;/bean&gt;<br>&nbsp;--&gt;</font></div> <div><font color="#333399">&lt;/beans&gt;<br></font></div><img src ="http://www.blogjava.net/beansoft/aggbug/147380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-22 13:01 <a href="http://www.blogjava.net/beansoft/archive/2007/09/22/147380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的 BeanFactory 帮助大家理解 Spring</title><link>http://www.blogjava.net/beansoft/archive/2007/09/12/144577.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 12 Sep 2007 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/12/144577.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/144577.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/12/144577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/144577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/144577.html</trackback:ping><description><![CDATA[<div>Spring 是什么, 就是个大 Map.</div> <div>&nbsp;</div> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">import java.io.InputStream;

import java.util.Enumeration;

import java.util.Hashtable;

import java.util.Map;

import java.util.Properties;



<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> BeanFactory {

<span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> Map&lt;String, Object&gt; objectPool = <span style="color: #0000ff">new</span> Hashtable&lt;String, Object&gt;();

<span style="color: #0000ff">static</span> {

Properties config = <span style="color: #0000ff">new</span> Properties();

InputStream <span style="color: #0000ff">in</span> = BeanFactory.<span style="color: #0000ff">class</span>

.getResourceAsStream(<span style="color: #006080">"beans-config.properties"</span>);

<span style="color: #0000ff">if</span> (<span style="color: #0000ff">in</span> == <span style="color: #0000ff">null</span>) {

<span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ExceptionInInitializerError(

<span style="color: #006080">"no file:beans-config found error!"</span>);

}

<span style="color: #0000ff">try</span> {

config.load(<span style="color: #0000ff">in</span>);

<span style="color: #0000ff">in</span>.close();

Enumeration ids = config.propertyNames();

<span style="color: #0000ff">while</span> (ids.hasMoreElements()) {

String id = (String) ids.nextElement();

String className = config.getProperty(id);

Object instance = Class.forName(className).newInstance();

objectPool.put(id, instance);

}

} <span style="color: #0000ff">catch</span> (Exception e) {

e.printStackTrace();

<span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ExceptionInInitializerError(<span style="color: #006080">"failed to init bean pools!"</span>);

}

}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Object getBean(String id) {

<span style="color: #0000ff">return</span> objectPool.get(id);

}

}</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/144577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-12 18:22 <a href="http://www.blogjava.net/beansoft/archive/2007/09/12/144577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring + Struts + Hibernate 的完整 MyEclipse 项目源码</title><link>http://www.blogjava.net/beansoft/archive/2007/09/08/143678.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 08 Sep 2007 13:12:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/08/143678.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/143678.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/08/143678.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/143678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/143678.html</trackback:ping><description><![CDATA[<p><a title="http://download.gro.clinux.org/beansoft/ssh_full.zip" href="http://download.gro.clinux.org/beansoft/ssh_full.zip">http://download.gro.clinux.org/beansoft/ssh_full.zip</a>&nbsp;1.55MB</p> <p>内含建表语句.</p> <p>如果出现 404 ActionServlet 错误, 请参考这里:</p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/27/139890.html">[置顶]MyEclipse 开发 SSH 整合时 java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 解决方案</a></p><img src ="http://www.blogjava.net/beansoft/aggbug/143678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-08 21:12 <a href="http://www.blogjava.net/beansoft/archive/2007/09/08/143678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 整合 Strus 要点</title><link>http://www.blogjava.net/beansoft/archive/2007/09/08/143674.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 08 Sep 2007 12:56:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/08/143674.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/143674.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/08/143674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/143674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/143674.html</trackback:ping><description><![CDATA[<form id="Form1" name="Form1" action="http://www.blogjava.net/142716.html" method="post" _initialAction="142716.html"> <div id="centercontent"> <div class="post"> <p><strong>Spring 整合 Strus 要点</strong><br>beansoft@126.com<br>2007-8-5  <p>1. 项目需要有 Struts 包和 Spring 的 core, aop, web 三个包(注意不是 Spring 自己的 Web MVC), 具体的 .classpath 文件如下所示:<br> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="UTF-8"</span>?<span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="src"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="src"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="con"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="org.eclipse.jdt.launching.JRE_CONTAINER"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="con"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="com.genuitec.eclipse.j2eedt.core.J2EE14_CONTAINER"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/antlr.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/commons-beanutils.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/commons-digester.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/commons-fileupload.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/commons-logging.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/commons-validator.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/jakarta-oro.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/struts.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/lib/mysql-connector-java-3.1.11-bin.jar"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="con"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_CORE"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="con"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="con"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_WEB"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry</span> <span style="color: #ff0000">kind</span><span style="color: #0000ff">="output"</span> <span style="color: #ff0000">path</span><span style="color: #0000ff">="WebRoot/WEB-INF/classes"</span><span style="color: #0000ff">/&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span> </pre></div>
<p>2. 对 Struts 配置文件做修改加入 Spring 托管功能. 
<p>创建 Spring 配置文件，将文件放到src 目录下，文件名称为 applicationContext.xml, 编译后放到 WEB-INF/classes/ 下. 
<p>配置struts-config.xml文件，添加 spring的插件, 位置在 struts-config 文件的最末尾. 
<div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;</span><span style="color: #800000">plug-in</span> <span style="color: #ff0000">className</span><span style="color: #0000ff">="org.springframework.web.struts.ContextLoaderPlugIn"</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">set-property</span> <span style="color: #ff0000">property</span><span style="color: #0000ff">="contextConfigLocation"</span> <span style="color: #ff0000">value</span><span style="color: #0000ff">="/WEB-INF/classes/applicationContext.xml"</span> <span style="color: #0000ff">/&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">plug-in</span><span style="color: #0000ff">&gt;</span> </pre></div>
<p>3. 修改 Struts 的 struts-config.xml 中的Action配置 
<p>原： 
<div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;</span><span style="color: #800000">action</span>
<span style="color: #ff0000">attribute</span><span style="color: #0000ff">="loginForm"</span>
<span style="color: #ff0000">input</span><span style="color: #0000ff">="/login.jsp"</span>
<span style="color: #ff0000">name</span><span style="color: #0000ff">="loginForm"</span>
<span style="color: #ff0000">path</span><span style="color: #0000ff">="/login"</span>
<span style="color: #ff0000">scope</span><span style="color: #0000ff">="request"</span>
<span style="color: #ff0000">validate</span><span style="color: #0000ff">="true"</span>
<span style="color: #ff0000">type</span><span style="color: #0000ff">="com.test.struts.action.LoginAction"</span> <span style="color: #0000ff">/&gt;</span> </pre></div>
<p>改为： 
<div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;</span><span style="color: #800000">action</span>
<span style="color: #ff0000">attribute</span><span style="color: #0000ff">="loginForm"</span>
<span style="color: #ff0000">input</span><span style="color: #0000ff">="/login.jsp"</span>
<span style="color: #ff0000">name</span><span style="color: #0000ff">="loginForm"</span>
<span style="color: #ff0000">path</span><span style="color: #0000ff">="/login"</span>
<span style="color: #ff0000">scope</span><span style="color: #0000ff">="request"</span>
<span style="color: #ff0000">validate</span><span style="color: #0000ff">="true"</span>
<span style="color: #ff0000">type</span><span style="color: #0000ff">="org.springframework.web.struts.DelegatingActionProxy"</span> <span style="color: #0000ff">/&gt;</span> </pre></div>
<p>type 部份为修改内容, 这里将使用spring的代理器来对Action进行控制. <br>当提交到/login.do是将控制权交给了spring，然后由spring来把它转回到struts的Action. 
<p>4. 配置spring 来实例化上一步中被删除的 Action 类. 
<div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="UTF-8"</span>?<span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;!</span><span style="color: #800000">DOCTYPE</span> <span style="color: #ff0000">beans</span> <span style="color: #ff0000">PUBLIC</span> <span style="color: #0000ff">"-//SPRING//DTD BEAN//EN"</span> <span style="color: #0000ff">"http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff">&gt;</span> 

<span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">bean</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="/login"</span> <span style="color: #ff0000">class</span><span style="color: #0000ff">="com.test.struts.action.LoginAction"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span> 

<span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span> 

</pre></div>
<p>Spring 通过 org.springframework.web.struts.DelegatingActionProxy 这个类, 然后根据 Struts 配置文件中的 &lt;action path="/login" ..&gt; 和 Spring 配置文件中的 &lt;bean name="/login" ..&gt; 来将 Spring 管理下的 Struts Action 类和提交的路径匹配起来, 这些就是关于转交控制权的配置内容. 
<p>实践的过程中发现必须把 singleton="false"去掉才行, 否则就会无法初始化 Spring 框架, 不知道具体的原因是什么. 
<p>既然这个 Struts 的 Action 已经通过 Spring 来初始化, 所以就可以加入依赖注入, 整合 Hibernate 的功能了. 例如典型的情况: 
<div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">com.test.struts.action.LoginAction 

<span style="color: #0000ff">private</span> UserManager userManager; 

<span style="color: #0000ff">public</span> UserManager getUserManager()...
<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setUserManager(UserManager userMgmr) ... 

<span style="color: #0000ff">public</span> ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    System.<span style="color: #0000ff">out</span>.println(<span style="color: #006080">"userManager="</span> + getUserManager());
    getUserManager().someBusinessMethods();
    .....
}

</pre></div>
<p>然后就可以配置: 
<div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="/login"</span> <span style="color: #ff0000">class</span><span style="color: #0000ff">="com.test.struts.action.LoginAction"</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">property</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="userManager"</span><span style="color: #0000ff">&gt;</span>
   <span style="color: #0000ff">&lt;</span><span style="color: #800000">ref</span> <span style="color: #ff0000">bean</span><span style="color: #0000ff">="userManagerBean"</span> <span style="color: #0000ff">/&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span> 

<span style="color: #0000ff">&lt;</span><span style="color: #800000">bean</span> <span style="color: #ff0000">id</span><span style="color: #0000ff">="userManagerBean"</span> <span style="color: #ff0000">class</span><span style="color: #0000ff">="manager.UserManager"</span> <span style="color: #0000ff">/&gt;</span> 

</pre></div>
<p>同理 Spring 整合 Hibernate 和没 Struts 的时候一样, 也可以在这个文件中进行配置即可. 
<p>4. 最后一步, 测试, 只要能打印出来 userManager 不为空, 就说明整合成功了. 如果出现 404 action servlet 不可用的错误, 一般都是 Spring 配置文件出错导致的. 
<p>参考视频: <a href="http://www.blogjava.net/beansoft/archive/2007/08/06/134571.html">小电影: 用 MyEclipse 开发 Spring + Struts 的总结与操作视频(7分钟)</a> </p></div></div></form><img src ="http://www.blogjava.net/beansoft/aggbug/143674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-08 20:56 <a href="http://www.blogjava.net/beansoft/archive/2007/09/08/143674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 开发 SSH 整合时 java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 解决方案</title><link>http://www.blogjava.net/beansoft/archive/2007/08/27/139890.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 27 Aug 2007 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/27/139890.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/139890.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/27/139890.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/139890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/139890.html</trackback:ping><description><![CDATA[
		<p>这篇文章解决了问题, 核心提示:</p>
		<p>2007-08-08 发现用 MyEclipse 5.5 做 Struts 1.2 + Spring 2.0 + Hibernate 3.1 整合时启动过程中报如下的错误:</p>
		<p>
				<br />2007-08-08 15:36:17,406 ERROR [org.hibernate.proxy.BasicLazyInitializer] - CGLIB Enhancement failed: dao.User<br />java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br /> at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)</p>
		<p>Spring 和 Hibernate 共用的一些 jar 文件发生了版本冲突, 删除 WEB-INF/lib/asm-2.2.3.jar 然后重启 Tomcat.</p>
		<p>asm-2.2.3.jar<br />       asm.jar<br />       asm-attrs.jar<br />      asm-commons-2.2.3.jar<br />      asm-util-2.2.3.jar</p>
		<p>
				<br />
		</p>
		<p>原文参考:　<a href="http://heweiya.javaeye.com/blog/101575">http://heweiya.javaeye.com/blog/101575</a></p>
		<p>
				<br />下面是一个完整的出错信息:</p>
		<p>2007-10-7 10:44:42 org.apache.catalina.core.StandardContext listenerStart
<br />严重: Exception sending context initialized event to listener
instance of class org.springframework.web.context.ContextLoaderListener
<br />org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'entityManagerFactory' defined in
ServletContext resource [/WEB-INF/classes/applicationContext.xml]:
Invocation of init method failed; nested exception is
java.lang.ExceptionInInitializerError
<br />Caused by: java.lang.ExceptionInInitializerError
<br />	at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117)
<br />	at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
<br />	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
<br />	at org.hibernate.tuple.entity.AbstractEntityTuplizer.&lt;init&gt;(AbstractEntityTuplizer.java:135)
<br />	at org.hibernate.tuple.entity.PojoEntityTuplizer.&lt;init&gt;(PojoEntityTuplizer.java:55)
<br />	at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.&lt;init&gt;(EntityEntityModeToTuplizerMapping.java:56)
<br />	at org.hibernate.tuple.entity.EntityMetamodel.&lt;init&gt;(EntityMetamodel.java:295)
<br />	at org.hibernate.persister.entity.AbstractEntityPersister.&lt;init&gt;(AbstractEntityPersister.java:434)
<br />	at org.hibernate.persister.entity.SingleTableEntityPersister.&lt;init&gt;(SingleTableEntityPersister.java:109)
<br />	at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
<br />	at org.hibernate.impl.SessionFactoryImpl.&lt;init&gt;(SessionFactoryImpl.java:226)
<br />	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
<br />	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
<br />	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)
<br />	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
<br />	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
<br /> at
org.springframework.orm.jpa.LocalEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalEntityManagerFactoryBean.java:91)
<br />	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:251)
<br /> at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1202)
<br /> at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
<br /> at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:428)
<br />	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
<br />	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
<br /> at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:284)
<br />	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
<br />	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
<br />	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
<br />	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
<br />	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3830)
<br />	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4337)
<br />	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
<br />	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
<br />	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
<br />	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
<br />	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
<br />	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
<br />	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
<br />	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
<br />	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
<br />	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
<br />	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
<br />	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
<br />	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
<br />	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
<br />	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
<br />	at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
<br />	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
<br />	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
<br />	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
<br />	at java.lang.reflect.Method.invoke(Unknown Source)
<br />	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
<br />	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
<br />Caused by: java.lang.SecurityException: class
"org.objectweb.asm.CodeVisitor"'s signer information does not match
signer information of other classes in the same package
<br />	at java.lang.ClassLoader.checkCerts(Unknown Source)
<br />	at java.lang.ClassLoader.preDefineClass(Unknown Source)
<br />	at java.lang.ClassLoader.defineClass(Unknown Source)
<br />	at java.security.SecureClassLoader.defineClass(Unknown Source)
<br />	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1817)
<br />	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
<br />	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
<br />	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
<br />	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
<br />	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:165)
<br />	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
<br />	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
<br />	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
<br />	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
<br />	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
<br />	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
<br />	at net.sf.cglib.proxy.Enhancer.&lt;clinit&gt;(Enhancer.java:69)
<br />	... 54 more
<br />2007-10-7 10:44:42 org.apache.catalina.core.StandardContext start
<br />严重: Error listenerStart
<br />2007-10-7 10:44:42 org.apache.catalina.core.StandardContext start
<br />严重: Context [/d1] startup failed due to previous errors
<br />2007-10-7 10:44:42 org.apache.catalina.core.ApplicationContext log
<br />信息: Closing Spring root WebApplicationContext
<br />2007-10-7 10:44:42 org.apache.catalina.loader.WebappClassLoader loadClass
<br />信息: Illegal access: this web application instance has been stopped
already. Could not load java.net.BindException. The eventual following
stack trace is caused by an error thrown for debugging purposes as well
as to attempt to terminate the thread which caused the illegal access,
and has no functional impact.
<br />java.lang.IllegalStateException
<br />	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244)
<br />	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
<br />	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
<br />	at com.mysql.jdbc.CommunicationsException.&lt;init&gt;(CommunicationsException.java:155)
<br />	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2652)
<br />	at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1345)
<br />	at com.mysql.jdbc.Connection.realClose(Connection.java:4731)
<br />	at com.mysql.jdbc.Connection.cleanup(Connection.java:2034)
<br />	at com.mysql.jdbc.Connection.finalize(Connection.java:3244)
<br />	at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
<br />	at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
<br />	at java.lang.ref.Finalizer.access$100(Unknown Source)
<br />	at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
<br />2007-10-7 10:44:42 org.apache.catalina.loader.WebappClassLoader loadClass
<br />信息: Illegal access: this web application instance has been stopped
already. Could not load com.mysql.jdbc.Messages. The eventual following
stack trace is caused by an error thrown for debugging purposes as well
as to attempt to terminate the thread which caused the illegal access,
and has no functional impact.
<br />java.lang.IllegalStateException
<br />	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244)
<br />	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
<br />	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
<br />	at com.mysql.jdbc.CommunicationsException.&lt;init&gt;(CommunicationsException.java:174)
<br />	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2652)
<br />	at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1345)
<br />	at com.mysql.jdbc.Connection.realClose(Connection.java:4731)
<br />	at com.mysql.jdbc.Connection.cleanup(Connection.java:2034)
<br />	at com.mysql.jdbc.Connection.finalize(Connection.java:3244)
<br />	at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
<br />	at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
<br />	at java.lang.ref.Finalizer.access$100(Unknown Source)
<br />	at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source) 
</p>
		<p>
		</p>
<img src ="http://www.blogjava.net/beansoft/aggbug/139890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-08-27 13:41 <a href="http://www.blogjava.net/beansoft/archive/2007/08/27/139890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载: Spring 入门实战</title><link>http://www.blogjava.net/beansoft/archive/2007/08/25/139232.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 25 Aug 2007 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/25/139232.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/139232.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/25/139232.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/139232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/139232.html</trackback:ping><description><![CDATA[来源 http://hi.baidu.com/panqf/blog/item/3839ad13827fbc826538db48.html <br>创] Spring 入门实战
<div class="date">2007-07-20  17:50</div>
一、创建项目<br>
&nbsp;&nbsp;&nbsp;   创建名为&#8220;SpringHelloworld&#8221;的Web Project，如下图：<br>
<div forimg="1" align="center"><img  src="http://hiphotos.baidu.com/panqf/pic/item/268710dd63dd86de8d102926.jpg" small="0" class="blogimg" border="0"></div>
<br>
二、加入Spring支持&nbsp;&nbsp;    <br>
&nbsp;&nbsp;&nbsp;   点击菜单&#8220;MyEclipse&#8221; -- &#8220;Add Spring Capabities"启动向导，在项目中加入对Spring的支持。<br>
&nbsp;&nbsp;&nbsp;   第一步：如下图：<br>
<div forimg="1" align="center"><img  src="http://hiphotos.baidu.com/panqf/pic/item/45d42017c09c43064a90a72b.jpg" small="0" class="blogimg" border="0"><br>
<div align="left"><br>
&nbsp;&nbsp;&nbsp;   第二步：如下图：</div>
</div>
<div forimg="1" align="center"><img  src="http://hiphotos.baidu.com/panqf/pic/item/147931b3203bb8a0d9335a2b.jpg" small="0" class="blogimg" border="0"></div>
<br>
三、增加Java包<br>
&nbsp;&nbsp;&nbsp;   在src下面创建三个Java包，分别名为：com.pqf.beans, com.pqf.impl, com.pqf.test。 如下图：<br>
<div forimg="1" align="center"><img  src="http://hiphotos.baidu.com/panqf/pic/item/173ec3fa777c09d9b48f313a.jpg" small="0" class="blogimg" border="0"><br>
<div align="left"> </div>
<div align="left">四、编写名为HelloWorld的JavaBean<br>
&nbsp;&nbsp;&nbsp;   在com.pqf.beans 包下面创建 java 类，名为HelloWorld，其源代码如下：<br>
<font color="#0000ff">&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   public class HelloWorld {<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;   public String msg=null;<br>
<br>
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;    public String getMsg() {<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;     &nbsp;&nbsp;    return msg;<br>
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;    }<br>
<br>
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;    public void setMsg(String msg) {<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;     &nbsp;&nbsp;    this.msg = msg;<br>
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;    }<br>
&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;   }<br>
</font>   <br>
五、编写不使用Spring的测试程序<br>
&nbsp;&nbsp;&nbsp;   在 com.pqf.test 包下面创建测试程序，名为：TestHelloWorldNoSpring, 源代码如下：<br>
<font color="#0000ff">&nbsp;&nbsp;&nbsp;   package com.pqf.test;<br>
&nbsp;&nbsp;&nbsp;   import com.pqf.beans.HelloWorld;<br>
&nbsp;&nbsp;&nbsp;   public class TestHelloWorldNoSpring {<br>
&nbsp;&nbsp;&nbsp;    public static void main(String[] args) {<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    HelloWorld hw=new HelloWorld();<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    hw.setMsg("向全世界问好!");<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    System.out.println(hw.getMsg());<br>
&nbsp;&nbsp;&nbsp;    }<br>
&nbsp;&nbsp;&nbsp;   }<br>
</font>   <br>
&nbsp;&nbsp;&nbsp;   运行这个测试程序，应该在控制台输出：<font color="#0000ff">向全世界问好!</font><br>
<br>
六、设置Spring配置文件<br>
&nbsp;&nbsp;&nbsp;   双击打开 applicationContext.xml  文件，这个文件是Spring的核心配置文件。<br>
&nbsp;&nbsp;&nbsp;   编辑修改文件内容如下:<br>
&nbsp;&nbsp;&nbsp;    &lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>
&nbsp;&nbsp;&nbsp;   &lt;beans xmlns="http://www.springframework.org/schema/beans"<br>
&nbsp;&nbsp;&nbsp;    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br>
&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br>
&nbsp;&nbsp;&nbsp;    <strong><font color="#0000ff">&lt;bean </font><font color="#0000ff">id="HelloWorld" class="com.pqf.beans.HelloWorld"&gt;<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    &lt;property name="msg"&gt;<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    &lt;value&gt;愿世界和平，向全世界问好！&lt;/value&gt;<br>
&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;    &lt;/property&gt;<br>
&nbsp;&nbsp;&nbsp;    &lt;/bean&gt;</font></strong><br>
&lt;/beans&gt;<br>
<br>
&nbsp;&nbsp;&nbsp;   其中，&lt;bean&gt; 描述将类 <strong><font color="#0000ff">com.pqf.beans.HelloWorld </font></strong><font color="#0000ff"><font color="#000000">以 HelloWorld 为标识，注入到其他程序中；<br>
&nbsp;&nbsp;&nbsp;   &lt;property&gt; 描述将属性 msg 的值注入到程序中。<br>
<br>
</font></font> 六、编写使用Spring的测试程序<br>
&nbsp;&nbsp;&nbsp;   在com.pqf.test包下面创建使用Spring技术的测试程序，源代码如下：<br>
<br>
&nbsp;&nbsp;&nbsp;   <font color="#0000ff">import org.springframework.context.ApplicationContext;<br>
&nbsp;&nbsp;&nbsp;   import org.springframework.context.support.FileSystemXmlApplicationContext;<br>
&nbsp;&nbsp;&nbsp;   import com.pqf.beans.HelloWorld;<br>
<br>
&nbsp;&nbsp;&nbsp