﻿<?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</title><link>http://www.blogjava.net/qiubite520/category/52217.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 14 Mar 2015 13:54:33 GMT</lastBuildDate><pubDate>Sat, 14 Mar 2015 13:54:33 GMT</pubDate><ttl>60</ttl><item><title> Spring配置数据源的三种方式 （dbcp,c3p0,jndi）</title><link>http://www.blogjava.net/qiubite520/articles/423460.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Sat, 14 Mar 2015 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/423460.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/423460.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/423460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/423460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/423460.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1,使用org.springframework.jdbc.datasource.DriverManagerDataSource&nbsp;&nbsp;&nbsp;说明：DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用。&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id="dataSource"&nbsp;cla...&nbsp;&nbsp;<a href='http://www.blogjava.net/qiubite520/articles/423460.html'>阅读全文</a><img src ="http://www.blogjava.net/qiubite520/aggbug/423460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2015-03-14 17:07 <a href="http://www.blogjava.net/qiubite520/articles/423460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse快捷键大全</title><link>http://www.blogjava.net/qiubite520/articles/412925.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Fri, 25 Apr 2014 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/412925.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/412925.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/412925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/412925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/412925.html</trackback:ping><description><![CDATA[<div style="widows: 2; text-transform: none; text-indent: 0px; font: bold 14px/20px georgia, verdana, Arial, helvetica, sans-seriff; white-space: normal; orphans: 2; margin-bottom: 10px; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="postTitle">Eclipse快捷键大全</div>
<div style="widows: 2; text-transform: none; text-indent: 0px; font: 13px/20px georgia, verdana, Arial, helvetica, sans-seriff; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="postbody"><font size="2">Ctrl+1&nbsp;快速修复(最经典的快捷键,就不用多说了)<br />Ctrl+D:&nbsp;删除当前行&nbsp;<br />Ctrl+Alt+&#8595;&nbsp;复制当前行到下一行(复制增加)<br />Ctrl+Alt+&#8593;&nbsp;复制当前行到上一行(复制增加)<br />Alt+&#8595;&nbsp;当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br />Alt+&#8593;&nbsp;当前行和上面一行交互位置(同上)<br />Alt+&#8592;&nbsp;前一个编辑的页面<br />Alt+&#8594;&nbsp;下一个编辑的页面(当然是针对上面那条来说了)<br />Alt+Enter&nbsp;显示当前选择资源(工程,or&nbsp;文件&nbsp;or文件)的属性<br />Shift+Enter&nbsp;在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br />Shift+Ctrl+Enter&nbsp;在当前行插入空行(原理同上条)<br />Ctrl+Q&nbsp;定位到最后编辑的地方<br />Ctrl+L&nbsp;定位在某行&nbsp;(对于程序超过100的人就有福音了)<br />Ctrl+M&nbsp;最大化当前的Edit或View&nbsp;(再按则反之)<br />Ctrl+/&nbsp;注释当前行,再按则取消注释<br />Ctrl+O&nbsp;快速显示&nbsp;OutLine<br />Ctrl+T&nbsp;快速显示当前类的继承结构<br />Ctrl+W&nbsp;关闭当前Editer<br />Ctrl+K&nbsp;参照选中的Word快速定位到下一个<br />Ctrl+E&nbsp;快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)<br />Ctrl+/(小键盘)&nbsp;折叠当前类中的所有代码<br />Ctrl+&#215;(小键盘)&nbsp;展开当前类中的所有代码<br />Ctrl+Space&nbsp;代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)<br />Ctrl+Shift+E&nbsp;显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)<br />Ctrl+J&nbsp;正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes&nbsp;line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)<br />Ctrl+Shift+J&nbsp;反向增量查找(和上条相同,只不过是从后往前查)<br />Ctrl+Shift+F4&nbsp;关闭所有打开的Editer<br />Ctrl+Shift+X&nbsp;把当前选中的文本全部变味小写<br />Ctrl+Shift+Y&nbsp;把当前选中的文本全部变为小写<br />Ctrl+Shift+F&nbsp;格式化当前代码<br />Ctrl+Shift+P&nbsp;定位到对于的匹配符(譬如{})&nbsp;(从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)<br /><br />下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)<br />Alt+Shift+R&nbsp;重命名&nbsp;(是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)<br />Alt+Shift+M&nbsp;抽取方法&nbsp;(这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)<br />Alt+Shift+C&nbsp;修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)<br />Alt+Shift+L&nbsp;抽取本地变量(&nbsp;可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)<br />Alt+Shift+F&nbsp;把Class中的local变量变为field变量&nbsp;(比较实用的功能)<br />Alt+Shift+I&nbsp;合并变量(可能这样说有点不妥Inline)<br />Alt+Shift+V&nbsp;移动函数和变量(不怎么常用)<br />Alt+Shift+Z&nbsp;重构的后悔药(Undo)<br /><br />编辑<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;查找并替换&nbsp;Ctrl+F&nbsp;<br />文本编辑器&nbsp;查找上一个&nbsp;Ctrl+Shift+K&nbsp;<br />文本编辑器&nbsp;查找下一个&nbsp;Ctrl+K&nbsp;<br />全局&nbsp;撤销&nbsp;Ctrl+Z&nbsp;<br />全局&nbsp;复制&nbsp;Ctrl+C&nbsp;<br />全局&nbsp;恢复上一个选择&nbsp;Alt+Shift+&#8595;&nbsp;<br />全局&nbsp;剪切&nbsp;Ctrl+X&nbsp;<br />全局&nbsp;快速修正&nbsp;Ctrl1+1&nbsp;<br />全局&nbsp;内容辅助&nbsp;Alt+/&nbsp;<br />全局&nbsp;全部选中&nbsp;Ctrl+A&nbsp;<br />全局&nbsp;删除&nbsp;Delete&nbsp;<br />全局&nbsp;上下文信息&nbsp;Alt+？<br />Alt+Shift+?<br />Ctrl+Shift+Space&nbsp;<br />Java编辑器&nbsp;显示工具提示描述&nbsp;F2&nbsp;<br />Java编辑器&nbsp;选择封装元素&nbsp;Alt+Shift+&#8593;&nbsp;<br />Java编辑器&nbsp;选择上一个元素&nbsp;Alt+Shift+&#8592;&nbsp;<br />Java编辑器&nbsp;选择下一个元素&nbsp;Alt+Shift+&#8594;&nbsp;<br />文本编辑器&nbsp;增量查找&nbsp;Ctrl+J&nbsp;<br />文本编辑器&nbsp;增量逆向查找&nbsp;Ctrl+Shift+J&nbsp;<br />全局&nbsp;粘贴&nbsp;Ctrl+V&nbsp;<br />全局&nbsp;重做&nbsp;Ctrl+Y&nbsp;<br /><br />&nbsp;<br />查看<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;放大&nbsp;Ctrl+=&nbsp;<br />全局&nbsp;缩小&nbsp;Ctrl+-&nbsp;<br /><br />&nbsp;<br />窗口<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;激活编辑器&nbsp;F12&nbsp;<br />全局&nbsp;切换编辑器&nbsp;Ctrl+Shift+W&nbsp;<br />全局&nbsp;上一个编辑器&nbsp;Ctrl+Shift+F6&nbsp;<br />全局&nbsp;上一个视图&nbsp;Ctrl+Shift+F7&nbsp;<br />全局&nbsp;上一个透视图&nbsp;Ctrl+Shift+F8&nbsp;<br />全局&nbsp;下一个编辑器&nbsp;Ctrl+F6&nbsp;<br />全局&nbsp;下一个视图&nbsp;Ctrl+F7&nbsp;<br />全局&nbsp;下一个透视图&nbsp;Ctrl+F8&nbsp;<br />文本编辑器&nbsp;显示标尺上下文菜单&nbsp;Ctrl+W&nbsp;<br />全局&nbsp;显示视图菜单&nbsp;Ctrl+F10&nbsp;<br />全局&nbsp;显示系统菜单&nbsp;Alt+-&nbsp;<br /><br />&nbsp;<br />导航<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />Java编辑器&nbsp;打开结构&nbsp;Ctrl+F3&nbsp;<br />全局&nbsp;打开类型&nbsp;Ctrl+Shift+T&nbsp;<br />全局&nbsp;打开类型层次结构&nbsp;F4&nbsp;<br />全局&nbsp;打开声明&nbsp;F3&nbsp;<br />全局&nbsp;打开外部javadoc&nbsp;Shift+F2&nbsp;<br />全局&nbsp;打开资源&nbsp;Ctrl+Shift+R&nbsp;<br />全局&nbsp;后退历史记录&nbsp;Alt+&#8592;&nbsp;<br />全局&nbsp;前进历史记录&nbsp;Alt+&#8594;&nbsp;<br />全局&nbsp;上一个&nbsp;Ctrl+,&nbsp;<br />全局&nbsp;下一个&nbsp;Ctrl+.&nbsp;<br />Java编辑器&nbsp;显示大纲&nbsp;Ctrl+O&nbsp;<br />全局&nbsp;在层次结构中打开类型&nbsp;Ctrl+Shift+H&nbsp;<br />全局&nbsp;转至匹配的括号&nbsp;Ctrl+Shift+P&nbsp;<br />全局&nbsp;转至上一个编辑位置&nbsp;Ctrl+Q&nbsp;<br />Java编辑器&nbsp;转至上一个成员&nbsp;Ctrl+Shift+&#8593;&nbsp;<br />Java编辑器&nbsp;转至下一个成员&nbsp;Ctrl+Shift+&#8595;&nbsp;<br />文本编辑器&nbsp;转至行&nbsp;Ctrl+L&nbsp;<br /><br />&nbsp;<br />搜索<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;出现在文件中&nbsp;Ctrl+Shift+U&nbsp;<br />全局&nbsp;打开搜索对话框&nbsp;Ctrl+H&nbsp;<br />全局&nbsp;工作区中的声明&nbsp;Ctrl+G&nbsp;<br />全局&nbsp;工作区中的引用&nbsp;Ctrl+Shift+G&nbsp;<br /><br />&nbsp;<br />文本编辑<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />文本编辑器&nbsp;改写切换&nbsp;Insert&nbsp;<br />文本编辑器&nbsp;上滚行&nbsp;Ctrl+&#8593;&nbsp;<br />文本编辑器&nbsp;下滚行&nbsp;Ctrl+&#8595;&nbsp;<br /><br />&nbsp;<br />文件<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;保存&nbsp;Ctrl+X&nbsp;<br />Ctrl+S&nbsp;<br />全局&nbsp;打印&nbsp;Ctrl+P&nbsp;<br />全局&nbsp;关闭&nbsp;Ctrl+F4&nbsp;<br />全局&nbsp;全部保存&nbsp;Ctrl+Shift+S&nbsp;<br />全局&nbsp;全部关闭&nbsp;Ctrl+Shift+F4&nbsp;<br />全局&nbsp;属性&nbsp;Alt+Enter&nbsp;<br />全局&nbsp;新建&nbsp;Ctrl+N&nbsp;<br /><br />&nbsp;<br />项目<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;全部构建&nbsp;Ctrl+B&nbsp;<br /><br />&nbsp;<br />源代码<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />Java编辑器&nbsp;格式化&nbsp;Ctrl+Shift+F&nbsp;<br />Java编辑器&nbsp;取消注释&nbsp;Ctrl+\&nbsp;<br />Java编辑器&nbsp;注释&nbsp;Ctrl+/&nbsp;<br />Java编辑器&nbsp;添加导入&nbsp;Ctrl+Shift+M&nbsp;<br />Java编辑器&nbsp;组织导入&nbsp;Ctrl+Shift+O&nbsp;<br />Java编辑器&nbsp;使用try/catch块来包围&nbsp;未设置，太常用了，所以在这里列出,建议自己设置。<br />也可以使用Ctrl+1自动修正。&nbsp;<br /><br />&nbsp;<br />运行<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;单步返回&nbsp;F7&nbsp;<br />全局&nbsp;单步跳过&nbsp;F6&nbsp;<br />全局&nbsp;单步跳入&nbsp;F5&nbsp;<br />全局&nbsp;单步跳入选择&nbsp;Ctrl+F5&nbsp;<br />全局&nbsp;调试上次启动&nbsp;F11&nbsp;<br />全局&nbsp;继续&nbsp;F8&nbsp;<br />全局&nbsp;使用过滤器单步执行&nbsp;Shift+F5&nbsp;<br />全局&nbsp;添加/去除断点&nbsp;Ctrl+Shift+B&nbsp;<br />全局&nbsp;显示&nbsp;Ctrl+D&nbsp;<br />全局&nbsp;运行上次启动&nbsp;Ctrl+F11&nbsp;<br />全局&nbsp;运行至行&nbsp;Ctrl+R&nbsp;<br />全局&nbsp;执行&nbsp;Ctrl+U&nbsp;<br /><br />&nbsp;<br />重构<br />作用域&nbsp;功能&nbsp;快捷键&nbsp;<br />全局&nbsp;撤销重构&nbsp;Alt+Shift+Z&nbsp;<br />全局&nbsp;抽取方法&nbsp;Alt+Shift+M&nbsp;<br />全局&nbsp;抽取局部变量&nbsp;Alt+Shift+L&nbsp;<br />全局&nbsp;内联&nbsp;Alt+Shift+I&nbsp;<br />全局&nbsp;移动&nbsp;Alt+Shift+V&nbsp;<br />全局&nbsp;重命名&nbsp;Alt+Shift+R&nbsp;<br />全局&nbsp;重做&nbsp;Alt+Shift+Y</font></div><img src ="http://www.blogjava.net/qiubite520/aggbug/412925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2014-04-25 11:01 <a href="http://www.blogjava.net/qiubite520/articles/412925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用SWT开发WEB应用</title><link>http://www.blogjava.net/qiubite520/articles/412884.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Thu, 24 Apr 2014 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/412884.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/412884.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/412884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/412884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/412884.html</trackback:ping><description><![CDATA[<div style="background-image: none; border-bottom: rgb(229,229,229) 1px solid; padding-bottom: 0px; border-right-width: 0px; widows: 2; text-transform: none; background-color: rgb(249,249,249) !important; text-indent: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; display: block; font: medium/19px Arial, sans-serif; white-space: normal; orphans: 2; border-top-width: 0px; letter-spacing: normal; color: rgb(0,0,0); clear: both; vertical-align: baseline; border-left-width: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" id="ibm-leadspace-head">
<div style="border-bottom: 0px; position: relative; border-left: 0px; padding-bottom: 0px; margin: 0px auto; outline-style: none; outline-color: invert; min-height: 0px; padding-left: 0px; outline-width: 0px; width: 940px; padding-right: 0px; font-family: Arial, sans-serif; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="ibm-leadspace-body">
<h1 style="border-bottom: 0px; border-left: 0px; padding-bottom: 10px !important; line-height: 1em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px !important; outline-width: 0px; width: 920px !important; padding-right: 10px !important; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; clear: both; font-size: 2em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 5px; text-shadow: rgb(255, 255, 255) 0px 1px 0px">使用SWT开发WEB应用</h1></div>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 20px; margin: 0px auto; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 940px; padding-right: 0px; font-family: Arial, sans-serif; clear: both; vertical-align: baseline; overflow: hidden; border-top: 0px; border-right: 0px; padding-top: 0px" id="dw-summary-area" class="dw-summary-columns">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px 20px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 620px; padding-right: 0px; font-family: Arial, sans-serif; float: left; clear: none; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-col-6-4">
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 10px; line-height: 1.3em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 620px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(51,51,51); font-size: 0.95em; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px">Eclipse SWT（标准部件工具包）发展迅速，以其良好的性能和漂亮的外观，已逐渐成为JAVA桌面应用开发的首选控件包。一直以来SWT都是用来开发桌面应用的，那这个优秀的工具包能否直接用于开发WEB应用呢？如今SmartSWT技术可以让这个想法成为现实，这对SWT来说，无疑又多了一个用武之地。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 10px; line-height: 1.3em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 620px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(51,51,51); font-size: 0.95em; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-no-print ibm-ind-link"><span style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: -2px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="nCmts"></span></p></div></div></div>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 10px; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 20px auto; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 980px; padding-right: 0px; font: medium/19px Arial, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); vertical-align: baseline; border-top: 0px; border-right: 0px; word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" id="ibm-pcon">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 980px; padding-right: 0px; font-family: Arial, sans-serif; float: left; font-size: 0.8em; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="ibm-content">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(255,255,255); margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="ibm-content-body">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; width: 980px; padding-right: 0px; font-family: Arial, sans-serif; float: left; clear: left; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="ibm-content-main">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 10px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 10px; outline-width: 0px; width: 960px; padding-right: 10px; font-family: Arial, sans-serif; clear: both; vertical-align: baseline; overflow: hidden; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-columns">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; min-height: 1px; padding-left: 10px; outline-width: 0px; width: 940px; padding-right: 10px; font-family: Arial, sans-serif; float: none; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-col-1-1">
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N1002D">SmartSWT简介</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">为了提高传统WEB应用的界面表现能力，RIA技术应时而生，各种RIA平台通过各种手段来提高丰富的图形界面。如Bindows，它使用动态HTML技术模拟Windows控件，还有Flex，直接使用Flash做为WEB应用的表现层，以弥补DHTML技术的不足。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">而SmartSWT则是基于SWT的RIA发布平台。它可以将普通的SWT的应用直接发布成为一个可通过客户端浏览器访问的WEB应用，这样就使通过SWT直接开发 富UI的WEB应用成为了现实。不仅如此，基于SWT扩展的许多扩展包也大都可以直接使用，如JFace、GEF等。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">SmartSWT和SmartClient不一样，它并不是将SWT应用程序下载到客户端来运行，而是和B/S模式的WEB应用一样，整个应用程序是运行在服务端的，只是运行过程中将图形界面实时显示于客户端的浏览器中，并将客户端的操作事件自动实时返回服务端，触发服务端原SWT应用的事件处理代码进行处理。服务端的SWT应用所进行的数据库操作和文件操作都是相对于服务器端进行的，而不像C/S应用那样，需要客户端自己将数据按自定义的通讯协议传回服务端再进行处理。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">SmartSWT底层的通讯是加密而且高效的，在内网的客户端打开服务端的SWT应用，和原来直接在本机使用相比相差不多。相当于将您机器的CPU降一档后运行应用程序的感觉。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">SmartSWT目前测试版本是3.1，表示支持SWT3.1的兼容应用程序。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">下图是一个SWT应用（SWT Control Example）在SmartSWT平台部署后，客户端通过IE浏览器访问的效果：</p>
<h5 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N1003F"><img style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" border="0" alt="" src="http://www.ibm.com/developerworks/cn/java/j-hlr/1.jpg" width="655" /> </h5>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px">&nbsp;</p>
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N1004B">安装运行</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">SmartSWT的测试版仅支持Windows系统，根据其用户手册的说明，它的服务端正式版将支持Linux、Unix等系统。SmartSWT安装运行非常简单，从www.smartswt.com下载SmartSWT31压缩包并解压，在解压目录下有三个子目录SmartSWTClient、SmartSWTServer和WEB。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">1. 打开SmartSWTClient目录，运行Setup.exe安装客户端，该程序将在客户端安装一个定制的小型JAVA虚拟机。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">2. 打开SmartSWTServer目录，运行Startup.bat，将运行SmartSWT服务端，SmartSWT使用自带的JAVA虚拟机，所以您不用预先准备它。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">3. 如果您的客户端和服务端都在同一台机器，则直接进入WEB子目录，用IE打开index.htm文件，大约15秒钟左右即可在IE浏览器中启动SmartSWT桌面，您这时可以通过Start菜单，启动内置的DEMO程序体验一番。</p>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(204,204,204); margin: 10px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; height: 1px; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-alternate-rule"></div>
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N10058">开发SmartSWT应用</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">开发SmartSWT应用基本上和开发普通的SWT应用相同。您可以使用Eclipse的SWT可视化插件来帮助创建一个SWT应用程序，比较好的有Designer及Eclipse的VisualEditor等。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">用于部署到SmartSWT服务器的SWT应用在开发时有些小的限制，幸好这些通常都只是举手之劳：</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">1. Display的获取必须统一使用Display display = Display.getDefault()方法，不能使用new Deisplay()创建，SmartSWT目前尚不支持多Display的应用，对大多数应用来说这不是问题;</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">2. 创建的Shell最好必须调用shell.setSize()对其尺寸进行初始化，否则在SmartSWT将默认呈最小化状态;</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">3. 尽量不要使用非公开的API，因为有少量非公开API，可能SmartSWT并没有实现它;</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">4. 尽量不要使用其它JNI技术和ActiveX控件，不要使用SWING和AWT等非基于SWT的控件；</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">5. 避免初始化时一次创建几十上百个控件，这样会造成启动时间较长，应在需要显示时创建控件。</p>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(204,204,204); margin: 10px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; height: 1px; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-alternate-rule"></div>
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N1006B">部署SmartSWT应用</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">SmartSWT的部署一样很简单，只需将调试通过的SWT程序的类文件，按包名目录结构原封不动拷贝至SmartSWTServer的swtapps目录，然后在SmartSWTServer.xml文件中按以下格式注册一下，最后重启SmartSWTServer，你就可以通过客户端浏览器启动SmartSWT桌面，在Start－&gt;Programs菜单里启动它：</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">　</p>
<h5 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N10076">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="codesection"><pre style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 5px !important; background-color: rgb(247,247,247) !important; margin: 0px 0px 6px; outline-style: none; outline-color: invert; padding-left: 3px !important; outline-width: 0px; width: 780px; padding-right: 10px !important; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; color: rgb(0,0,0); clear: right; font-size: 11px; vertical-align: baseline; overflow: auto; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 5px !important" class="displaycode">&lt;!-- Configuration of each SWT Application
  name: the name of the SWT Application
  mainClass: the main class to start the SWT Application
  startup: will it start just after the smartswt desktop started(haven't supported)
  description: the description of the SWT Application
--&gt;
&lt;Application name="ControlExample"
mainClass="org.eclipse.swt.examples.controlexample.ControlExample"&gt;
    &lt;startup&gt;false&lt;/startup&gt;
    &lt;description&gt;ControlExample Application&lt;/description&gt;
&lt;/Application&gt;</pre></div>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(204,204,204); margin: 10px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; height: 1px; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-alternate-rule"></div></h5>
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N1007B">SmartSWT: RIA平台的强有力竞争者</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">SmartSWT同其它RIA平台比较有一些独特的优势。首先它是基于SWT的RIA平台，依托强大的Eclipse阵营，有许多扩展技术可用，如JFace、GEF、EMF等，像UML设计器、报表、动画这样的复杂图形应用都可以通过SWT实现后，发布到SmartSWT，从而在WEB上很轻松地使用这些桌面应用独有的表现技术。还有OpenGL、RCP这类应用也有可能在将来得到支持，而且Eclipse不断发展中，SWT相关技术的不断成熟，都将以最快的速度同时运用于WEB应用。而且多年来用积累的用SWT开发的软件，不需要修改，或只需少量的修改，即可同时拥有WEB版本。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">其次，很多JAVA应用开发者往往只对JAVA服务端的技术感兴趣，而对表现层采用的HTML、JS、JSP这类标签语言和脚本技术并不喜欢。而事实上兼通JAVA技术、HTML和脚本技术的程序员也是少之又少。这也是造成许多传统J2EE应用的界面表现不佳的原因。由于SmartSWT直接采用了SWT，使的整个应用的开发完全是纯JAVA技术的开发过程，开发者不再需要与非面向对象的HTML、JS、JSP等标签语言和脚本技术打交道，整个开发过程完全是桌面应用的开发模式，基于事件驱动。这使得应用开发在技术人员的配备上要容易得多。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">此外，发布到SmartSWT的SWT应用，客户端通过浏览器使用时，仍然具有和原SWT一样的具有Windows本地风格的界面，具有和真正桌面应用一样的表现能力和事件机制，其表现能力和功能是Bindows以及Flex等技术无法真正模拟的。</p>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(204,204,204); margin: 10px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; height: 1px; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-alternate-rule"></div>
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N10086">SmartSWT的局限性</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">尽管SmartSWT有诸多好处，但也存在一些局限性。 由于技术实现的原因，对网络传输速度要求较高。SmartSWT在内网内访问时，其使用效果和本机上直接使用相差不多，但在外网上却几乎不具可用性。这决定了SmartSWT只能用于开发企业内网应用。</p>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">另外，和Flex类似，Flex要求客户端的浏览器安装一个Flash ActiveX控件，SmartSWT也有类似要求。SmartSWT客户端需要在浏览器中实时表现服务端SWT应用的图形界面，并对用户操作做出响应，这就需要在客户端安装一个特制的小型JAVA虚拟机，并以ActiveX控件的形式在IE中使用。某些政府机关的敏感部门对这种方式 可能比较反感。</p>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(204,204,204); margin: 10px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; height: 1px; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-alternate-rule"></div>
<h2 style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; font-size: 1.6em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="N1008F">选择SmartSWT，还是...</h2>
<p style="border-bottom: 0px; border-left: 0px; padding-bottom: 6px; line-height: 1.5em; margin: 5px 0px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; color: rgb(34,34,34); font-size: 1.16em !important; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 6px">是否选择SmartSWT，取决于您的软件应用范围和客户。如果您的软件是内网的企业应用，您的用户日常办公使用的是Windows系统，而且对客户端安装一个小小的虚拟机不介意的话，选择SmartSWT无疑是上佳选择 。它将使您的WEB应用开发充分享受SWT开发的各种便利性和各方的丰富技术支持，完成普通WEB无法完成的功能。SWT界面的表现力和操作便利性，也会使客户满意度大大提高。</p></div></div>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 10px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 10px; outline-width: 0px; width: 960px; padding-right: 10px; font-family: Arial, sans-serif; clear: both; vertical-align: baseline; overflow: hidden; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-columns">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; min-height: 1px; padding-left: 10px; outline-width: 0px; width: 620px; padding-right: 10px; font-family: Arial, sans-serif; float: left; clear: none; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-col-6-4">
<h2 style="padding-bottom: 0px; border-right-width: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; border-bottom-width: 0px; font-size: 1.6em !important; vertical-align: baseline; border-top: rgb(102,102,102) 2px solid; border-left-width: 0px; padding-top: 6px" id="resources" class="ibm-rule">参考资料</h2>
<ul style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; line-height: 1.5em; list-style-type: none; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; color: rgb(51,51,51); font-size: 1.16em; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-bullet-list"><li style="background-image: url(http://1.www.s81c.com/i/v17/bullets/ibm_lg_bullet_grey_on.gif); border-bottom: 0px; border-left: 0px; padding-bottom: 5px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 11px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; background-position: 0px 13px; height: 22px; clear: left; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 5px">您可以通过<a style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; display: inline; font-family: Arial, sans-serif; color: rgb(116,82,133); vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" href="http://www.smartswt.net/">http://www.smartswt.net</a>获得进一步的SmartSWT资料和试用软件。</li><li style="background-image: url(http://1.www.s81c.com/i/v17/bullets/ibm_lg_bullet_grey_on.gif); border-bottom: 0px; border-left: 0px; padding-bottom: 5px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 11px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; background-position: 0px 13px; height: 44px; clear: left; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 5px"><a style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; display: inline; font-family: Arial, sans-serif; color: rgb(116,82,133); vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" href="http://www.eclipse.org/swt/">http://www.eclipse.org/swt/</a>这里是Eclipse SWT的基地，可以得到最新的SWT开发包和开发资料。</li><li style="background-image: url(http://1.www.s81c.com/i/v17/bullets/ibm_lg_bullet_grey_on.gif); border-bottom: 0px; border-left: 0px; padding-bottom: 5px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 11px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; background-position: 0px 13px; height: 22px; clear: left; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 5px"><a style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; display: inline; font-family: Arial, sans-serif; color: rgb(116,82,133); vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" href="http://www.eclipse.org/">http://www.eclipse.org/</a>上还有很多SWT相关的扩展项目，如GEF、EMF等。</li><li style="background-image: url(http://1.www.s81c.com/i/v17/bullets/ibm_lg_bullet_grey_on.gif); border-bottom: 0px; border-left: 0px; padding-bottom: 5px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 11px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; background-position: 0px 13px; height: 22px; clear: left; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 5px">您可以通过<a style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; display: inline; font-family: Arial, sans-serif; color: rgb(116,82,133); vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" href="http://www.swt-designer.com/">http://www.swt-designer.com/</a>获得SWT应用开发的可视化Eclipse插件。</li></ul>
<h2 style="padding-bottom: 0px; border-right-width: 0px; margin: 5px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; border-bottom-width: 0px; font-size: 1.6em !important; vertical-align: baseline; border-top: rgb(204,204,204) 2px solid; border-left-width: 0px; padding-top: 8px" id="icomments" class="ibm-alternate-rule ibm-no-print">条评论</h2>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="dw-icomments-container" class="ibm-no-print">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" id="threadShow"></div></div></div>
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; margin: 0px; outline-style: none; outline-color: invert; min-height: 1px; padding-left: 10px; outline-width: 0px; width: 300px; padding-right: 10px; font-family: Arial, sans-serif; float: left; clear: none; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-col-6-2">
<div style="border-bottom: 0px; border-left: 0px; padding-bottom: 0px; background-color: rgb(204,204,204); margin: 10px 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: Arial, sans-serif; height: 1px; clear: both; vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-alternate-rule"></div>
<ul style="border-bottom: 0px; border-left: 0px; padding-bottom: 5px; list-style-type: none; margin: 0px; outline-style: none; outline-color: invert; padding-left: 0px; outline-width: 0px; padding-right: 0px; color: rgb(51,51,51); vertical-align: baseline; border-top: 0px; border-right: 0px; padding-top: 0px" class="ibm-portrait-module-list"></ul></div></div></div></div></div></div><img src ="http://www.blogjava.net/qiubite520/aggbug/412884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2014-04-24 14:33 <a href="http://www.blogjava.net/qiubite520/articles/412884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对spring JdbcTemplate的一个扩展(使其支持单Connection)</title><link>http://www.blogjava.net/qiubite520/articles/411539.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Wed, 26 Mar 2014 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/411539.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/411539.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/411539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/411539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/411539.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对spring JdbcTemplate的一个扩展(使其支持单Connection).&nbsp;不怕大家笑话,以前一直没怎么使用过spring jdbc template,&nbsp;印象中只用过&nbsp;public List queryForList(String sql, Object[] args)&nbsp;public Map queryForMap(String sql, Obj...&nbsp;&nbsp;<a href='http://www.blogjava.net/qiubite520/articles/411539.html'>阅读全文</a><img src ="http://www.blogjava.net/qiubite520/aggbug/411539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2014-03-26 22:45 <a href="http://www.blogjava.net/qiubite520/articles/411539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring事务配置的五种方式</title><link>http://www.blogjava.net/qiubite520/articles/411481.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Wed, 26 Mar 2014 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/411481.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/411481.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/411481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/411481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/411481.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前段时间对Spring的事务配置做了比较深入的研究，在此之间对Spring的事务配置虽说也配置过，但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清，还是比较好掌握的。&nbsp;&nbsp;&nbsp; 总结如下：&nbsp;&nbsp;&nbsp; Spring配置文件中关于事务配置总是由三个组成部分，分别是DataSource、TransactionM...&nbsp;&nbsp;<a href='http://www.blogjava.net/qiubite520/articles/411481.html'>阅读全文</a><img src ="http://www.blogjava.net/qiubite520/aggbug/411481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2014-03-26 10:55 <a href="http://www.blogjava.net/qiubite520/articles/411481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>H2数据库的Collation中文排序问题解决方案</title><link>http://www.blogjava.net/qiubite520/articles/409779.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Wed, 12 Feb 2014 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/409779.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/409779.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/409779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/409779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/409779.html</trackback:ping><description><![CDATA[最近用 Scala & Lift 做个小项目，用到H2数据库。结果在对中文字段进行排序时发现点问题。在不设置Collation的情况下，对中文字段的排序结果是乱的（谁让中国人喜欢拼音排序呢）。发现这一现象后，将Collation设为 CHINESE_CHINA看看（注意设置collation要在数据库中还没创建任何表的时候喔），
set collation CHINESE_CHINA
结果还是不尽如人意，虽然绝大多数记录排序是正确的（按拼音排序），但还是有少量比较生僻的字给单独排在了最后。试想如果某个领导的名字按拼音排序本来要排在前面的，结果因为生僻字给排到了最后，被领导发现了会不会不高兴给你小鞋穿呢？要尽善尽美怎么办呢？查了一下H2的文档，讲到设置collation的时候可以调用 ICU4J（ICU for java）来替代使用内置的collation机制。（不知道ICU，你out了吧，要不要google一下先？！）。 到ICU网站下载了icu4j.jar，将其加入到 CLASSPATH中，重启H2的服务。再次创建数据库，创建数据库后立即在没有创建表的情况下输入下列命令设置collation:
set collation ICU4J_CHINESE_CHINA
再次说明，如果已经创建了表，此命令是无效的喔。将collation设置为ICU4J_CHINESE_CHINA 后，中文排序就OK了！<img src ="http://www.blogjava.net/qiubite520/aggbug/409779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2014-02-12 16:53 <a href="http://www.blogjava.net/qiubite520/articles/409779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP获取CPU使用率、系统内存、虚拟机内存等情况(不用JNI) </title><link>http://www.blogjava.net/qiubite520/articles/386321.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Mon, 27 Aug 2012 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/386321.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/386321.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/386321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/386321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/386321.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSP获取CPU使用率、系统内存、虚拟机内存等情况(不用JNI) 在Java中，可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息，下面例子可以取得这些信息，并且获得在Windows下的内存使用率。首先编写一个MonitorInfoBean类，用来装载监控的一些信息，包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段，该类的代码如下： Code highlighting...&nbsp;&nbsp;<a href='http://www.blogjava.net/qiubite520/articles/386321.html'>阅读全文</a><img src ="http://www.blogjava.net/qiubite520/aggbug/386321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2012-08-27 09:01 <a href="http://www.blogjava.net/qiubite520/articles/386321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详解 SWT 中的 Browser.setUrl(String url, String postData, String[] headers) 的用法</title><link>http://www.blogjava.net/qiubite520/articles/383652.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Sat, 21 Jul 2012 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/383652.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/383652.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/383652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/383652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/383652.html</trackback:ping><description><![CDATA[<h2 class="title content-title">详解 SWT 中的 Browser.setUrl(String url, String postData, String[] headers) 的用法</h2>
<div id="content" class="content text-content clearfix">
<p>SWT 的 org.eclipse.swt.browser.Browser类中<br />有一个setUrl(String url, String postData, String[] headers)方法。<br />我们可以通过这个方法进行submit数据。</p>
<p>例如：可以通过这个方法，进行用户登陆操作。(登陆成功后页面会自动跳转至登陆成功页面)</p>
<p>参数详解：<br />setUrl(String url, String postData, String[] headers)</p>
<p>url：表示一个要post提交的数据地址。相当于Html中form表单中的action属性<br />postData：表示提交的数据。如果是多个数据需要用&amp;符号分开。<br />例如：name=xiaobaitu&amp;password=12345678<br />headers：表示提交时http的Headers信息。</p>
<p><br />部分代码实例如下：<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;String url = "<a href="http://127.0.0.1/webpages/login.jsp"><font color="#f06d99">http://127.0.0.1/webpages/login.jsp</font></a>"<br />&nbsp;&nbsp;&nbsp;String postData = "name=xiaobaitu&amp;password=12345678";<br />&nbsp;&nbsp;&nbsp;String[] headers =<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Accept: */*",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Accept-Language: zh-cn",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Content-Type: application/x-www-form-urlencoded", // 建议要有<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Accept-Encoding: gzip, deflate", "Cache-Control: no-cache"<br />&nbsp;&nbsp;&nbsp;};</p>
<p>&nbsp;&nbsp;&nbsp;browser.setUrl(url, postData,&nbsp;headers);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;注意：<br />&nbsp;&nbsp;&nbsp;(1) headers中的 "Content-Type: application/x-www-form-urlencoded"建议要有哦~~<br />&nbsp;&nbsp;&nbsp;(2) 如果提交的数据postData中包含中文, 则需要对其进行url编码。<br />&nbsp;&nbsp;&nbsp;例如：如果按照UTF-8编码，则是URLEncoder.encode(name, "UTF-8");<br /></p></div><img src ="http://www.blogjava.net/qiubite520/aggbug/383652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2012-07-21 21:19 <a href="http://www.blogjava.net/qiubite520/articles/383652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring原理</title><link>http://www.blogjava.net/qiubite520/articles/380688.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Wed, 13 Jun 2012 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/380688.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/380688.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/380688.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/380688.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/380688.html</trackback:ping><description><![CDATA[<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px"><strong>一、 IoC(Inversion of control): 控制反转&nbsp;</strong>&nbsp;<br />概念：控制权由对象本身转向容器；由容器根据配置文件去创建实例并创建各个实例之间的依赖关系&nbsp;<br />核心：bean工厂；在Spring中，bean工厂创建的各个实例称作bean&nbsp;<br /></div>
<div><strong></strong>&nbsp;</div>
<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px"><strong>内部最核心的就是IOC<br /></strong>动态注入，让一个对象的创建不用new了，可以自动的生产，这其实就是利用java里的反射&nbsp;<br />反射其实就是在运行时动态的去创建、调用对象，Spring就是在运行时，跟xml&nbsp; Spring的配置&nbsp;文件来动态的创建对象，和调用对象里的方法的 。</span></span></div>
<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></span></span></span>&nbsp;</div>
<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px"><strong>二、AOP(Aspect-Oriented Programming): 面向方面编程&nbsp;<br /></strong>1、 代理的两种方式：&nbsp;<br />静态代理：&nbsp;<br /> 针对每个具体类分别编写代理类；&nbsp;<br /> 针对一个接口编写一个代理类；&nbsp;<br />动态代理：&nbsp;<br />针对一个方面编写一个InvocationHandler，然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类&nbsp;<br />2、 AOP的主要原理：动态代理&nbsp;</span></span></div>
<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px"></span></span><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px"><br /><strong>另一个核心就是AOP</strong></span></span></div>
<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px">这个就是面向切面编程，可以为某一类对象 进行监督和控制（也就是在调用这类对象的具体方法的前后去调用你指定的 模块）从而达到对一个模块扩充的功能。这些都是通过配置类达到的。&nbsp;<br /><strong>Spring目的</strong>：就是让对象与对象（模块与模块）之间的关系没有通过代码来关联，都是通过配置类说明&nbsp;<br />管理的（Spring根据这些配置 内部通过反射去动态的组装对象）&nbsp;<br /><strong>要记住</strong>：Spring是一个容器，凡是在容器里的对象才会有Spring所提供的这些服务和功能。&nbsp;<br />Spring里用的最经典的一个设计模式就是：模板方法模式。&nbsp; Spring里的配置是很多的，很难都记住，但是Spring里的精华也无非就是以上的两点，把以上两点跟理解了&nbsp;<br />也就基本上掌握了Spring.&nbsp; </span></span></div>
<div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 18px; font-family: arial, sans-serif, helvetica, tahoma; font-size: 12px"><br />&nbsp;</div><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px"><strong><span style="line-height: 24px; font-family: simsun"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px">
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong><span style="line-height: 24px">三、</span><span style="line-height: 24px">spring</span><span style="line-height: 24px; font-family: simsun">原理</span><span style="line-height: 24px">&nbsp;</span></strong></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>spring</span><span style="line-height: 24px; font-family: simsun">的最大作用</span><span style="line-height: 24px">ioc/di,</span><span style="line-height: 24px; font-family: simsun">将类与类的依赖关系写在配置文件中，</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">程序在运行时根据配置文件动态加载依赖的类，降低的类与类之间</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">的藕合度。它的原理是在</span><span style="line-height: 24px">applicationContext.xml</span><span style="line-height: 24px; font-family: simsun">加入</span><span style="line-height: 24px">bean</span><span style="line-height: 24px; font-family: simsun">标记</span><span style="line-height: 24px">,</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">在</span><span style="line-height: 24px">bean</span><span style="line-height: 24px; font-family: simsun">标记中通过</span><span style="line-height: 24px">class</span><span style="line-height: 24px; font-family: simsun">属性说明具体类名、通过</span><span style="line-height: 24px">property</span><span style="line-height: 24px; font-family: simsun">标签说明</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">该类的属性名、通过</span><span style="line-height: 24px">constructor-args</span><span style="line-height: 24px; font-family: simsun">说明构造子的参数。其一切都是</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">返射，当通过</span><span style="line-height: 24px">applicationContext.getBean("id</span><span style="line-height: 24px; font-family: simsun">名称</span><span style="line-height: 24px">")</span><span style="line-height: 24px; font-family: simsun">得到一个类实例时，</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">就是以</span><span style="line-height: 24px">bean</span><span style="line-height: 24px; font-family: simsun">标签的类名、属性名、构造子的参数为准，通过反射实例对象，</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">唤起对象的</span><span style="line-height: 24px">set</span><span style="line-height: 24px; font-family: simsun">方法设置属性值、通过构造子的</span><span style="line-height: 24px">newInstance</span><span style="line-height: 24px; font-family: simsun">实例化得到对象。</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">正因为</span><span style="line-height: 24px">spring</span><span style="line-height: 24px; font-family: simsun">一切都是反射，反射比直接调用的处理速度慢，所以这也是</span><span style="line-height: 24px">spring</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">的一个问题。</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>spring</span><span style="line-height: 24px; font-family: simsun">第二大作用就是</span><span style="line-height: 24px">aop</span><span style="line-height: 24px; font-family: simsun">，其机理来自于代理模式，代理模式</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">有三个角色分别是通用接口、代理、真实对象</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">代理、真实对象实现的是同一接口，将真实对象作为</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">代理的一个属性，向客户端公开的是代理，当客户端</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">调用代理的方法时，代理找到真实对象，调用真实对象</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">方法，在调用之前之后提供相关的服务，如事务、安全、</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="line-height: 24px; font-family: simsun">日志。其名词分别是代理、真实对象、装备、关切点、连接点。</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong><span style="line-height: 24px; font-family: simsun">四、动态代理</span></strong><span style="line-height: 24px">:</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px; font-family: simsun">不用写代理类，虚拟机根据真实对象实现的接口产生一个类，通过</span><span style="line-height: 24px; font-family: simsun">类实例化一个动态代理，在实例化动态代理时将真实对象</span><span style="line-height: 24px; font-family: simsun">及装备注入到动态代理中，向客户端公开的是动态代理，</span><span style="line-height: 24px; font-family: simsun">当客户端调用动态代理方法时，动态代理根据类的返射得</span><span style="line-height: 24px; font-family: simsun">到真实对象的</span><span style="line-height: 24px">Method,</span><span style="line-height: 24px; font-family: simsun">调用装备的</span><span style="line-height: 24px">invoke</span><span style="line-height: 24px; font-family: simsun">方法，将动态代理、</span><span style="line-height: 24px">Method</span><span style="line-height: 24px; font-family: simsun">、方法参数传与装备的</span><span style="line-height: 24px">invoke</span><span style="line-height: 24px; font-family: simsun">方法，</span><span style="line-height: 24px">invoke</span><span style="line-height: 24px; font-family: simsun">方法在唤</span><span style="line-height: 24px; font-family: simsun">起</span><span style="line-height: 24px">method</span><span style="line-height: 24px; font-family: simsun">方法前或后做一些处理。</span><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;</span>1</span><span style="line-height: 24px; font-family: simsun">、产生动态代理的类</span><span style="line-height: 24px">:</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>java.lang.refect.Proxy</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;</span>2</span><span style="line-height: 24px; font-family: simsun">、装备必须实现</span><span style="line-height: 24px">InvocationHandler</span><span style="line-height: 24px; font-family: simsun">接口实现</span><span style="line-height: 24px">invoke</span><span style="line-height: 24px; font-family: simsun">方法</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px; font-family: simsun"><strong>五、反射：</strong></span></div></span></span></span></strong>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px; font-family: simsun">什么是类的返射</span><span style="line-height: 24px">?</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px; font-family: simsun">通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性</span><span style="line-height: 24px; font-family: simsun">并可以根据构造器实例化一个对象，唤起一个方法，取属性值，改属性值。</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px; font-family: simsun">如何得到一个类说明</span><span style="line-height: 24px">?</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;</span>Class cls=</span><span style="line-height: 24px; font-family: simsun">类</span><span style="line-height: 24px">.class;</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;</span>Class cls=</span><span style="line-height: 24px; font-family: simsun">对象</span><span style="line-height: 24px">.getClass();</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;</span>Class.forName("</span><span style="line-height: 24px; font-family: simsun">类路径</span><span style="line-height: 24px">");</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px; font-family: simsun">如何得到一个方法并唤起它</span><span style="line-height: 24px">?</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;</span>Class cls=</span><span style="line-height: 24px; font-family: simsun">类</span><span style="line-height: 24px">.class;</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;</span>Constructor cons=cls.getConstructor(new Class[]{String.class});</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;</span>Object obj=cons.newInstance(new Object[]{"aaa"});</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;</span>Method method=cls.getMethod("</span><span style="line-height: 24px; font-family: simsun">方法名</span><span style="line-height: 24px">",new Class[]{String.class,Integer.class});</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>method.invoke(obj,new Object[]{"aa",new Integer(1)});&nbsp;</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong><span style="line-height: 24px">六、</span><span style="line-height: 24px">spring</span><span style="line-height: 24px; font-family: simsun">的三种注入方式</span></strong></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span>etter</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>interface</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>constructor</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong><span style="line-height: 24px">七、</span><span style="line-height: 24px">spring</span><span style="line-height: 24px; font-family: simsun">的核心接口及核类配置文件</span></strong></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;</span>FactoryBean:</span><span style="line-height: 24px; font-family: simsun">工厂</span><span style="line-height: 24px">bean</span><span style="line-height: 24px; font-family: simsun">主要实现</span><span style="line-height: 24px">ioc/di</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 21px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ApplicationContext ac=new FileXmlApplicationContext("applicationContext.xml");</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 24px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Object obj=ac.getBean("id</span><span style="line-height: 24px; font-family: simsun">值</span><span style="line-height: 24px">");</span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 21px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></div>
<div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="line-height: 21px"><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 24px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>applicationContext.xml</span></div></span></span></span></span> <img src ="http://www.blogjava.net/qiubite520/aggbug/380688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2012-06-13 14:34 <a href="http://www.blogjava.net/qiubite520/articles/380688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring原理</title><link>http://www.blogjava.net/qiubite520/articles/380687.html</link><dc:creator>丘比特</dc:creator><author>丘比特</author><pubDate>Wed, 13 Jun 2012 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/qiubite520/articles/380687.html</guid><wfw:comment>http://www.blogjava.net/qiubite520/comments/380687.html</wfw:comment><comments>http://www.blogjava.net/qiubite520/articles/380687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiubite520/comments/commentRss/380687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiubite520/services/trackbacks/380687.html</trackback:ping><description><![CDATA[Spring的哲学是在不影响Java对象的设计的情况下将Java对象加入到框架中。 我们下面来看看Spring的工作原理，看看Spring是如何做到不影响Java对象的。<br /><br />&nbsp; EJB的框架采用了一种侵略性(Invasive)的方法来设计对象，它要求你在设计中加入符合EJB规范的代码。一些轻量级的COP框架，例如Avalon，也要求对象设计时必须符合某种规范，例如Serviceable接口，这种做法是典型的Type 1做法。<br /><br />&nbsp; 这种设计思路要求Spring采用一种动态的、灵活的方式来设计框架。在Spring的工作原理中大量采用了反射。首先Spring要解决的一个问题就是如何管理bean。因为IOC的思想要求bean之间不能够直接调用，而应该采用一种被动的方式进行协作。所以bean的管理是Spring工作原理中的核心部分。<br /><br />&nbsp; 反射和内省在代码的层次上思考问题，有时候能够带来出人意料的灵活性。但它的使用有时候也是一个哲学问题，不论是在ORM设计还是在AOP设计上都出现了类似的问题-究竟是使用反射，还是使用代码生成。<br /><br />&nbsp; 在Spring中，处理这个问题的核心是在org.springframework.beans包中。而其中最为核心的部分，则是BeanWrapper。BeanWrapper，顾名思义，就是bean的包装器。所以，它的主要工作，就是对任何一个bean，进行属性(包括内嵌属性)的设置和方法的调用。在<br /><br />&nbsp; BeanWrapper的默认实现类BeanWrapperImpl中，虽然代码较长，但完成的工作却是非常的集中的。<br /><br />&nbsp; BeanWrapper的深入研究<br /><br />&nbsp; 我们看看这个BeanWrapper是如何发挥运作的，假设我们有两个bean：<br /><br />&nbsp; public class Company {&nbsp; private String name;&nbsp; private Employee managingDirector;&nbsp; public String getName() { return this.name;&nbsp; }&nbsp; public void setName(String name) { this.name = name;&nbsp; }&nbsp; public Employee getManagingDirector() { return this.managingDirector;&nbsp; }&nbsp; public void setManagingDirector(Employee managingDirector) { this.managingDirector = managingDirector;&nbsp; } } public class Employee {&nbsp; private float salary;&nbsp; public float getSalary() { return salary;&nbsp; }&nbsp; public void setSalary(float salary) { this.salary = salary;&nbsp; } }<br /><br />&nbsp; 然后我们使用BeanWrapper来调用这两个bean：<br /><br />&nbsp; Company c = new Company(); BeanWrapper bwComp = BeanWrapperImpl(c); // setting the company name... bwComp.setPropertyValue("name", "Some Company Inc."); // ... can also be done like this: PropertyValue v = new PropertyValue("name", "Some Company Inc."); bwComp.setPropertyValue(v); // ok, lets create the director and tie it to the company: Employee jim = new Employee(); BeanWrapper bwJim = BeanWrapperImpl(jim); bwJim.setPropertyValue("name", "Jim Stravinsky"); bwComp.setPropertyValue("managingDirector", jim); // retrieving the salary of the managingDirector through the company Float salary = (Float)bwComp.getPropertyValue("managingDirector.salary");<br /><br />&nbsp; 看起来麻烦了许多，但是这样Spring就可以使用统一的方式来管理bean的属性了。<br /><br />&nbsp; Bean的制造工厂<br /><br />&nbsp; 有了对单个Bean的包装，还需要对多个的bean进行管理。在spring中，把bean纳入到一个核心库中进行管理。bean的生产有两种方法：一种是一个bean产生多个实例，一种是一个bean只产生一个实例。如果对设计模式熟悉的话，我们就会想到，前者可以采用Prototype，后者可以采用Singleton。<br /><br />&nbsp; 注意到，反射技术的使用使得我们不再像原始的工厂方法模式那样创建对象。反射可以非常灵活的根据类的名称创建一个对象。所以spring只使用了Prototype和Singleton这两个基本的模式。<br /><br />&nbsp; Spring正是这样处理的，但是我们希望用户能够维护统一的接口，而不需要关心当前的bean到底是Prototype产生的独立的bean，还是Singleton产生的共享的bean。所以，在org.springframework.beans.factory包中的BeanFactory定义了统一的getBean方法。<br /><br />&nbsp; JDBC再封装JDBC优雅的封装了底层的数据库，但是JDBC仍然存在诸多的不变。你需要编写大量的代码来完成CRUD操作，而且，JDBC无论是遇到什么样的问题，都抛出一个SQLException，这种做法在异常使用上被称为不完备的信息。因为问题可能是很复杂的，也许是数据库连接的问题，也许是并发控制的问题，也许只是SQL语句出错。没有理由用一个简单的SQLException就搞定全部的问题了，这种做法有些不负责任。针对这两个问题，Spring Framework提出了两种解决方法：首先，提供一个框架，把JDBC应用中的获取连接、异常处理、释放等比较通用的操作全部都集中起来，用户只需要提供特定的实现就OK了。实现的具体细节采用的是模板方法。举个例子，在org.springframework.jdbc.object包中，MappingSqlQuery类实现了将SQL查询映射为具体的业务对象。JavaDoc中这样写到：Reusable query in which concrete subclasses must implement the abstract mapRow(ResultSet, int) method to convert each row of the JDBC ResultSet into an object. 用户必须实现mapRow方法，这是典型模板方法的应用。我们拿一个具体的例子来看看：<br /><br />&nbsp; class UserQuery extends MappingSqlQuery {&nbsp; public UserQuery(DataSource datasource) { super(datasource, "SELECT * FROM PUB_USER_ADDRESS WHERE USER_ID = ?"); declareParameter(new SqlParameter(Types.NUMERIC)); compile();&nbsp; }&nbsp; // Map a result set row to a Java object&nbsp; protected Object mapRow(ResultSet rs, int rownum) throws SQLException { User user = new User(); user.setId(rs.getLong("USER_ID")); user.setForename(rs.getString("FORENAME")); return user;&nbsp; }&nbsp; public User findUser(long id) { // Use superclass convenience method to provide strong typing return (User) findObject(id);&nbsp; } }<br /><br />&nbsp; 其次是第二个问题，最麻烦的地方应该说是需要截住JDBC的异常，然后判断异常的类型，并重新抛出异常。错误的问题可以通过连接来获取，所以麻烦的是如何截获异常。Spring 框架采用的方法是回调，处理回调的类在Spring Framework中被称为template 。<br /><br />&nbsp; JdbcTemplate template = new JdbcTemplate(dataSource); final List names = new LinkedList(); template.query("SELECT USER.NAME FROM USER", new RowCallbackHandler() {&nbsp; public void processRow(ResultSet rs) throws SQLException { names.add(rs.getString(1));&nbsp; } });<br /><br />&nbsp; 回调函数是一个匿名类，其中也使用了模板方法，异常的处理都在父类中完成了。<br /><br />&nbsp; 层间松耦合<br /><br />&nbsp; 在开放源码界已经出现了大量的基于MVC的Web容器，但是这些容器都仅限于Web的范围 ，不涉及Web层次后端的连接，Spring作为一个整体性的框架，定义了一种Web层和后端业务层的连接方式， 这个思路仍然疏运图MVC的范畴，但耦合更松散，不依赖于具体的集成层次。<br /><br />&nbsp; public class GoogleSearchController implements Controller {&nbsp; private IGoogleSearchPort google;&nbsp; private String googleKey;&nbsp; public void setGoogle(IGoogleSearchPort google) { this.google = google;&nbsp; }&nbsp; public void setGoogleKey(String googleKey) { this.googleKey = googleKey;&nbsp; }&nbsp; public ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&nbsp; String query = request.getParameter("query");&nbsp; GoogleSearchResult result =&nbsp; // Google property definitions omitted...&nbsp; // Use google business object&nbsp; google.doGoogleSearch(this.googleKey, query,start, maxResults, filter, r estrict, safeSearch, lr, ie, oe);&nbsp; return new ModelAndView("googleResults", "result", result); }&nbsp; }<br /><br />&nbsp; 回调函数是一个匿名类，其中也使用了模板方法，异常的处理都在父类中完成了。<br />2.Spring是一个开源框架，它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而，Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言，任何Java应用都可以从Spring中受益。 <br />&#8226; 目的：解决企业应用开发的复杂性 <br />&#8226; 功能：使用基本的JavaBean代替EJB，并提供了更多的企业应用功能 <br />&#8226; 范围：任何Java应用 简单来说，Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 <br />轻量&#8212;&#8212;从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外，Spring是非侵入式的：典型地，Spring应用中的对象不依赖于Spring的特定类。 控制反转&#8212;&#8212;Spring通过一种称作控制反转（IoC）的技术促进了松耦合。当应用了IoC，一个对象依赖的其它对象会通过被动的方式传递进来，而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反&#8212;&#8212;不是对象从容器中查找依赖，而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 面向切面&#8212;&#8212;Spring提供了面向切面编程的丰富支持，允许通过分离应用的业务逻辑与系统级服务（例如审计（auditing）和事务（）管理）进行内聚性的开发。应用对象只实现它们应该做的&#8212;&#8212;完成业务逻辑&#8212;&#8212;仅此而已。它们并不负责（甚至是意识）其它的系统级关注点，例如日志或事务支持。 容器&#8212;&#8212;Spring包含并管理应用对象的配置和生命周期，在这个意义上它是一种容器，你可以配置你的每个bean如何被创建&#8212;&#8212;基于一个可配置原型（prototype），你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例&#8212;&#8212;以及它们是如何相互关联的。然而，Spring不应该被混同于传统的重量级的EJB容器，它们经常是庞大与笨重的，难以使用。 框架&#8212;&#8212;Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中，应用对象被声明式地组合，典型地是在一个XML文件里。Spring也提供了很多基础功能（事务管理、持久化框架集成等等），将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。 <img src ="http://www.blogjava.net/qiubite520/aggbug/380687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiubite520/" target="_blank">丘比特</a> 2012-06-13 14:32 <a href="http://www.blogjava.net/qiubite520/articles/380687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>