﻿<?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-墙头草的Java-随笔分类-Spring</title><link>http://www.blogjava.net/javagrass/category/36427.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 30 Dec 2008 22:55:34 GMT</lastBuildDate><pubDate>Tue, 30 Dec 2008 22:55:34 GMT</pubDate><ttl>60</ttl><item><title>SpringOne带来了新的Tomcat Server、VMware伙伴并提供ActionScript</title><link>http://www.blogjava.net/javagrass/archive/2008/12/29/248875.html</link><dc:creator>墙头草</dc:creator><author>墙头草</author><pubDate>Mon, 29 Dec 2008 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/javagrass/archive/2008/12/29/248875.html</guid><wfw:comment>http://www.blogjava.net/javagrass/comments/248875.html</wfw:comment><comments>http://www.blogjava.net/javagrass/archive/2008/12/29/248875.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/javagrass/comments/commentRss/248875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagrass/services/trackbacks/248875.html</trackback:ping><description><![CDATA[<p>一年一度的SpringOne大会北美会场于最近结束，该大会发布了大量声明并宣布了很多新特性。总之，该大会聚焦于以下两方面：SpringSource企业级产品的继续研发及对明年的<a href="http://www.itstrike.cn/html/Java/Spring/index.html">Spring框架</a>和与之相关的生态圈的预测。</p>
<p><strong>SpringSource tcServer——</strong>SpringOne上的头条新闻就是新的<a href="http://www.springsource.com/products/suite/tcserver">tcServer</a>的<a id="ma:2" title="公诸于众" href="http://www.springsource.com/node/899">公诸于众</a>：</p>
<blockquote>...SpringSource tc Server包含了Apache
Tomcat、增强的操作管理能力及高级服务器和应用诊断功能。该服务器在多种环境下都经受住了考验并且支持企业级的关键任务。SpringSource
tc Server以独立的控制台视图提供了对组织的Tomcat server集中管理和监控能力：定义Tomcat
server组、单独或者是跨越一个服务器组来部署/启动/停止/卸载应用，同时还能够启动和停止Tomcat
server本身。它可以独立的控制台来控制Tomcat
server的整个生命周期。其管理功能还可以监控并控制其他版本的Tomcat（例如，那些在实现tc
Server之前已经部署了的Server）。SpringSource tc
Server提供了高级的诊断功能，如死锁检测和更多的跟踪、可以更快的识别出问题并给出解决方案。在失败发生后的这些诊断功能可以从Server中捕获
跟踪、内存及线程信息以便进行快速诊断并对运行时的问题进行隔离和修复... </blockquote>
<p>tcServer的发布并没有出乎人们的意料，因为早在今年初SpringSource就<a id="sr41" title="收购" href="http://www.infoq.com/news/2008/01/springsource-covalent">收购</a>了Covalent。<a href="http://www.eweek.com/c/a/Application-Development/SpringSource-Leverages-Apache-Tomcat-for-new-App-Server/1/">eWeek</a>注意到过去两年内Tomcat项目中80%的提交来自于SpringSource员工。</p>
<p><strong>Spring IDE 2.2.1——</strong>SpringOne还<a id="llfs" title="发布" href="http://springide.org/blog/2008/11/30/springone-221-release-available/">发布</a>了新版本的Spring IDE。</p>
<p><strong>SpringSource/VMWare</strong>——可能在很多领域都会结出硕果的一个声明就是SpringSource和VMWare之间结成的新的<a id="tsn7" title="伙伴" href="http://www.springsource.com/node/914">伙伴</a>关系。</p>
<blockquote>...与VMware（SpringSource认证的解决方案合作商）的合作包括SpringSource Tool
Suite（一个基于Eclipse的开发环境，使用Spring Portfolio来构建企业级应用）和VMware
Workstation的集成以能够在开发者桌面上动态创建虚拟机...该合作还包括联合开发两个开源的应用服务器虚拟映像（SpringSource
tc Server和dm Server virtual
images），这样就可以跨越桌面和数据中心虚拟化环境来移植企业级Java应用了。&nbsp;SpringSource dm
Server是一个完全模块化、基于OSGi的Java服务器，因其灵活性和可靠性，它可以运行企业级Java应用和基于Spring的应用。
SpringSource tc Server是Apache
Tomcat（应用最广的Java应用服务器）的企业版，它可进行企业级应用并可以处理关键任务，同时还满足了系统管理员的要求。所有这些想法都将成为
VMware和SpringSource围绕着VMware的vCloud的一部分...SpringSource Tool
Suite与VMware
Workstation的集成可以使开发和QA专家为不同的开发和测试场景指定虚拟服务器配置。凭借这些虚拟设备，开发者可以在不同的操作系统和应用服务
器配置上选择多种构建目标而无需额外的硬件设备。虚拟设备配置、开发和调试已经集成到了SpringSource Tool
Suite中了，因此他们可以使用为dm Server、tc Server和Apache
Tomcat提供的那些虚拟映像了...明年1月将发布首个SpringSource/VMware的商业产品。 </blockquote>
<p>正如新闻中所述，IDE和虚拟机的集成看来是2009年的路线图了。官方的VMWare workstation博客也<a id="r-fb" title="说到" href="http://blogs.vmware.com/workstation/2008/12/springsource-partnership-the-inside-story.html">说到</a>此次合作并提到了之前的Eclipse集成（只是一个原型）。</p>
<p><strong>Spring/Adobe</strong>——在SpringOne上，Spring生态圈继续扩张着，有两个关键的与Flex相关的声明。<a href="http://www.infoq.com/news/2008/10/prana-framework-actionscript-3">Prana</a>框架正式更名为<a href="http://www.herrodius.com/blog/157">Spring Actionscript</a>。作为此次更名的一部分，该项目获得了官方的SpringFramework.org论坛、JIRA访问及Fisheye集成。SpringSource还<a id="yq3w" title="宣布" href="http://www.springsource.com/node/1077">宣布</a>了与Adobe的合作以集成Spring与BlazeDS：</p>
<blockquote>...一个新的开源项目Spring BlazeDS
Integration将为Spring和BlazeDS、基于Adobe开源服务器的Java remoting和web
messaging技术提供更为紧密的集成。该集成项目将成为Spring Web家族中的一个关键组件...针对Adobe
Flex的SpringSource Adapter将以Adobe&#174; LiveCycle&#174; Data Services ES for Adobe
Flex&#174;提供集成，这将可以为实时和接近于实时的解决方案创建基于推模式的服务端应用。针对Flex的SpringSource
Adapter将成为SpringSource企业应用客户订阅的一部分... </blockquote>
<p>在社区将BlazeDS集成到了Spring和Spring Security之后，官方支持终于来了。</p>
<p><strong>Spring Integration 1.0</strong>——<a id="ubdz" title="InfoQ最近曾报道过" href="http://www.infoq.com/news/2008/11/spring_integration_rc1">InfoQ最近曾报道过</a>，Spring Integration 1.0已经发布了。Spring Integration支持大多数常用的传输方式，如JMS、web services、文件、RMI等等，同时还有其他选择如FTP，这是由社区通过Spring Extensions贡献的。</p>
<p><strong>Spring 3.0 M1</strong>——对于2009年来说，最具影响力的声明就是Spring 3.0 M1的公诸于众。以下内容来自于Juergen Hoeller的<a id="b_u1" title="官方博客" href="http://blog.springsource.com/2008/12/05/spring-framework-30-m1-released/">官方博客</a>：</p>
<blockquote>
<ul>
    <li>通过基于模块的源码修正了项目布局和构建系统</li>
    <li>使用Java 5编码风格更新了全部代码基（泛型、可变参数）</li>
    <li>更新到JUnit 4.5和JRuby 1.1</li>
    <li>引入了Spring EL解析器（org.springframework.expression包）</li>
    <li>在bean定义中引入了对#{&#8230;}表达式的支持</li>
    <li>为嵌入式表达式引入了@Value注解</li>
    <li>为MVC处理器中URI模板的处理引入了@PathVariable注解</li>
    <li>为MVC处理器中的@RequestParam引入了默认值支持</li>
    <li>为MVC处理器中的HTTP header访问引入了@RequestHeader注解</li>
    <li>引入了AbstractAtomFeedView和AbstractRssFeedView基类</li>
    <li>引入了JSP标签</li>
</ul>
</blockquote>
<p>Spring 3.0需要Java 5+。Willie Wheeler已经撰写了博文，对里程碑上的声明和会议进行了综述。<a id="lrxv" title="第一部分" href="http://springinpractice.wordpress.com/2008/12/02/new-stuff-in-spring-30/">第一部分</a>，<a id="gg_n" title="第二部分" href="http://springinpractice.wordpress.com/2008/12/03/new-stuff-in-spring-30-part-2/">第二部分</a>。</p>
<p><strong>来自Blogsphere的一些想法</strong>——Blogsphere在SpringOne上也表现的非常积极。<a href="http://www.jroller.com/Solomon/entry/spring_one_themes">Solomon Duskis</a>撰写了一些博文，很好的总结了会议的主题，如tcServer、Spring DM的成熟度、Spring和JCP的继续合作以及工业上重量级公司不断加入SpringSource的演变过程。其他主题列举如下：</p>
<ul><strong>所有</strong><br />
    <a href="http://springinpractice.wordpress.com/2008/12/01/rod-johnsons-keynote-address-at-springone-americas-2008/">http://springinpractice.wordpress.com/2008/12/01/rod-johnsons-keynote-address-at-springone-americas-2008/</a><br />
    <a href="http://www.jroller.com/Solomon/entry/spring_one_random_thoughts_and">http://www.jroller.com/Solomon/entry/spring_one_random_thoughts_and </a>
    <p><strong>第一天</strong><br />
    <a href="http://www.i-proving.ca/space/Alec+Ho/blog/2008-12-04_1">http://www.i-proving.ca:80/space/Alec+Ho/blog/2008-12-04_1 </a><br />
    <a href="http://ptrthomas.wordpress.com/2008/12/02/springone-2008-day-1/">http://ptrthomas.wordpress.com/2008/12/02/springone-2008-day-1/</a><br />
    <a href="http://greybeardedgeek.net/?p=66">http://greybeardedgeek.net/?p=66</a></p>
    <p><strong>第二天</strong><br />
    <a href="http://ptrthomas.wordpress.com/2008/12/03/springone-2008-day-2/">http://ptrthomas.wordpress.com/2008/12/03/springone-2008-day-2/</a><br />
    <a href="http://greybeardedgeek.net/?p=71">http://greybeardedgeek.net/?p=71</a></p>
    <p><strong>第三天</strong><br />
    <a href="http://ptrthomas.wordpress.com/2008/12/04/springone-2008-day-3/">http://ptrthomas.wordpress.com/2008/12/04/springone-2008-day-3/</a><br />
    <a href="http://greybeardedgeek.net/?p=83">http://greybeardedgeek.net/?p=83</a><br />
    <a href="http://greybeardedgeek.net/?p=88">http://greybeardedgeek.net/?p=88</a></p>
    <p><strong>第四天</strong><br />
    <a href="http://ptrthomas.wordpress.com/2008/12/05/springone-2008-day-4/">http://ptrthomas.wordpress.com/2008/12/05/springone-2008-day-4/</a><br />
    &nbsp; <br />
    </p>
    <p><br />
    </p>
</ul>
相关文章:<br />
<div id="mostEmailed" class="tabContent tabContentActive">
<ol>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/02-1426.html">Spring的JDBCTemplate</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/02-1424.html">Spring2.5 访问Session属性的四种方法</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/02-1425.html">利用 Spring2.5 和 Reflection 简化测试</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/02-1428.html">Spring实现动态数据源</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/04-2194.html">在Spring基础上实现自定义异常处理</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/02-1427.html">Spring自动代理机制</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/12-3782.html">Spring 2.0 用 AspectJ 实现 AOP</a></li>
    <li><a href="http://www.itstrike.cn/html/Java/Spring/200812/12-3783.html">Spring 通用的方法拦截</a></li>
</ol>
</div>
<br />
<img src ="http://www.blogjava.net/javagrass/aggbug/248875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagrass/" target="_blank">墙头草</a> 2008-12-29 13:01 <a href="http://www.blogjava.net/javagrass/archive/2008/12/29/248875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate unexpected end of subtree异常解决办法</title><link>http://www.blogjava.net/javagrass/archive/2008/12/02/244009.html</link><dc:creator>墙头草</dc:creator><author>墙头草</author><pubDate>Tue, 02 Dec 2008 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/javagrass/archive/2008/12/02/244009.html</guid><wfw:comment>http://www.blogjava.net/javagrass/comments/244009.html</wfw:comment><comments>http://www.blogjava.net/javagrass/archive/2008/12/02/244009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javagrass/comments/commentRss/244009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagrass/services/trackbacks/244009.html</trackback:ping><description><![CDATA[HQL查询语句：from Course course where course.name like '%计算机%' order by course.date desc&nbsp;  异常：<br />
<br />
[org.hibernate.hql.PARSER] - &lt;AST&gt;:0:0: unexpected end of
subtree&nbsp;2008-05-06 <br />
18:36:04,062 ERROR [org.hibernate.hql.PARSER] -&nbsp;
Invalid path: 'course.name' <br />
2008-05-06 18:36:04,062 ERROR
[org.hibernate.hql.PARSER] - &lt;AST&gt;:0:0: unexpected end of
subtree <br />
2008-05-06 18:36:04,062 ERROR [org.hibernate.hql.PARSER] -&nbsp;
left-hand operand of a binary operator was null <br />
2008-05-06 18:36:04,093
ERROR [org.hibernate.hql.PARSER] -&nbsp; Invalid path:
'course.date' <br />
2008-05-06 18:36:04,125 ERROR [com.vod.dao.CourseDAO] -
find all
failed&nbsp;org.springframework.orm.hibernate3.HibernateQueryException:
unexpected end of subtree [where course.name like '%计算机%' order by
course.date desc ]; nested exception is
org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree
[where course.name like '%计算机%' order by course.date desc ]Caused by:
org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree
[where course.name like '%计算机%' order by course.date desc ]&nbsp;at
org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)&nbsp;at
<br />
org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)&nbsp;at
<br />
org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)&nbsp;at
<br />
org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)&nbsp;at
<br />
org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;<br />
(HQLQueryPlan.java:75)&nbsp;at
org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;(HQLQueryPlan.java:54)&nbsp;at
org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)&nbsp;at
org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)&nbsp;at
org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)&nbsp;at
org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:15&#8230;&#8230;<br />
<br />
问题解决了：语句写错了！！：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;public&nbsp;List&nbsp;findByHql(String&nbsp;hql){&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug("finding&nbsp;all&nbsp;Course&nbsp;instances");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;queryString&nbsp;=&nbsp;"from&nbsp;Course&nbsp;course&nbsp;"&nbsp;+hql+"&nbsp;";<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("\n\n"+queryString+"\n\n");<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;getHibernateTemplate().find(queryString);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(RuntimeException&nbsp;re)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error("find&nbsp;all&nbsp;failed",&nbsp;re);<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;re;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">}<br />
</span></div>
<br />
写成了：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">public&nbsp;List&nbsp;findByHql(String&nbsp;hql){<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug("finding&nbsp;all&nbsp;Course&nbsp;instances");<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;queryString&nbsp;=&nbsp;"from&nbsp;Course&nbsp;course&nbsp;"&nbsp;+hql+"&nbsp;";<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("\n\n"+queryString+"\n\n");<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;getHibernateTemplate().find(hql);//就这里！真是郁闷<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(RuntimeException&nbsp;re)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error("find&nbsp;all&nbsp;failed",&nbsp;re);<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;re;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">}</span></div>
<img src ="http://www.blogjava.net/javagrass/aggbug/244009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagrass/" target="_blank">墙头草</a> 2008-12-02 20:28 <a href="http://www.blogjava.net/javagrass/archive/2008/12/02/244009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Spring+hibernate中不能释放tomcat连接池中连接的解决办法</title><link>http://www.blogjava.net/javagrass/archive/2008/12/02/244007.html</link><dc:creator>墙头草</dc:creator><author>墙头草</author><pubDate>Tue, 02 Dec 2008 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/javagrass/archive/2008/12/02/244007.html</guid><wfw:comment>http://www.blogjava.net/javagrass/comments/244007.html</wfw:comment><comments>http://www.blogjava.net/javagrass/archive/2008/12/02/244007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javagrass/comments/commentRss/244007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagrass/services/trackbacks/244007.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用jdbc连接数据库所有功能都没问题，发布到tomcat中也没问题，可是如果使用tomcat的数据源，来连接数据库，开始很正常，但是刷新几次就会出现这个异常&#8230;&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008-04-26 22:35:40,812 WARN [org.hibern...&nbsp;&nbsp;<a href='http://www.blogjava.net/javagrass/archive/2008/12/02/244007.html'>阅读全文</a><img src ="http://www.blogjava.net/javagrass/aggbug/244007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagrass/" target="_blank">墙头草</a> 2008-12-02 20:21 <a href="http://www.blogjava.net/javagrass/archive/2008/12/02/244007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring自动代理机制</title><link>http://www.blogjava.net/javagrass/archive/2008/12/02/244005.html</link><dc:creator>墙头草</dc:creator><author>墙头草</author><pubDate>Tue, 02 Dec 2008 12:20:00 GMT</pubDate><guid>http://www.blogjava.net/javagrass/archive/2008/12/02/244005.html</guid><wfw:comment>http://www.blogjava.net/javagrass/comments/244005.html</wfw:comment><comments>http://www.blogjava.net/javagrass/archive/2008/12/02/244005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javagrass/comments/commentRss/244005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagrass/services/trackbacks/244005.html</trackback:ping><description><![CDATA[我们一直使用ProxyFactoryBean来显式的创建AOP代理。但是在很多场合，这种方式将会使编写配置文件的工作量大大增加；由于要从
ProxyFactoryBean获得代理对象，也会使应用和Spring之间的耦合度增加。下面介绍使用Spring提供的自动代理机制来解决这类问
题。
<p><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="_Toc206765311"></a>1、<a name="_Toc206747728"><strong>使用</strong></a><strong>BeanNameAutoProxyCreator</strong>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Spring提供的BeanNameAutoProxyCreator类允许我们通过Bean的name属性来指定代理的Bean。它暴露了
java.lang.String[]类型的beanNames和
interceptorNames属性。beanNames可以指定被代理的Bean名字列表，支持&#8220;*&#8221;通配符，例如&#8220;*DAO&#8221;表示所有名字以
&#8220;DAO&#8221;结尾的Bean。interceptorNames指定通知（Advice）列表，或者通知者（Advisor）列表。
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
下面通过一个例程来演示如何使用BeanNameAutoProxyCreator。在例子中，有两个Bean：TestBeanA和BeanB，并在
TestMain类中的main方法中调用其MyMethod()方法。自动代理将会在方法调用前自动的执行配置的前置通知，输出提示信息。
</p>
<p>新建一个名字为AOP_Test4.10的工程，添加Spring的IoC和AOP库后，新建一aop.test包，再分别创建两个类TestBeanA和BeanB，添加MyMethod()方法，代码如下：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><strong style="color: #000000;">代码</strong>&nbsp;&nbsp;&nbsp;<a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看源代码</a><a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">package</span><span>&nbsp;aop.test;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;zhangyong</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestBeanA&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;MyMethod()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="keyword">this</span><span>.getClass().getName()&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;<span class="string">".MyMethod()&nbsp;is&nbsp;run!"</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea class="java" style="width: 100%; display: none;" name="code" rows="15">/**
*
*/
package aop.test;
/**
* @author zhangyong
*
*/
public class TestBeanA {
public void MyMethod() {
System.out.println(this.getClass().getName()
+ ".MyMethod() is run!");
}
}
</textarea>
<br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><strong style="color: #000000;">代码</strong>&nbsp;&nbsp;&nbsp;<a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看源代码</a><a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">package</span><span>&nbsp;aop.test;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;zhangyong</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BeanB&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;MyMethod()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="keyword">this</span><span>.getClass().getName()&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;<span class="string">".MyMethod()&nbsp;is&nbsp;run!"</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea class="java" style="width: 100%; display: none;" name="code" rows="15">/**
*
*/
package aop.test;
/**
* @author zhangyong
*
*/
public class BeanB {
public void MyMethod() {
System.out.println(this.getClass().getName()
+ ".MyMethod() is run!");
}
}
</textarea>
<p>　　再创建前置通知类BeforeAdvice：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><strong style="color: #000000;">代码</strong>&nbsp;&nbsp;&nbsp;<a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看源代码</a><a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">package</span><span>&nbsp;aop.test;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.lang.reflect.Method;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.springframework.aop.MethodBeforeAdvice;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;zhangyong</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BeforeAdvice&nbsp;</span><span class="keyword">implements</span><span>&nbsp;MethodBeforeAdvice&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;before(Method&nbsp;method,&nbsp;Object[]&nbsp;args,&nbsp;Object&nbsp;target)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">throws</span><span>&nbsp;Throwable&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(method.getName()&nbsp;+&nbsp;<span class="string">"()，将要运行！"</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea class="java" style="width: 100%; display: none;" name="code" rows="15">/**
*
*/
package aop.test;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
/**
* @author zhangyong
*
*/
public class BeforeAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println(method.getName() + "()，将要运行！");
}
}
</textarea>
<p>　　最后创建含有main方法的测试类TestMain：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><strong style="color: #000000;">代码</strong>&nbsp;&nbsp;&nbsp;<a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看源代码</a><a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">package</span><span>&nbsp;aop.test;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.springframework.context.ApplicationContext;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;zhangyong</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestMain&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;ac&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ClassPathXmlApplicationContext(&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">"applicationContext.xml"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestBeanA&nbsp;beanA&nbsp;=&nbsp;(TestBeanA)ac.getBean(<span class="string">"TestBeanA"</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanA.MyMethod();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanB&nbsp;beanB&nbsp;=&nbsp;(BeanB)ac.getBean(<span class="string">"BeanB"</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanB.MyMethod();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;}&nbsp;&nbsp;</span></li>
</ol>
</div>
<textarea class="java" style="width: 100%; display: none;" name="code" rows="15">/**
*
*/
package aop.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author zhangyong
*
*/
public class TestMain {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"applicationContext.xml");
TestBeanA beanA = (TestBeanA)ac.getBean("TestBeanA");
beanA.MyMethod();
BeanB beanB = (BeanB)ac.getBean("BeanB");
beanB.MyMethod();
}
}
</textarea>
<p>　　在配置文件中配置Bean和自动代理Bean，完成后代码如下：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><strong style="color: #000000;">代码</strong>&nbsp;&nbsp;&nbsp;<a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看源代码</a><a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;&#8230;&#8230;&#8230;&#8230;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"TestBeanA"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"aop.test.TestBeanA"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"BeanB"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"aop.test.BeanB"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"BeforeAdvice"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"aop.test.BeforeAdvice"</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>="org.springframework.aop.framework.autoproxy.&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanNameAutoProxyCreator"<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"beanNames"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>Test*</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"interceptorNames"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>BeforeAdvice</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;<span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea class="xml" style="width: 100%; display: none;" name="code" rows="15">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans &#8230;&#8230;&#8230;&#8230;&gt;
&lt;bean id="TestBeanA" class="aop.test.TestBeanA"/&gt;
&lt;bean id="BeanB" class="aop.test.BeanB"/&gt;
&lt;bean id="BeforeAdvice" class="aop.test.BeforeAdvice"&gt;&lt;/bean&gt;
&lt;bean class="org.springframework.aop.framework.autoproxy.
BeanNameAutoProxyCreator"&gt;
&lt;property name="beanNames"&gt;
&lt;list&gt;
&lt;value&gt;Test*&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;property name="interceptorNames"&gt;
&lt;list&gt;
&lt;value&gt;BeforeAdvice&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;/beans&gt;
</textarea>
<p>　　运行主类，输出结果如下：
</p>
<p><a href="../../images/blogjava_net/cmzy/WindowsLiveWriter/Spring_139E1/AutoProxy1_2.jpg"><img alt="AutoProxy1" src="../../images/blogjava_net/cmzy/WindowsLiveWriter/Spring_139E1/AutoProxy1_thumb.jpg" width="439" border="0" height="124" /></a>
</p>
<p>　　可以看到，在主类TestMain中，我们是直接从Spring
IoC容器中获取收管Bean而不是像以前那样从ProxyFactoryBean中获取代理，但是我们的前置通知BeforeAdvice仍然在
TestBeanA对象的MyMethod()方法执行前被触发，这说明我们的自动代理正在工作。
</p>
<p>&nbsp;
</p>
<p><a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="_Toc206765312"></a>2、<a name="_Toc206747729"><strong>使用</strong></a><strong>DefaultAdvisorAutoProxyCreator</strong>
</p>
<p>　　DefaultAdvisorAutoProxyCreator允许我们只需定义相应的Advisor通知者，就可以完成自动代理。配
置好DefaultAdvisorAutoProxyCreator受管Bean后，它会自动查找配置文件中定义的Advisor，并将它们作用于所有的
Bean。
</p>
<p>修改例程4.10的配置文件，使用DefaultAdvisorAutoProxyCreator来完成自动代理。完成后配置文件代码如下（本例完整工程代码见例程4.11）：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><strong style="color: #000000;">代码</strong>&nbsp;&nbsp;&nbsp;<a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看源代码</a><a href="../../cmzy/archive/2008/08/20/222624.html#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;&#8230;&#8230;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"TestBeanA"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"aop.test.TestBeanA"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"BeanB"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"aop.test.BeanB"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"BeforeAdvice"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"aop.test.BeforeAdvice"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>="org.springframework.aop.framework.autoproxy.&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultAdvisorAutoProxyCreator"&nbsp;<span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>="org.springframework.aop.support.NameMatchMethod&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PointcutAdvisor"<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"advice"</span><span>&nbsp;</span><span class="attribute">ref</span><span>=</span><span class="attribute-value">"BeforeAdvice"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"mappedNames"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>*Method*</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;<span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<textarea class="xml" style="width: 100%; display: none;" name="code" rows="15">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans &#8230;&#8230;&gt;
&lt;bean id="TestBeanA" class="aop.test.TestBeanA" /&gt;
&lt;bean id="BeanB" class="aop.test.BeanB" /&gt;
&lt;bean id="BeforeAdvice" class="aop.test.BeforeAdvice"/&gt;
&lt;bean class="org.springframework.aop.framework.autoproxy.
DefaultAdvisorAutoProxyCreator" /&gt;
&lt;bean class="org.springframework.aop.support.NameMatchMethod
PointcutAdvisor"&gt;
&lt;property name="advice" ref="BeforeAdvice" /&gt;
&lt;property name="mappedNames"&gt;
&lt;list&gt;
&lt;value&gt;*Method*&lt;/value&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;/beans&gt;
</textarea>
<p>　　运行主类输出结果如下：
</p>
<p><a href="../../images/blogjava_net/cmzy/WindowsLiveWriter/Spring_139E1/AutoProxy2_2.jpg"><img alt="AutoProxy2" src="../../images/blogjava_net/cmzy/WindowsLiveWriter/Spring_139E1/AutoProxy2_thumb.jpg" width="390" border="0" height="95" /></a></p>
<p>from:http://www.itstrike.cn/html/Java/Springjiaocheng/200812/02-1427.html</p>
<img src ="http://www.blogjava.net/javagrass/aggbug/244005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagrass/" target="_blank">墙头草</a> 2008-12-02 20:20 <a href="http://www.blogjava.net/javagrass/archive/2008/12/02/244005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>