﻿<?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-上善若水-文章分类-Spring</title><link>http://www.blogjava.net/bourn/category/25429.html</link><description> 反者道之动，弱者道之用。
 天下万物生于有，有生于无。</description><language>zh-cn</language><lastBuildDate>Mon, 03 Sep 2007 21:01:14 GMT</lastBuildDate><pubDate>Mon, 03 Sep 2007 21:01:14 GMT</pubDate><ttl>60</ttl><item><title>实际项目中的Ajax</title><link>http://www.blogjava.net/bourn/articles/141683.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Fri, 31 Aug 2007 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141683.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141683.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141683.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体;"><br />
</span></p>
<p><span style="font-family: 宋体;">上一个项目使用的是</span><span>spring
MVC</span><span style="font-family: 宋体;">；</span> <span style="font-family: 宋体;">客户需要做</span>Ajax<span style="font-family: 宋体;">应用；所以就找了一些资料研究了一下，比如</span>DWR<span style="font-family: 宋体;">，</span>dojo<span style="font-family: 宋体;">，</span> prototype<span style="font-family: 宋体;">，</span>JSON-RPC, trimpath <span style="font-family: 宋体;">等等，发现很多不适合我们，比如</span>DWR<span style="font-family: 宋体;">要生成客户端</span>js<span style="font-family: 宋体;">，服务器端还要部署，麻烦；</span>dojo<span style="font-family: 宋体;">又太慢了；经过一轮淘汰剩下了</span>prototype<span style="font-family: 宋体;">和</span>trimpath<span style="font-family: 宋体;">；所以最终就选这</span>2<span style="font-family: 宋体;">个了；</span></p>
<p>Prototype<span style="font-family: 宋体;">在书写普通的</span>js<span style="font-family: 宋体;">时候，有很多好处，比如简单，实用的很多函数；比如</span>$()<span style="font-family: 宋体;">系列；</span></p>
<p>Trimpath<span style="font-family: 宋体;">提供一个客户端的</span>js<span style="font-family: 宋体;">模板，如果从服务器回来的数据很复杂，要动态改变</span>Html<span style="font-family: 宋体;">元素是比较费力的事情；用</span>trimpath<span style="font-family: 宋体;">就方便许多；</span></p>
<p><span style="font-family: 宋体;">在模板语言的世界里，总有</span>2<span style="font-family: 宋体;">个东西：模板和模板中的数据；</span>trimpath<span style="font-family: 宋体;">的模板接受的数据是</span>javascript object<span style="font-family: 宋体;">，模板则定义在一个不显示的</span>textarea<span style="font-family: 宋体;">里面；</span></p>
<p><span style="font-family: 宋体;">所以有个问题就是：怎么让</span>ajax<span style="font-family: 宋体;">调用返回一个</span>javascript<span style="font-family: 宋体;">对象？</span></p>
<p><span style="font-family: 宋体;">后来，我终于发现了（想起了刘若英）</span>JSON<span style="font-family: 宋体;">；发现</span>json<span style="font-family: 宋体;">是个好东东；比</span>xml<span style="font-family: 宋体;">轻量级，又可以很容易的转换为</span>javascript<span style="font-family: 宋体;">对象，而且还有</span>java api<span style="font-family: 宋体;">；唉，开源的世界多美妙；</span></p>
<p><span style="font-family: 宋体;">所以解决方案就是，在</span>springmvc<span style="font-family: 宋体;">框架中，用</span>response<span style="font-family: 宋体;">返回</span>json string<span style="font-family: 宋体;">，给</span>ajax <span style="font-family: 宋体;">客户端，然后生成</span>javascript<span style="font-family: 宋体;">对象，然后，调用</span>trimpath<span style="font-family: 宋体;">模板，然后，动态修改页面。</span></p>
<p><span style="font-family: 宋体;">代码片段：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public ModelAndView getClient(HttpServletRequest request,
HttpServletResponse response) throws Exception {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>JSONObject jsonObject = new JSONObject();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Client
client=clientMgr.getClientByPk(Long.parseLong(request.getParameter("clientId")));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>jsonObject.add("client", client);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>return ajaxResponse(jsonObject, response);</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected ModelAndView ajaxResponse(JSONObject jsonObject,
HttpServletResponse response) throws Exception {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>response.setContentType("application/x-json;charset=UTF-8");</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>response.getWriter().print(jsonObject);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>return null;</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<img src ="http://www.blogjava.net/bourn/aggbug/141683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-31 12:12 <a href="http://www.blogjava.net/bourn/articles/141683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Code Engine基本技术demo</title><link>http://www.blogjava.net/bourn/articles/141672.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Fri, 31 Aug 2007 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141672.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141672.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141672.html</trackback:ping><description><![CDATA[<p>Code Engine <span style="font-family: 宋体;">主要用来生成</span>web<span style="font-family: 宋体;">相关的代码，可以把</span>orm<span style="font-family: 宋体;">的部分集成进来，形成一条完整的生产线；</span></p>
<p><span style="font-family: 宋体;">利用</span>xpath<span style="font-family: 宋体;">，</span>freemarker<span style="font-family: 宋体;">等技术，使得用户通过</span>xml<span style="font-family: 宋体;">配置文件，模板等简单的方式，快速开发代码和根据需求调整模板；</span></p>
<p>Dom4j<span style="font-family: 宋体;">对实现了</span>xpath 1.0<span style="font-family: 宋体;">，</span> <span style="font-family: 宋体;">非常的好用；</span></p>
<p><span style="font-family: 宋体;">所需</span>jar <span style="font-family: 宋体;">：</span>dom4j-1.6.1.jar<span style="font-family: 宋体;">，</span> jaxen-1.1-beta-7.jar</p>
<p>Code<span style="font-family: 宋体;">：</span></p>
<p>import junit.framework.TestCase;</p>
<p>import org.dom4j.*;</p>
<p>import org.dom4j.io.SAXReader;</p>
<p>import java.util.List;</p>
<p>import java.util.Iterator;</p>
<p>import java.io.File;</p>
<p>/**</p>
<p><span>&nbsp;*
Created by IntelliJ IDEA.</span></p>
<p><span>&nbsp;*
User: duanbin</span></p>
<p><span>&nbsp;*
Date: 2007-8-15</span></p>
<p><span>&nbsp;*
Time: 9:47:17</span></p>
<p><span>&nbsp;* To
change this template use File | Settings | File Templates.</span></p>
<p>&nbsp;*/</p>
<p>public class XPathTest extends TestCase {</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void testXPathViaDom4jXpathV1() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>printSelectedNodeValue("D:""xpath""src""test.xml");</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>/**</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>* </span><span style="font-family: 宋体;">利用</span>XPath<span style="font-family: 宋体;">操作</span>XML<span style="font-family: 宋体;">文件，打印指定节点或者属性的值</span>, using xpath 1.0</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>*</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>* @param filename String </span><span style="font-family: 宋体;">待操作的</span>XML<span style="font-family: 宋体;">文件（相对路径或者绝对路径）</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void printSelectedNodeValue(String filename) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>try {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>SAXReader saxReader = new SAXReader();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Document document = saxReader.read(new File(filename));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>List list;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>list =
document.selectNodes("//qn1:college/@leader[.!='leader1']");</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>for (Object aList : list) {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute =
(Attribute) aList;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("//qn1:college/@leader:&nbsp;" + attribute.getValue());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">打印所有</span>student<span style="font-family: 宋体;">节点的属性</span>age<span style="font-family: 宋体;">值，如果有的话</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("/students/student/@age");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute =
(Attribute) aList;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("/students/student/@age</span><span style="font-family: 宋体;">：</span>" + attribute.getValue());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">打印所有</span>college<span style="font-family: 宋体;">节点值，如果有的话</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("/students/student");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList1 : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element bookElement = (Element)
aList1;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator iterator =
bookElement.elementIterator("college");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iterator.hasNext()) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element titleElement =
(Element) iterator.next();</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("/students/student/college</span><span style="font-family: 宋体;">：</span>" + titleElement.getText());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">测试节点的一些方法</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("//city");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList2 : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element titleElement =
(Element) aList2;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("//telephone</span><span style="font-family: 宋体;">：</span><span>getName:" +
titleElement.getName());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getNodeType:" +
titleElement.getNodeType());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getTextTrim:" +
titleElement.getTextTrim());</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("&nbsp;##getNamespaceURI:" +
titleElement.getNamespaceURI());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getNodeTypeName:" +
titleElement.getNodeTypeName());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getQualifiedName:" +
titleElement.getQualifiedName());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getUniquePath:" +
titleElement.getUniquePath());</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;##getPath:" + titleElement.getPath());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">打印所有</span>name<span style="font-family: 宋体;">节点值，如果有的话，与上面</span>college<span style="font-family: 宋体;">的取法不一样</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("/students/student/name");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iter = list.iterator();</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList3 : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element titleElement = (Element)
aList3;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("/students/student/name</span><span style="font-family: 宋体;">：</span>" + titleElement.getText());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>} catch (Exception ex) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>ex.printStackTrace();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>Test.xml:</p>
<p><span>&lt;?xml version="1.0"
encoding="UTF-8"?&gt;</span></p>
<p><span>&lt;students
xmlns:qn1="http://qn1.com"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student age="259911911911"&gt;&lt;!--</span><span style="font-family: 宋体;">如果没有</span>age<span style="font-family: 宋体;">属性，默认的为</span>20--&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;qn1:name&gt;</span><span style="font-family: 宋体;">崔卫兵</span>&lt;/qn1:name&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;college&gt;PC</span><span style="font-family: 宋体;">学院</span>&lt;/college&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;62354666&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">男</span>,1982<span style="font-family: 宋体;">年生</span>,<span style="font-family: 宋体;">硕士，现就读于北京邮电大学</span>&lt;/notes&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;addr&gt;&lt;city&gt;Beijing&lt;/city&gt;&lt;/addr&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;name&gt;cwb&lt;/name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;qn1:college leader="</span><span style="font-family: 宋体;">学院领导</span>"&gt;PC<span style="font-family: 宋体;">学院</span>&lt;/qn1:college&gt;&lt;!--<span style="font-family: 宋体;">如果没有</span>leader<span style="font-family: 宋体;">属性，默认的为</span>leader--&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;62358888&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">男</span>,1987<span style="font-family: 宋体;">年生</span>,<span style="font-family: 宋体;">硕士，现就读于中国农业大学</span>&lt;/notes&gt;</p>
<p>&nbsp;&nbsp; &nbsp;&lt;/student&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;name&gt;xxxxx&lt;/name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;college leader=""&gt;xxx</span><span style="font-family: 宋体;">学院</span>&lt;/college&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;66666666&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">注视中，注释中</span>&lt;/notes&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student age="9911911911"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;name&gt;yyyyyy&lt;/name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;qn1:college leader="leader1"&gt;yyyy</span><span style="font-family: 宋体;">学院</span>&lt;/qn1:college&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;88888888&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">注视中</span>111<span style="font-family: 宋体;">，注释中</span>222&lt;/notes&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/student&gt;</span></p>
<p>&lt;/students&gt;</p>
<p>Freemarker<span style="font-family: 宋体;">基本示例：</span></p>
<p>import freemarker.template.Configuration;</p>
<p><span>import
freemarker.template.DefaultObjectWrapper;</span></p>
<p>import freemarker.template.Template;</p>
<p>import java.io.File;</p>
<p>import java.io.Writer;</p>
<p>import java.io.OutputStreamWriter;</p>
<p>import java.io.FileOutputStream;</p>
<p>import java.util.Map;</p>
<p>import java.util.HashMap;</p>
<p>import org.apache.log4j.Logger;</p>
<p>/**</p>
<p><span>&nbsp;*
Created by IntelliJ IDEA.</span></p>
<p><span>&nbsp;*
User: duanbin</span></p>
<p><span>&nbsp;*
Date: 2007-8-21</span></p>
<p><span>&nbsp;*
Time: 22:30:13</span></p>
<p><span>&nbsp;* To
change this template use File | Settings | File Templates.</span></p>
<p>&nbsp;*/</p>
<p>public abstract class BaseGenerator {</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected Configuration cfg;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected final Logger logger = Logger.getLogger(this.getClass());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public BaseGenerator() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>try {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg = getConfiguration(CodeEngineConfig.getTemplateDir());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>} catch (Exception e) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>e.printStackTrace();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public abstract void generate();</span></p>
<p><span>&nbsp;&nbsp;&nbsp; protected
void generateFile(String template, Map root, String fileName){</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>try {</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File dist = new File(fileName);</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fos = new
FileOutputStream(dist);</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer out = new
OutputStreamWriter(fos);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer out2 = new
OutputStreamWriter(System.out);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg.getTemplate(template).process(root, out);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.flush();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Generated
File: "&nbsp;+ fileName);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>} catch (Exception e) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>e.printStackTrace();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected Configuration getConfiguration(String tempDir) throws
Exception {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Configuration cfg = new Configuration();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// Specify the data source where the template files come from.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// Here I set a file directory for it:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg.setDirectoryForTemplateLoading(</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(tempDir));</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// Specify how templates will see the data model. This is an advanced
topic...</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// but just use this:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg.setObjectWrapper(new DefaultObjectWrapper());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>return cfg;</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p><span style="font-family: 宋体;">模板文件示例：</span></p>
<p>package ${package}.application.web;</p>
<p><span>import
biz.web.framework.web.BaseController;</span></p>
<p>&lt;#list managers! as mgr&gt;</p>
<p>import ${package}.application.manager.${mgr};</p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list services! as svc&gt;</p>
<p><span>import
${package}.application.service.${svc};</span></p>
<p>&lt;/#list&gt;</p>
<p>/**</p>
<p><span>&nbsp;*
Created by IntelliJ IDEA.</span></p>
<p><span>&nbsp;*
User: ${author!'admin'}&nbsp;"${r"${build.dir}"}&nbsp;"${'$'}{cfg.startDate}</span></p>
<p><span>&nbsp;*
Date: Sep 1, 2006</span></p>
<p><span>&nbsp;*
Time: 9:19:17 AM</span></p>
<p><span>&nbsp;* To
change this template use File | Settings | File Templates.</span></p>
<p>&nbsp;*/</p>
<p><span>public class ${name}Controller extends
BaseController {</span></p>
<p>&lt;#list managers! as mgr&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected ${mgr} ${mgr?uncap_first};</span></p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list services! as svc&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected ${svc} ${svc?uncap_first};</span></p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list managers! as mgr&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void set${mgr}(${mgr} ${mgr?uncap_first}) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>this.${mgr?uncap_first} = ${mgr?uncap_first};</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list services! as svc&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void set${svc}(${svc} ${svc?uncap_first}) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>this.${svc?uncap_first} = ${svc?uncap_first};</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&lt;/#list&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>public ModelAndView list${name}(HttpServletRequest request,
HttpServletResponse response) throws Exception {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>ModelAndView mav = new
ModelAndView("update_${name?uncap_first}");</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Long user = getUserId();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>mav.addObject("userId", user);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>return mav;</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>} </p>
<img src ="http://www.blogjava.net/bourn/aggbug/141672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-31 11:38 <a href="http://www.blogjava.net/bourn/articles/141672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 2.0 AOP 配置</title><link>http://www.blogjava.net/bourn/articles/141543.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141543.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141543.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141543.html</trackback:ping><description><![CDATA[<span style="font-size: 8pt;">
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">springside</span><span style="font-size: 12pt; font-family: 宋体;">的文档中有<span lang="EN-US">aop</span>的配置；<span lang="EN-US"><a href="http://wiki.springside.org.cn/display/springside/Spring+Aop" target="_blank">http://wiki.springside.org.cn/display/springside/Spring+Aop</a>
<br>
</span>里面有关于<span lang="EN-US">pointcut </span>表达式语言的表述；<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">里面也有官方文档中文版的链接：<span lang="EN-US"><a href="http://www.redsaga.com/spring_ref/2.0/html/aop.html" target="_blank">http://www.redsaga.com/spring_ref/2.0/html/aop.html</a> <br>
</span>我们用<span lang="EN-US">scheme-based aop </span>配置方式：<span lang="EN-US"> <br>
&nbsp;&lt;aop:config&gt; ...... &nbsp; &nbsp;&lt;/aop:config&gt; <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Advisor</span><span style="font-size: 12pt; font-family: 宋体;">方式：<span lang="EN-US"> <br>
</span>假设我们有一个<span lang="EN-US">MethodBeforeAdvice </span>叫<span lang="EN-US">TestAdvice
<br>
</span>；用于打印将要执行的方面名；<span lang="EN-US"> <br>
public class TestAdvice implements MethodBeforeAdvice { <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp; &nbsp; public void before(Method method, Object[] objects, Object
object) <br>
throws Throwable { <br>
&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("method.getName() = "
+ method.getName()); <br>
&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("TestAdvice
testing..." ); <br>
&nbsp; &nbsp; } <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">} <o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">配置如下：<span lang="EN-US"> <br>
&nbsp;&lt;bean id="testAdvice" <br>
class="biz.pxzit.application.service.TestAdvice"/&gt; <br>
&nbsp;&lt;aop:config&gt; <br>
&nbsp; &nbsp; &nbsp; &lt;aop:advisor pointcut="execution(*
biz..*Mgr.save*(..))" <br>
advice-ref="testAdvice" order="1"/&gt; <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp; &nbsp; &nbsp; ...... <br>
&nbsp; &nbsp;&lt;/aop:config&gt; <o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">order</span><span style="font-size: 12pt; font-family: 宋体;">是可选的，指定执行的次序；上面的配置语意是，在执行<span lang="EN-US">biz</span>开头的<span lang="EN-US">package</span>下面任意以<span lang="EN-US">Mgr</span>结尾的<span lang="EN-US">manager</span>的<span lang="EN-US">save</span>开头的方法时候，执行<span lang="EN-US">testAdvice</span>，因为是<span lang="EN-US">MethodBeforeAdvice <br>
</span>所以在<span lang="EN-US">save</span>开头方法执行前执行；<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Aspect</span><span style="font-size: 12pt; font-family: 宋体;">方式：<span lang="EN-US"> <br>
public class TestAdvice2 &nbsp;{ <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp; &nbsp; public void goAfter(JoinPoint joinPoint) throws Throwable { <br>
&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("TestAdvice2.goAfter <br>
testing..."+joinPoint.getTarget()); <br>
&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("TestAdvice2.goAfter
testing..." ); <br>
&nbsp; &nbsp; } <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">} <o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">配置如下：<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp;&lt;bean id="testAdvice2" <br>
class="biz.pxzit.application.service.TestAdvice2"/&gt; <br>
&nbsp;&lt;aop:config&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;...... <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;aop:aspect
id="ddAspect" ref="testAdvice2"&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;aop:after
method="goAfter" <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; pointcut="execution(* biz..*Mgr.*(..))" <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ....... <br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/aop:aspect&gt; <o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&nbsp; &nbsp;&lt;/aop:config&gt; <br>
</span><span style="font-size: 12pt; font-family: 宋体;">注意<span lang="EN-US">TestAdvice2</span>的方法参数，这里用的是<span lang="EN-US">JoinPoint <br>
joinPoint</span>，还有很多细节，具体可以看文档；<span lang="EN-US"> <br>
</span>要使用<span lang="EN-US">&lt;aop:aspect &gt;</span>节点，还需<span lang="EN-US">asm.jar
<br>
</span>（<span lang="EN-US">3</span>个，在<span lang="EN-US">springframework</span>的<span lang="EN-US">lib</span>下有）否则会报<span lang="EN-US">noclassfound <br>
exception</span>；<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">注意我之前配置的<span lang="EN-US">pointcut</span>表达式是错的，正确的是<span lang="EN-US">execution(* <br>
biz..*Mgr.*(..))"</span>；<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
</span> <img src ="http://www.blogjava.net/bourn/aggbug/141543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 22:57 <a href="http://www.blogjava.net/bourn/articles/141543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>