﻿<?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-hot的学习笔记</title><link>http://www.blogjava.net/cjwang-21/</link><description>我是一只弱小的毛毛虫，想像有一天可以成为强壮的挖土机，
拥有挖掘梦想的神奇手套。。。</description><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 06:22:53 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 06:22:53 GMT</pubDate><ttl>60</ttl><item><title>iReport研究报告</title><link>http://www.blogjava.net/cjwang-21/archive/2009/08/18/291629.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Tue, 18 Aug 2009 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/08/18/291629.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/291629.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/08/18/291629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/291629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/291629.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开源报表工具现状<br>目前较为知名的开源报表工具有：<br>    1、 JasperReports    一个优秀的Java&nbsp;&nbsp;<a href='http://www.blogjava.net/cjwang-21/archive/2009/08/18/291629.html'>阅读全文</a><img src ="http://www.blogjava.net/cjwang-21/aggbug/291629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-08-18 14:04 <a href="http://www.blogjava.net/cjwang-21/archive/2009/08/18/291629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Reset Css</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/23/288098.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Thu, 23 Jul 2009 13:49:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/23/288098.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/288098.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/23/288098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/288098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/288098.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 快下班的时候，收到小头的关于Reset Css的一封邮件，看了一下才发现，哎呀！原来css还有这么玩的。<br />
2004年，Tantek被不同浏览器下默认样式的差异给搞烦了，于是写了一个undohtml.css，这也就诞生了世界上第一份reset.css。<br />
&nbsp;&nbsp;&nbsp; CSS Negotiation and a Sanity Saving Shortcut. * { margin: 0; padding: 0 } 的学名是Global White Space Reset. 从原文中可以看出这个方法刚问世时是非常火爆的，并且作者建议一定要先破后立，要将清扫差异和重置默认样式结合起来，这样才是正确的做法。<br />
&nbsp;&nbsp; 为何Global White Space Reset当初风光一时，如今却黯然销魂？* { margin: 0; padding: 0 }的成功之处在于，管你三七二十八，统统抹平，人人生而平等！然而其失败之处也正是因为其威力太大，虽然捣了蜂窝得了蜜，却惹来群蜂追尾，麻烦无限（因为被抹平的样式，你得再重新设置回来，比如input的padding等）。这就如西汉一代名将韩信哪，是成也萧何，败也萧何！<br />
&nbsp;&nbsp;&nbsp; 2007年，Eric Meyer的一篇文章Reset Styles, 重新唤起了一股reset热潮。下面是Eric Meyer的一个CSS Reset方案:<br />
&nbsp;&nbsp; <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: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">.&nbsp;html,&nbsp;body,&nbsp;div,&nbsp;span,&nbsp;applet,&nbsp;object,&nbsp;iframe,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">.&nbsp;h1,&nbsp;h2,&nbsp;h3,&nbsp;h4,&nbsp;h5,&nbsp;h6,&nbsp;p,&nbsp;blockquote,&nbsp;pre,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">.&nbsp;a,&nbsp;abbr,&nbsp;acronym,&nbsp;address,&nbsp;big,&nbsp;cite,&nbsp;code,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">.&nbsp;del,&nbsp;dfn,&nbsp;em,&nbsp;font,&nbsp;img,&nbsp;ins,&nbsp;kbd,&nbsp;q,&nbsp;s,&nbsp;samp,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">.&nbsp;small,&nbsp;strike,&nbsp;strong,&nbsp;sub,&nbsp;sup,&nbsp;tt,&nbsp;var,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">.&nbsp;b,&nbsp;u,&nbsp;i,&nbsp;center,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">7</span><span style="color: #000000;">.&nbsp;dl,&nbsp;dt,&nbsp;dd,&nbsp;ol,&nbsp;ul,&nbsp;li,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">8</span><span style="color: #000000;">.&nbsp;fieldset,&nbsp;form,&nbsp;label,&nbsp;legend,<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">9</span><span style="color: #000000;">.&nbsp;table,&nbsp;caption,&nbsp;tbody,&nbsp;tfoot,&nbsp;thead,&nbsp;tr,&nbsp;th,&nbsp;td&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">11</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">12</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">13</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outline:&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">14</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font</span><span style="color: #000000;">-</span><span style="color: #000000;">size:&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">%</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">15</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vertical</span><span style="color: #000000;">-</span><span style="color: #000000;">align:&nbsp;baseline;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">16</span><span style="color: #000000;">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;transparent;<br />
&nbsp;&nbsp;</span><span style="color: #000000;">17</span><span style="color: #000000;">.&nbsp;}</span></div>
&nbsp;&nbsp;&nbsp; 哎，真是收获良多啊！<br />
<br />
<img src ="http://www.blogjava.net/cjwang-21/aggbug/288098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-23 21:49 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/23/288098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring的aop用法个人使用总结</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/22/287925.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Wed, 22 Jul 2009 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/22/287925.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/287925.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/22/287925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/287925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/287925.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 前些日子西安项目中的任务日志，以及最近参与工作流动态表单开发中都使用到了spring的aop。所以，自己简单的进行了一下总结，也算是对前一段时间工作的一个总结吧。<br />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cwang%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
<p style="text-indent: 15.75pt;">&nbsp;AOP<span style="font-family: 宋体;">（</span><span>Aspect-Oriented
Programming</span><span style="font-family: 宋体;">，面向切面编程），可以说是</span>OOP<span style="font-family: 宋体;">（</span><span style="font-family: 宋体;">面向对象编程）的补充和完善。</span>OOP<span style="font-family: 宋体;">引入封装、继承和多态性等概念来建立一种对象层次结构，用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候，</span>OOP<span style="font-family: 宋体;">则显得无能为力。也就是说，</span>OOP<span style="font-family: 宋体;">允许你定义从上到下的关系，但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中，而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码，如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切（</span>cross-cutting<span style="font-family: 宋体;">）代码，在</span>OOP<span style="font-family: 宋体;">设计中，它导致了大量代码的重复，而不利于各个模块的重用。</span></p>
<p style="text-indent: 15.75pt;"><span style="font-family: 宋体;">&nbsp;而</span>AOP<span style="font-family: 宋体;">技术则恰恰相反，它利用一种称为&#8220;横切&#8221;的技术，剖解开封装的对象内部，并将那些影响了多个类的公共行为封装到一个可重用模块，并将其名为&#8220;</span>Aspect<span style="font-family: 宋体;">&#8221;，即方面。所谓&#8220;方面&#8221;，简单地说，就是将那些与业务无关，却为业务模块所共同调用的逻辑或责任封装起来，便于减少系统的重复代码，降低模块间的耦合度，并有利于未来的可操作性和可维护性。</span>AOP<span style="font-family: 宋体;">代表的是一个横向的关系，如果说&#8220;对象&#8221;是一个空心的圆柱体，其中封装的是对象的属性和行为；那么面向方面编程的方法，就仿佛一把利刃，将这些空心圆柱体剖开，以获得其内部的消息。而剖开的切面，也就是所谓的&#8220;方面&#8221;了。然后它又以巧夺天功的妙手将这些剖开的切面复原，不留痕迹。</span></p>
<p style="text-indent: 15.75pt;">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cwang%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
span.hilite1
{
font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
</p>
<p><span style="font-family: Calibri;">&nbsp;&nbsp;&nbsp; Spring</span><span style="font-family: 宋体;">支持四种拦截类型：目标方法调用前（</span>before<span style="font-family: 宋体;">），目标方法调用后（</span>after<span style="font-family: 宋体;">），目标方法调用前后（</span>around<span style="font-family: 宋体;">），以及目标方法抛出异常（</span>throw<span style="font-family: 宋体;">）。</span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 前置拦截的类必须实现</span>MethodBeforeAdvice<span style="font-family: 宋体;">接口，实现其中的</span>before<span style="font-family: 宋体;">方法。</span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 后置拦截的类必须实现</span>AfterReturningAdvice<span style="font-family: 宋体;">接口，实现其中的</span>afterReturning<span style="font-family: 宋体;">方法。</span></p>
<p><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 环绕拦截的类必须实现</span>MethodInterceptor<span style="font-family: 宋体;">接口，实现其中的</span>invoke<span style="font-family: 宋体;">方法。环绕拦截是唯一可以控制目标方法是否被真正调用的拦截类型，也可以控制返回对象。而前置拦截或后置拦截不能控制，它们不能印象目标方法的调用和返回。</span><span><br />
</span><span style="font-family: 宋体;">但是以上的拦截的问题在于，不能对于特定方法进行拦截，而只能对某个类的全部方法作拦截。所以下面引入了两个新概念：</span>&#8220;<span style="font-family: 宋体;">切入点</span>&#8221;<span style="font-family: 宋体;">和</span>&#8220;<span style="font-family: 宋体;">引入通知</span>&#8221;<span style="font-family: 宋体;">。</span></p>
<p style="text-indent: 21pt;">&#8221;<span style="font-family: 宋体;">切入点</span>&#8220;<span style="font-family: 宋体;">的定义相当于更加细化地规定了哪些方法被哪些拦截器所拦截，而并非所有的方法都被所有的拦截器所拦截。在</span>ProxyFactoryBean<span style="font-family: 宋体;">的属性中，</span>interceptorNames<span style="font-family: 宋体;">属性的对象也由拦截（</span>Advice<span style="font-family: 宋体;">）变成了引入通知（</span>Advisor<span style="font-family: 宋体;">），正是在</span>Advisor<span style="font-family: 宋体;">中详细定义了切入点（</span>PointCut<span style="font-family: 宋体;">）和拦截（</span>Advice<span style="font-family: 宋体;">）的对应关系，比如常见的基于名字的切入点匹配（</span>NameMatchMethodPointcutAdvisor<span style="font-family: 宋体;">类）和基于正则表达式的切入点匹配（</span>RegExpPointcutAdvisor<span style="font-family: 宋体;">类）。这些切入点都属于</span>&#8221;<span style="font-family: 宋体;">静态切入点</span>&#8220;<span style="font-family: 宋体;">，因为他们只在代理创建的时候被创建一次，而不是每次运行都创建。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">下面是spring的配置文件 当然aop的配置方式有许多种，这只是其中一种<br />
</span></p>
<p>&nbsp;</p>
<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: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;获取相应的instance对象&nbsp;并且不被aop拦截&nbsp;</span><span style="color: #000000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceService4Log</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;parent</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">transactionProxy</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">target</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">com.oa.task.service.impl.OaTaskInstanceServiceImpl</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceDao</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ref&nbsp;local</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceDao</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;instance日志所需DAO&nbsp;</span><span style="color: #000000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogDao</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">com.oa.task.dao.OaTaskInstanceLogDao</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sessionFactory</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;ref</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sessionFactory</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;instance日志所需Service&nbsp; 此接口为 日志的业务操作接口</span><span style="color: #000000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogService</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;parent</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">transactionProxy</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">target</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">com.oa.task.service.impl.OaTaskInstanceLogServiceImpl</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogDao</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ref&nbsp;local</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogDao</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sysOperDao</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ref&nbsp;bean</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sysOperDao</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ibatisBase</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ref&nbsp;bean</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ibatisBase</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;instance日志AOP拦截类&nbsp;</span><span style="color: #000000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogOper</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">com.oa.task.log.OaTaskInstanceLogOper</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogService</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ref&nbsp;local</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogService</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceService</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ref&nbsp;local</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceService4Log</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;instance日志AOP配置绑定&nbsp;</span><span style="color: #000000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">bean&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">oaTaskInstanceLogAutoProxy</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">beanNames</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">list</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">value</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">oaTaskInstanceService</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">value</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp; //拦截的业务接口 </span><span style="color: #000000;">oaTaskInstanceService内所有方法都进行拦截</span><br />
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">list</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">property&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">interceptorNames</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">list</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">value</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">oaTaskInstanceLogOper</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">value</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp; //拦截器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">list</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">property</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">bean</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span></div>
&nbsp;&nbsp;
下面是 拦截器<span style="color: #000000;">oaTaskInstanceLogOper类，采用的是环绕拦截的方式。<br />
</span>
<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: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;OaTaskInstanceLogOper&nbsp;&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;MethodInterceptor{<br />
</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp; /**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;当更新动作发生时的记录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Object&nbsp;invoke(MethodInvocation&nbsp;invocation)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Throwable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;method&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;invocation.getMethod().getName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(MODIFY_INSTANCE.equals(method)){</span><span style="color: #008000;">//</span><span style="color: #008000;">修改日志</span><span style="color: #008000;">（业务逻辑 判断方法）<br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">......//</span><span style="color: #008000;">业务操作，进行日志的记录</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result</span><span style="color: #000000;">=</span><span style="color: #000000;">invocation.proceed();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{</span><span style="color: #008000;">//</span><span style="color: #008000;">不做任何日志</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result</span><span style="color: #000000;">=</span><span style="color: #000000;">invocation.proceed();//调用原来的方法 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
}<br />
</span></div>
<br />
<p style="text-indent: 15.75pt;">
</p>
<br />
<img src ="http://www.blogjava.net/cjwang-21/aggbug/287925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-22 22:39 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/22/287925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人对flex框架的看法！</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287779.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Tue, 21 Jul 2009 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287779.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/287779.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/287779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/287779.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 前一段时间，曾经做过一点flex的开发工作，最初使用的是<span style="color: red;">cairngorm</span>，后来研究了一下 <span style="color: red;">pureMvc</span>，并进行了部分改造。<br />
由于只是初步涉足flex领域，所以只能提出一点自己的看法，并不具有说服力。<br />
&nbsp; &nbsp; <span style="color: red;">cairngorm</span> 前端的控件监听用户的行为，只是监听，并不会做任何反应。控件监听以后调用Commands来做相应的事情，Command做了所有工作。把业务逻辑委托到 Bussiness Delegates中，Command调用Business Delegate 后，Business Delegate 通过Service Locator来找到相应的RPC services，然后执行实现从服务器端取数据。<br />
&nbsp;&nbsp;&nbsp; 在Model Locator 保存状态并且能使Model检测到View的变化。这样一来用户操作就能直接影响Model。 <br />
&nbsp;&nbsp;&nbsp; 它的体系主要包含下面几部分（具体用法就不做分析了）：<br />
<p>&nbsp;&nbsp;&nbsp; 1. Business(业务逻辑部分) </p>
<p>&nbsp;&nbsp;&nbsp; 2. Command(命令部分) </p>
<p>&nbsp;&nbsp;&nbsp; 3. Control(控制部分) </p>
<p>&nbsp;&nbsp;&nbsp; 4. Model(数据模型) </p>
<p>&nbsp;&nbsp;&nbsp; 5. View(界面视图) </p>
<p>&nbsp;&nbsp;&nbsp; 6. VO(ValueObject) </p>
<br />
&nbsp;&nbsp;&nbsp; 使用<span style="color: red;">cairngorm</span> 对于整个事件的流程会比较的清晰。个人认为它的整个流程很符合人类的思维方式。但是在实际开发中却感觉 每当添加一个事件的时候，就要去写event command delegate，事件一多就会感觉重复写这些东西很烦。这时候就开始考虑更换一下框架，于是在头的指导下去看了<span style="color: red;">pureMvc</span>框架。<br />
&nbsp;&nbsp;&nbsp; 学了两天后，就深深喜欢上<span style="color: red;">pureMvc</span>了，哈哈！<br />
&nbsp;&nbsp;&nbsp; 顾名思义。pureMvc 就是纯的mvc框架，许多人都错误地把PureMVC误认为它是一个Flash的MVC框架或者是Flex的MVC框架。既然它是一个纯框架，那么，它就不仅仅是支持某种特定
的语言，它的设计是与语言无关的。它支持了好多种常用的编程语言。<br />
&nbsp;&nbsp;&nbsp; <span style="color: red;">pureMvc</span>的层次结构比<span style="color: red;">cairngorm</span>清晰的多，严格的MVC三层结构。 <br />
&nbsp;&nbsp;&nbsp; 1、Model保存对Proxy对象的引用，Proxy负责操作数据模型，与远程服务通信存取数据。
<p>&nbsp;&nbsp;&nbsp; 2、View保存对Mediator对象的引用。由Mediator对象来操作具体的视图组件（View
Component，例如Flex的DataGrid组件），包括：添加事件监听器，发送或接收Notification ，直接改变视图组件的状态。</p>
<p>&nbsp;&nbsp;&nbsp; 3、Controller保存所有Command的映射。Command可以获取Proxy对象并与之交互，通过发送Notification来执行其他的Command。</p>
<p>&nbsp;&nbsp;&nbsp; <span style="color: red;">pureMvc</span>采用了&#8220;观察者模式&#8221;（被观察者是不关心观察者是谁的），通过消息机制，来维持command 与 mediator的关系，将它们之间的耦合度降到最低。notification机制也是我最喜欢<span style="color: red;">pureMvc</span>的一个方面。</p>
<br />
<br />
<img src ="http://www.blogjava.net/cjwang-21/aggbug/287779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-21 22:03 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/21/287779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决文件下载时文件名乱码问题</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287677.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Tue, 21 Jul 2009 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287677.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/287677.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/287677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/287677.html</trackback:ping><description><![CDATA[&nbsp;在西安做项目时 遇到的一个文件下载 文件名乱码的问题&nbsp;，下面是解决方案：<br />
<br />
&nbsp;//输出文件流<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;response.setContentType("application/octet-stream;charset=ISO8859-1");<br />
&nbsp;&nbsp;&nbsp;String agent = request.getHeader("USER-AGENT"); <br />
&nbsp;&nbsp;&nbsp;if (null != agent &amp;&amp; -1 != agent.indexOf("MSIE")){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Content-Disposition","attachment;" + "filename=" + URLEncoder.encode( file.getName() , "UTF8")); <br />
&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;else if (null != agent &amp;&amp; -1 != agent.indexOf("Mozilla")){&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Content-Disposition","attachment;" + "filename=" + new String(file.getName().getBytes("UTF-8"),"ISO8859-1")); <br />
&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setHeader("Content-Disposition","attachment;filename=" + file.getName() ); <br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;java.io.FileInputStream fr = new java.io.FileInputStream(fpath); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; java.io.InputStreamReader is = new java.io.InputStreamReader(fr,"ISO8859-1");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; java.io.BufferedReader br=new java.io.BufferedReader(is);<br />
&nbsp;&nbsp;&nbsp;out = response.getOutputStream();<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;int i = 0;<br />
&nbsp;&nbsp;&nbsp;while((i= br.read()) != -1){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(i);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/cjwang-21/aggbug/287677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-21 16:59 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/21/287677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2.0几种标签用法</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287642.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Tue, 21 Jul 2009 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287642.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/287642.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/287642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/287642.html</trackback:ping><description><![CDATA[<p>设置变量<br />
&lt;s:set name="maxRowIndex" value="%{formInfo.maxRowIndex}"/&gt;</p>
<p>for 循环<br />
&lt;s:bean name="org.apache.struts2.util.Counter" id="counter"&gt;<br />
&nbsp; &lt;s:param name="first" value="0" /&gt;<br />
&nbsp; &lt;s:param name="last" value="#maxRowIndex" /&gt;<br />
&nbsp;&nbsp;&lt;s:iterator&gt;<br />
&nbsp;&nbsp;&lt;/s:iterator&gt;<br />
&lt;/s:bean&gt;</p>
<p>迭代&lt;s:iterator&gt;用于将List、Map、ArrayList等集合进行循环遍历<br />
&lt;s:iterator value="#rowList"&gt;<br />
&lt;/s:iterator&gt;</p>
<p>if语句<br />
&lt;s:if test="#rowList==null"&gt;<br />
&lt;/s:if&gt;</p>
<p>生成html代码<br />
&lt;s:property value="%{formInfo.jsCode}" escape="false"/&gt;<br />
escape="false" 不进行转义</p>
<img src ="http://www.blogjava.net/cjwang-21/aggbug/287642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-21 14:21 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/21/287642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>List按内部存储的object的属性排序</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287636.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Tue, 21 Jul 2009 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287636.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/287636.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287636.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/287636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/287636.html</trackback:ping><description><![CDATA[private List sortFieldListByRowIndex(List fieldList){<br />
&nbsp;&nbsp;Comparator&lt;DynamicFormField&gt; comparator = new Comparator&lt;DynamicFormField&gt;(){<br />
&nbsp;&nbsp;&nbsp;public int compare(DynamicFormField f1, DynamicFormField f2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(f1.getRowIndex()!=f2.getRowIndex()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return f1.getRowIndex()-f2.getRowIndex();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(f1.getColIndex()!=f2.getColIndex()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return f1.getColIndex()-f2.getColIndex();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int) (f1.getId() - f2.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;};<br />
&nbsp;&nbsp;Collections.sort(fieldList, comparator);<br />
&nbsp;&nbsp;return fieldList;<br />
&nbsp;}<br />
这是工作中 使用过的一个例子。<br />
对fieldList中DynamicFormField对象 先按其rowIndex排序后按colIndex排序
 <img src ="http://www.blogjava.net/cjwang-21/aggbug/287636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-21 14:03 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/21/287636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新的开始！</title><link>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287631.html</link><dc:creator>hot</dc:creator><author>hot</author><pubDate>Tue, 21 Jul 2009 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287631.html</guid><wfw:comment>http://www.blogjava.net/cjwang-21/comments/287631.html</wfw:comment><comments>http://www.blogjava.net/cjwang-21/archive/2009/07/21/287631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cjwang-21/comments/commentRss/287631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cjwang-21/services/trackbacks/287631.html</trackback:ping><description><![CDATA[<p>新手上路啊！希望以后可以跟大家多交流！</p>
<img src ="http://www.blogjava.net/cjwang-21/aggbug/287631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cjwang-21/" target="_blank">hot</a> 2009-07-21 13:55 <a href="http://www.blogjava.net/cjwang-21/archive/2009/07/21/287631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>