<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/yustar" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/yustar" type="application/rss+xml"></fs:self_link><lastBuildDate>Fri, 05 Sep 2008 00:48:03 GMT</lastBuildDate><title>Yustar's Blog</title><description>Concern about joomla,PHP,JAVA,Internet and GIS</description><image><url>http://www.feedsky.com/feed/yustar/sc/gif</url><title>Yustar's Blog</title><link>http://yustar.joomlar.cn</link></image><link>http://yustar.joomlar.cn</link><language>en</language><pubDate>Fri, 05 Sep 2008 00:48:03 GMT</pubDate><item><title>Linux上安装google浏览器</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/111218911/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/407.html/feed/</wfw:commentRss><description>&lt;p&gt;Google launched a few days ago a new web browser, that has some interesting features which might give FF 3, Safari and IE8 a run for their money. Although not yet for Linux, i&amp;#8217;ve put together (following some ubuntuforms posts) a detailed tutorial to help you Install Google Chrome on Linux using wine &gt;= 1.1.3.&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;1. install wine (follow the official instructions http://www.winehq.org/site/download-deb)&lt;/p&gt;
&lt;p&gt;2. make sure wine &gt;= 1.1.3 is installed by entering the following in the terminal&lt;br /&gt;
wine &amp;#8211;version&lt;/p&gt;
&lt;p&gt;3. Download winetricks and install it&lt;/p&gt;
&lt;p&gt;wget http://www.kegel.com/wine/winetricks&lt;br /&gt;
sudo cp winetricks /usr/sbin&lt;/p&gt;
&lt;p&gt;4. Install some dependencies for Chrome (Flash is not mandatory but will allow you to play youtube videos :-))&lt;br /&gt;
winetricks riched20 riched30 flash &lt;/p&gt;
&lt;p&gt;4.1 Install allfonts (this is optional)&lt;br /&gt;
winetricks allfonts&lt;/p&gt;
&lt;p&gt;5. Download the Chrome installer&lt;br /&gt;
wget http://gpdl.google.com/chrome/install/149.27/chrome_installer.exe&lt;/p&gt;
&lt;p&gt;6. Install Chrome (just follow the onscreen instructions and make sure you create a desktop icon)&lt;br /&gt;
wine chrome_installer.exe&lt;/p&gt;
&lt;p&gt;7. After the install is finished, you won&amp;#8217;t be able to use Chrome as it needs a bit more hacking. Just close it and opent with your favorite editor the Google Chrome.desktop icon created on your Desktop. Make sure your add &amp;#8220;&amp;#8211;new-http &amp;#8211;in-process-plugins&amp;#8221;, without the quotes at the end of this line:&lt;/p&gt;
&lt;p&gt;8. Go to desktop and start Google Chrome&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/google-chrome-linux-2-thumb-600x409.png' alt='google-chrome-linux-2-thumb-600×409.png'  width=&quot;459&quot; height=&quot;313&quot;/&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/google-chrome-linux-flash-thumb-600x409.png' alt='google-chrome-linux-flash-thumb-600×409.png'  width=&quot;459&quot; height=&quot;313&quot;/&gt;&lt;/div&gt;
&lt;p&gt;For those who are not able to find the Google Chrome.desktop icon on their Desktop, i have attached a copy of mine &lt;a href=&quot;http://www.myscienceisbetter.info/2008/09/04/google-chrome/Google%20Chrome.desktop&quot;&gt;here.&lt;/a&gt; Just save the attached file on your desktop, and edit it using your favorite text editor. Only things you need to replace is my username (mimir) with your own.&lt;/p&gt;
&lt;p&gt;HTTPS Note: it seems that the https is not working due to the fact that wine is missing TSL/SSL features, the dlls that should handle that being just stubs at the moment. If you have any information regarding this, please share.&lt;br /&gt;
Exec=env WINEPREFIX=&amp;#8221;/home/mimir/.wine&amp;#8221; wine &amp;#8220;C:\\windows\\profiles\\mimir\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe&amp;#8221;&lt;/p&gt;
&lt;p&gt;to make it look like this:&lt;br /&gt;
Exec=env WINEPREFIX=&amp;#8221;/home/mimir/.wine&amp;#8221; wine &amp;#8220;C:\\windows\\profiles\\mimir\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe&amp;#8221; &amp;#8211;new-http &amp;#8211;in-process-plugins&lt;/p&gt;
&lt;p&gt;Save the file!&lt;/p&gt;
&lt;p&gt;NOTE: mimir is my username, you will have something like /home/yourusername/.wine&lt;/p&gt;
&lt;p&gt;安装方式是通过wine来虚拟，注意的地方是wine的版本一定要在1.1.3以上，安装之前需要安装一些依赖包和字体。&lt;/p&gt;
&lt;p&gt;本文转载自(&lt;a href=&quot;http://www.myscienceisbetter.info/2008/09/install-google-chrome-on-linux-using-wine.html&quot;&gt;http://www.myscienceisbetter.info/2008/09/install-google-chrome-on-linux-using-wine.html&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-2192637126578273&quot;;
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = &quot;468x60_as&quot;;
google_ad_type = &quot;image&quot;;
//2007-09-06: blog
google_ad_channel = &quot;3480229846&quot;;
google_color_border = &quot;FFFFFF&quot;;
google_color_bg = &quot;FFFFFF&quot;;
google_color_link = &quot;999999&quot;;
google_color_text = &quot;FFFFFF&quot;;
google_color_url = &quot;804000&quot;;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
  src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id=&quot;adsense&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-2192637126578273&quot;;
/* 250x250, å��å»ºäº� 08-3-16 */
google_ad_slot = &quot;2153534011&quot;;
google_ad_width = 250;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;&lt;/div&gt;&lt;/p&gt;</description><category>ubuntu</category><category>linux</category><category>YouTube</category><category>chrome</category><category>google</category><pubDate>Fri, 05 Sep 2008 08:48:03 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/407.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/407.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/407.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/111218911/4059641</fs:itemid></item><item><title>谷歌浏览器快速体验</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856844/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/405.html/feed/</wfw:commentRss><description>&lt;p&gt;今天google公司在全球超过100个国家发布了一款google浏览器chrome。现在的下载体验地址：&lt;a href=&quot;http://www.google.com/chrome/index.html?hl=zh_CN&amp;#038;brand=CHMG&amp;#038;utm_source=zh_CN-hpp&amp;#038;&lt;br /&gt;
utm_medium=hpp&amp;#038;utm_campaign=zh_CN&quot;&gt;http://www.google.com/chrome/index.html?hl=zh_CN&amp;#038;&lt;br /&gt;
brand=CHMG&amp;#038;utm_source=zh_CN-hpp&amp;#038;utm_medium=hpp&amp;#038;utm_campaign=zh_CN&lt;/a&gt;。安装之后打开界面一如google一贯的风格，简约而不简单，没有了工具栏而将相关信息移下下方的下拉菜单中，让用户可以在一屏上阅读获取更多信息，他继承了一些mozilla和apple浏览器的优点，同时设计了一个更加高效的js引擎。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/chrome1.gif' alt='chrome1.gif' /&gt;&lt;/div&gt;
&lt;p&gt;最大的优点在于google已经承诺chrome是一个跨平台的软件，不仅仅适用windows,而且还适用于linux,mac，就这点我真的希望他能走得更远。&lt;/p&gt;
&lt;p&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-2192637126578273&quot;;
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = &quot;468x60_as&quot;;
google_ad_type = &quot;image&quot;;
//2007-09-06: blog
google_ad_channel = &quot;3480229846&quot;;
google_color_border = &quot;FFFFFF&quot;;
google_color_bg = &quot;FFFFFF&quot;;
google_color_link = &quot;999999&quot;;
google_color_text = &quot;FFFFFF&quot;;
google_color_url = &quot;804000&quot;;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
  src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id=&quot;adsense&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-2192637126578273&quot;;
/* 250x250, å��å»ºäº� 08-3-16 */
google_ad_slot = &quot;2153534011&quot;;
google_ad_width = 250;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;&lt;/div&gt;&lt;/p&gt;</description><category>chrome</category><category>Internet</category><category>google</category><pubDate>Wed, 03 Sep 2008 08:56:43 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/405.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/405.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/405.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856844/4059641</fs:itemid></item><item><title>更新J2EE集成开发环境</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856845/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/401.html/feed/</wfw:commentRss><description>&lt;p&gt;进行j2EE开发的开发者可能多数都在使用eclipse+myeclipse的集成环境，我也一直在使用myeclipse直到今天在重装系统之后发现myeclipse站点已经无法访问了于是决定彻底放弃以前的破解版本，当然如果你认为几十美金对你来说是小菜一碟可以继续使用他。好像myeclipse有个专门的中国技术支持推广站点用于推销其产品的，有兴趣可以去购买一个。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;其实eclipse的插件非常多myeclipse无非也就是把N多插件集成到一起所以感觉很方便，如果从这个角度讲我们也可以从浩瀚的开源插件库中组装一个自己的myeclipse。要替换还在使用的哪些破解版myeclipse首选就是WTP插件了他提供了进行java web开发的很多工具我们可以在下面编写jsp/servlet/css/js等等可以部署各种服务器。插件地址：&lt;a href=&quot;http://www.eclipse.org/webtools/&quot;&gt;http://www.eclipse.org/webtools/&lt;/a&gt;，他的服务器部署不同于myeclipse不是将你的项目发布到已安装好的tomcat webapp目录下，感觉好像是从本地tomcat虚拟了一个tomcat一样，用起来都一样。&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/wpt.png' alt='wpt.png' /&gt;&lt;/div&gt;
&lt;p&gt;作为j2ee开发可能还需要struts/spring插件，这些插件在myeclipse下是出了名的方便，打造一个开源的IDE这些是不可缺少的,strutsIDE插件是进行struts开发的好工具,还有springIDE插件集成在一起同样很方便我们开发。&lt;/p&gt;
&lt;p&gt;strutsIDE:&lt;a href=&quot;http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=StrutsIDE&quot;&gt;http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=StrutsIDE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;springIDE:&lt;a href=&quot;http://springide.org/project/wiki/SpringideInstall&quot;&gt;http://springide.org/project/wiki/SpringideInstall&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hibernate Tools: &lt;a href=&quot;http://www.hibernate.org/6.html&quot;&gt;http://www.hibernate.org/6.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其他我们必须的类似SQLdevelopment在WTP下都已有，一个开源的可以取代myeclipse的J2EE集成开发环境就可以搭建成了。看看效果：&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/struts.png' alt='struts.png' /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/spring.png' alt='spring.png' /&gt;&lt;/div&gt;
&lt;p&gt;我们可以通过eclipse的link方式安装插件便于我们维护和更新插件，另外由于没有myclipse那么庞大运行的速度相对可以快一点&lt;/p&gt;
&lt;p&gt;集成包下载地址：&lt;a href=&quot;http://rapidshare.de/files/40374423/wtp-J2EE.tar.gz.html&quot;&gt;http://rapidshare.de/files/40374423/wtp-J2EE.tar.gz.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>开发</category><category>eclipse</category><category>java</category><category>j2ee</category><pubDate>Tue, 02 Sep 2008 09:50:44 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/401.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/401.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/401.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856845/4059641</fs:itemid></item><item><title>linux x-server 崩溃了</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856846/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/400.html/feed/</wfw:commentRss><description>&lt;p&gt;前段时间调试java输出图形把x-server的一些底层类库rpm包给破坏了今天开了电脑已经无法进入xwindow界面，找了启动盘进行恢复linux rescue之后发现chroot /mnt/sysimage命令不启作用，于是就手工开始挂载坏了的系统到/mnt上  mount -t ext3  /dev/sda7  /mnt,有几个区怎么也挂载不到，幸好资料都在可以挂载的分区上做了备份，看样子只能是重装了。原来系统是Federo8的，这次打算装个9。关于linux rescue恢复一直是救援系统的好办法，一般使用命令chroot就可以挂载到要恢复的系统，如果此命令无效就只有手工来挂载坏了的系统。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>linux</category><pubDate>Thu, 28 Aug 2008 23:57:11 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/400.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/400.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/400.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856846/4059641</fs:itemid></item><item><title>ubuntu8.10应该长什么样？</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856847/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/399.html/feed/</wfw:commentRss><description>&lt;p&gt;ubuntu现在最新版本是8,04不过官方网站上已经预告了今年的10月30日将发布ubuntu8.10。今天上网在国外论坛上看到了有关ubuntu8,10的桌面，当然这只能算一个mockup，网友心中的mockup。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh4.ggpht.com/yustarwang/SLEsoBOKsJI/AAAAAAAAArI/w0Gs9ZL3pYQ/ibexmockup.jpg?imgmax=512&quot; alt=&quot;ubuntu8.10&quot; width=&quot;459&quot; height=&quot;289&quot;/&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/yustarwang/SLEsoO1U_PI/AAAAAAAAArQ/hxfDH0wgAbw/ibexmockup2.jpg?imgmax=512&quot; alt=&quot;ubuntu8.10&quot; width=&quot;459&quot; height=&quot;289&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/yustarwang/SLEsoVnTOXI/AAAAAAAAArY/qs7gJSEPgDM/ibexmockup31.jpg?imgmax=512&quot; alt=&quot;ubuntu8.10&quot; width=&quot;459&quot; height=&quot;289&quot;/&gt;&lt;/div&gt;
&lt;p&gt;确实够漂亮的，挺喜欢的！&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>ubuntu</category><category>linux</category><category>桌面</category><pubDate>Sun, 24 Aug 2008 17:38:19 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/399.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/399.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/399.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856847/4059641</fs:itemid></item><item><title>Linux打造绚丽的Mac桌面</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856848/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/398.html/feed/</wfw:commentRss><description>&lt;p&gt;delicious上看到一篇介绍linux桌面的文章被上面绚丽的桌面深深吸引，于是立即动手把自己的电脑桌面彻底翻新了一下，主要是用&lt;a href=&quot;https://launchpad.net/awn&quot;&gt;Avant windows navigation&lt;/a&gt;/&lt;a href=&quot;http://sourceforge.net/projects/mac4lin&quot;&gt;Mac4lin theme&lt;/a&gt;,另外开通ubuntu3D特效，整个效果仿Mac&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/yustarwang/SKzZ_udnubI/AAAAAAAAAqQ/ocPF7a_9QGY/mydesktop1.png?imgmax=800&quot; width=&quot;459&quot; height=&quot;344&quot; alt=&quot;my linux desktop&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh5.ggpht.com/yustarwang/SKzZ_hHmSaI/AAAAAAAAAqY/rRAgvlu_jWo/mydesktop2.png?imgmax=800&quot; width=&quot;459&quot; height=&quot;344&quot; alt=&quot;my linux desktop&quot; width=&quot;459&quot; height=&quot;344&quot; /&gt;&lt;/div&gt;
&lt;p&gt;再欣赏几个经典的：&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh5.ggpht.com/yustarwang/SKw58QX3_4I/AAAAAAAAApY/qDpF3v9mVZY/stefan01.png?imgmax=512&quot; alt=&quot;my linux desktop&quot;  width=&quot;459&quot; height=&quot;286&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/yustarwang/SKw58lIXIgI/AAAAAAAAApg/Hctkhl4R23c/stefan02.png?imgmax=512&quot; alt=&quot;my linux desktop&quot;  width=&quot;459&quot; height=&quot;286&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/yustarwang/SKw58gZ7HfI/AAAAAAAAApo/Snqf-Kte6Lg/tdreyer1.png?imgmax=512&quot; alt=&quot;my linux desktop&quot;  width=&quot;459&quot; height=&quot;286&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src=&quot;http://lh3.ggpht.com/yustarwang/SK1wH51iJEI/AAAAAAAAArA/v51R52bijFk/desktop.png?imgmax=512&quot; alt=&quot;my linux desktop&quot;  width=&quot;459&quot; height=&quot;286&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>ubuntu</category><category>linux</category><category>桌面</category><pubDate>Thu, 21 Aug 2008 21:41:36 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/398.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/398.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/398.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856848/4059641</fs:itemid></item><item><title>奥运第九天 －  刘翔</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856849/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/397.html/feed/</wfw:commentRss><description>&lt;p&gt;China&amp;#8217;s Liu Xiang out of Olympics  －－  CNN&lt;br /&gt;
China&amp;#8217;s biggest star hurt －－ Yahoo&lt;br /&gt;
Injured Liu pulls out of hurdles &amp;#8212; BBC&lt;br /&gt;
China’s Big Hope Doesn’t Get Out of Blocks －－ NewYork Times&lt;br /&gt;
Liu Xiang, Chinese hurdler, pulls out of 110-meter race &amp;#8212; International Herald Tribune&lt;/p&gt;
&lt;p&gt;Losing a chance to defend his gold, Liu Xiang — the hurdler who has carried so many of China&amp;#8217;s hopes for glory — limped off the track before the first round of the 110-meter hurdles. &amp;#8212; International Herald Tribune&lt;/p&gt;</description><category>生活</category><pubDate>Mon, 18 Aug 2008 14:13:25 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/397.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/397.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/397.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856849/4059641</fs:itemid></item><item><title>博客相册更新</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856850/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/395.html/feed/</wfw:commentRss><description>&lt;p&gt;我的博客相册一直用的google的picasa在WP下的一个插件&lt;a href=&quot;http://yustar.joomlar.cn/archives/285.html&quot;&gt;wordpress-picasa插件的使用(PHP4.3)&lt;/a&gt;,他通过google提供的开放API来获取图片，中间数据存储在缓存中，今天我清除缓存之后却发生错误，无法获取图片。但从google搜索出的连接依旧可以访问，估计是图片列表页的链接生成有错误，这些数据来自google picasa API接口有可能数据格式发生了变化。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;修改方法,找到picasa-web下的文件picasa.inc.php，找这几行：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;php&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$id_begin&lt;/span&gt; 	= &lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;id&lt;/span&gt;-&amp;gt;_t, &lt;span style=&quot;color: #ff0000;&quot;&gt;'albumid/'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$id_end&lt;/span&gt; 	= &lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;id&lt;/span&gt;-&amp;gt;_t, &lt;span style=&quot;color: #ff0000;&quot;&gt;'?'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$id_base&lt;/span&gt; 	= &lt;span style=&quot;color: #000066;&quot;&gt;substr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;id&lt;/span&gt;-&amp;gt;_t, &lt;span style=&quot;color: #0000ff;&quot;&gt;$id_begin&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$id_end&lt;/span&gt; - &lt;span style=&quot;color: #0000ff;&quot;&gt;$id_begin&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$img_update&lt;/span&gt; = &lt;span style=&quot;color: #000066;&quot;&gt;substr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;published&lt;/span&gt;-&amp;gt;_t, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;替换如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;php&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$id_begin&lt;/span&gt; 	= &lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'albumid/'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$id_end&lt;/span&gt; 	= &lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'?'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$id_base&lt;/span&gt; 	= &lt;span style=&quot;color: #000066;&quot;&gt;substr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;href&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$id_begin&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$id_end&lt;/span&gt; - &lt;span style=&quot;color: #0000ff;&quot;&gt;$id_begin&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$img_update&lt;/span&gt; = &lt;span style=&quot;color: #000066;&quot;&gt;substr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$album&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;published&lt;/span&gt;-&amp;gt;_t, &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;清空缓存之后OK！&lt;/p&gt;
&lt;p&gt;不知道这些数据格式是早就变了，还是最近才变的，一直也没太多注意。&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>php&amp;amp;Joomla</category><category>Picasa</category><pubDate>Sat, 16 Aug 2008 17:52:32 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/395.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/395.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/395.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856850/4059641</fs:itemid></item><item><title>csdn被咔嚓掉了</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856851/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/394.html/feed/</wfw:commentRss><description>&lt;p&gt;国内最大的软件开发者平台csdn因涉及奥运视频被咔嚓掉了，从昨晚开始已经不能在访问了。我的感觉是无法想象！&lt;/p&gt;</description><category>生活</category><category>csdn</category><pubDate>Wed, 13 Aug 2008 08:59:55 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/394.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/394.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/394.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856851/4059641</fs:itemid></item><item><title>spring的分散配置</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856852/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/393.html/feed/</wfw:commentRss><description>&lt;p&gt;一般我们可以使用bean配置文件来装配我们的系统，但有时候会发现将单个的配置文件分散成多个是很好的选择。比如在我们配置系统的过程中通常都要配置数据库dataSource，但如果将这种组件的配置信息和我们的spring系统装配信息发布到一个文件中感觉似乎有点凌乱了，这时候最好就是能有多个配置文件将我们的组件配置信息和系统的装配信息分割开来，便于我们阅读与维护理解。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;如果不加区分，那么配置了dataSource的bean装配文件如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;bean&lt;/span&gt; id = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;dataSource&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=
                 &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.springframework.jdbc.datasource.DriverManagerDataSource&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;driverClassName&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;username&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/bean&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;这里的几个属性的value比如username,password等等都是通过硬编码直接写入到我们的装配文件中。如果使用ApplicationContext作为我们的spring容器那么通过spring的PropertyPlaceholderConfigurer就可以告诉spring从外部的属性文件获取属性从而将配置信息与装配信息分离开来。&lt;/p&gt;
&lt;p&gt;这样我就只需要在spring中定义如下信息告诉spring去获取另外一个jdbc.properties文件所包含的配置信息。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;bean&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;propertyConfigurer&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;location&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;jdbc.properties&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/bean&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;如果使用多个配置文件则在location属性下设置list值，如下:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;locations&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;list&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;jdbc.properties&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;security.properties&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/list&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;通过调用外部属性文件，现在在装配文件中我们就可以使用占位符来替换之前的硬编码了。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;bean&lt;/span&gt; id = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;dataSource&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=
                 &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.springframework.jdbc.datasource.DriverManagerDataSource&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;${database.url}&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;driverClassName&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;${database.driver}&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;username&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;${database.username}&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
     &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;${database.password}&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/bean&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;占位符的表达式有点类似我们常用的EL表达式形式，当上下文载入的时候占位符就被properties中的属性所替换。&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>spring</category><category>jdbc</category><category>java</category><pubDate>Tue, 12 Aug 2008 10:28:48 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/393.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/393.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/393.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856852/4059641</fs:itemid></item><item><title>Spring中的注入方式</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856853/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/392.html/feed/</wfw:commentRss><description>&lt;p&gt;对于在spring中的依赖注入方式有两种方式可选一种是通过set方式注入，另外一种就是使用构造函数的方式注入。spring没有强制使用某种方式，使用者可以根据自己的情况来选择，一般对于构造参数单一的情况可以选择使用构造函数注入这样没必要额外再写多余的set方法，构造注入有个特点就是使用强依赖契约，如果没有提供所需依赖则不能完成bean的实例化。对于set方式的注入则没有这种情况。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;构造注入有时候也会有点问题，对于构造参数如果多于一个而且类型一样这时候就增加了构造函数的参数不确定性，spring对此的解决办法是增加index和type类型属性，如果参数类型不一样我们可以在容器中使用type来区分，如果类型一样则使用index来区分。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;bean&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;informationImpl&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;com.info.informationDAOImpl&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;constructor-arg&lt;/span&gt;  &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;java.lang.String&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;helloTest&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/constructor-arg&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;constructor-arg&lt;/span&gt;  &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;java.net.URL&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://yustar.joomlar.cn&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/constructor-arg&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/bean&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;当然上面的方式也可以使用index来区分&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;bean&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;informationImpl&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;com.info.informationDAOImpl&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;constructor-arg&lt;/span&gt;  &lt;span style=&quot;color: #000066;&quot;&gt;index&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;helloTest&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/constructor-arg&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;constructor-arg&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;index&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://yustar.joomlar.cn&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/constructor-arg&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/bean&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;对于多参数而且参数多是可选的情况使用set注入则更加合理。只要将上述配置文件中的constructor-arg替换为property就可以。如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;bean&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;informationImpl&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;com.info.informationDAOImpl&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;arg1&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;helloTest&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;arg2&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;http://yustar.joomlar.cn&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/value&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/property&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/bean&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>spring</category><category>java</category><category>依赖注入</category><pubDate>Mon, 11 Aug 2008 09:24:05 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/392.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/392.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/392.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856853/4059641</fs:itemid></item><item><title>东莞游</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856854/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/383.html/feed/</wfw:commentRss><description>&lt;p&gt;周五下午去东莞虎门见亲戚,晚上一起看了奥运开幕式,第二天顺便去了趟莞城,我来广东也有好几年了东莞没去过几次,这次既然来了就顺便也到处看看。东莞的城市化进程这两年似乎更快了，城市的路更宽，楼更新也更高，有条路让我感觉似乎更象深圳的深南大道，两边的楼设计的各不一样，中间是条宽宽的绿化带，有那么一种在深南路上的感觉。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;第八届汽车博览会&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040141.JPG' alt='p1040141.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;人民公园一角&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040135.JPG' alt='p1040135.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;荷花绽放&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040132.JPG' alt='p1040132.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;莞太大道上各异的建筑-东莞图书馆&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040147.JPG' alt='p1040147.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;东莞会议中心&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040150.JPG' alt='p1040150.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;东莞市政府办公大楼&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040151.JPG' alt='p1040151.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;远望会展览中心，有点深圳会展的感觉&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040145.JPG' alt='p1040145.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;东莞大剧院&lt;/p&gt;
&lt;div class='pic'&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/p1040156.JPG' alt='p1040156.JPG' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;!--adsense--&gt;&lt;/p&gt;</description><category>生活</category><category>adsense</category><category>建筑</category><category>设计</category><category>东莞</category><category>旅游</category><pubDate>Sat, 09 Aug 2008 22:13:17 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/383.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/383.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/383.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856854/4059641</fs:itemid></item><item><title>mysql5.0存储过程使用</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856855/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/382.html/feed/</wfw:commentRss><description>&lt;p&gt;mysql从5.0开始已经可以使用存储过程，5.0.13版本之后的可以支持function，mysql5.0支持sql2003标准但还不能传递数组参数。项目中有多条sql的批处理要求，自然想到了使用mysql的存储过程。因为无法使用数组传递参数这样就需要变换一下方式，采用字符串的形式往mysql存储过程中传递批处理语句，然后由mysql来解析需要处理的sql再拼装。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;参考例子：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;sql&quot;&gt;DELIMITER $$
&amp;nbsp;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;DROP&lt;/span&gt; PROCEDURE &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;EXISTS&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;`lottery`&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;`updateCategories`&lt;/span&gt;$$
&amp;nbsp;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;CREATE&lt;/span&gt; DEFINER=&lt;span style=&quot;color: #ff0000;&quot;&gt;`root`&lt;/span&gt;@&lt;span style=&quot;color: #ff0000;&quot;&gt;`localhost`&lt;/span&gt; PROCEDURE &lt;span style=&quot;color: #ff0000;&quot;&gt;`mutliQuery`&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IN&lt;/span&gt; update_sql VARCHAR&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;500000&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
BEGIN
       DECLARE pos SMALLINT;
       DECLARE str VARCHAR&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
       &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; @update_sql = update_sql;
       &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt; @update_sql&amp;lt;&amp;gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;''&lt;/span&gt; THEN
         WHILE @update_sql&amp;lt;&amp;gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;''&lt;/span&gt; DO
           &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; pos = POSITION&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;';'&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IN&lt;/span&gt; @update_sql&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
           &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt; pos &amp;gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; THEN
              &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; @str = TRIM&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;LEFT&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;@update_sql, pos&lt;span style=&quot;color: #cc66cc;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
              &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SET&lt;/span&gt; @update_sql = &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;RIGHT&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;@update_sql, CHAR_LENGTH&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;@update_sql&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; - pos&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;          
              PREPARE stmt &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; @str;
              EXECUTE stmt;       
           END &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt;;  
         END WHILE;
       END &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IF&lt;/span&gt;;
END$$
&amp;nbsp;
DELIMITER ;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>mysql</category><pubDate>Fri, 08 Aug 2008 12:49:46 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/382.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/382.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/382.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856855/4059641</fs:itemid></item><item><title>Spring接口注入的三种方式</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856856/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/381.html/feed/</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Type1 接口注入&lt;/strong&gt;&lt;br /&gt;
我们常常借助接口来将调用者与实现者分离。如：&lt;/p&gt;
&lt;p&gt;public class ClassA {&lt;br /&gt;
private InterfaceB clzB;&lt;br /&gt;
public init() {&lt;br /&gt;
Ojbect obj =&lt;br /&gt;
Class.forName(Config.BImplementation).newInstance();&lt;br /&gt;
clzB = (InterfaceB)obj;&lt;br /&gt;
}&lt;br /&gt;
……&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;上面的代码中，ClassA依赖于InterfaceB的实现，如何获得InterfaceB实现类的实例？传统的方法是在代码中创建InterfaceB实现类的实例，并将起赋予clzB。&lt;/p&gt;
&lt;p&gt;而这样一来，ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离，于是有了上面的代码，我们根据预先在配置文件中设定的实现类的类名，动态加载实现类，并通过InterfaceB强制转型后为ClassA所用。&lt;/p&gt;
&lt;p&gt;这就是接口注入的一个最原始的雏形。&lt;/p&gt;
&lt;p&gt;而对于一个Type1型IOC容器而言，加载接口实现并创建其实例的工作由容器完成，如J2EE开发中常用的Context.lookup（ServletContext.getXXX），都是Type1型IOC的表现形式。&lt;/p&gt;
&lt;p&gt;Apache Avalon是一个典型的Type1型IOC容器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Type2构造子注入&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;构造子注入，即通过构造函数完成依赖关系的设定，如：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; DIByConstructor &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;final&lt;/span&gt; DataSource dataSource;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;String&lt;/span&gt; message;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; DIByConstructor&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;DataSource ds, &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;String&lt;/span&gt; msg&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;dataSource&lt;/span&gt; = ds;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;message&lt;/span&gt; = msg;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;
……
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;可以看到，在Type2类型的依赖注入机制中，依赖关系是通过类构造函数建立，容器通过调用类的构造方法，将其所需的依赖关系注入其中。&lt;/p&gt;
&lt;p&gt;PicoContainer（另一种实现了依赖注入模式的轻量级容器）首先实现了Type2类型的依赖注入模式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Type3设值注入&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在各种类型的依赖注入模式中，设值注入模式在实际开发中得到了最广泛的应用（其中很大一部分得力于Spring框架的影响）。&lt;/p&gt;
&lt;p&gt;在笔者看来，基于设置模式的依赖注入机制更加直观、也更加自然。Quick Start中的示例，就是典型的设置注入，即通过类的setter方法完成依赖关系的设置。&lt;/p&gt;
&lt;p&gt;几种依赖注入模式的对比总结&lt;/p&gt;
&lt;p&gt;接口注入模式因为具备侵入性，它要求组件必须与特定的接口相关联，因此并不被看好，实际使用有限。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Type2 构造子注入的优势：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、“在构造期即创建一个完整、合法的对象”，对于这条Java设计原则，Type2无疑是最好的响应者。&lt;/p&gt;
&lt;p&gt;2、避免了繁琐的setter方法的编写，所有依赖关系均在构造函数中设定，依赖关系集中呈现，更加易读。&lt;/p&gt;
&lt;p&gt;3、由于没有setter方法，依赖关系在构造时由容器一次性设定，因此组件在被创建之后即处相对“不变”的稳定状态，无需担心上层代码在调用过程中执行setter方法对组件依赖关系产生破坏，特别是对于Singleton模式的组件而言，这可能对整个系统产生重大的影响。&lt;/p&gt;
&lt;p&gt;4、同样，由于关联关系仅在构造函数中表达，只有组件创建者需要关心组件内部的依赖关系。对调用者而言，组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息，也为系统的层次清晰性提供了保证。&lt;/p&gt;
&lt;p&gt;5、通过构造子注入，意味着我们可以在构造函数中决定依赖关系的注入顺序，对于一个大量依赖外部服务的组件而言，依赖关系的获得顺序可能非常重要，比如某个依赖关系注入的先决条件是组件的DataSource及相关资源已经被设定。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Type3设值注入的优势&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、对于习惯了传统JavaBean开发的程序员而言，通过setter方法设定依赖关系显得更加直观，更加自然。&lt;/p&gt;
&lt;p&gt;2、如果依赖关系（或继承关系）较为复杂，那么Type2模式的构造函数也会相当庞大（我们需要在构造函数中设定所有依赖关系），此时Type3模式往往更为简洁。&lt;/p&gt;
&lt;p&gt;3、对于某些第三方类库而言，可能要求我们的组件必须提供一个默认的构造函数（如Struts中的Action），此时Type2类型的依赖注入机制就体现出其局限性，难以完成我们期望的功能。&lt;/p&gt;
&lt;p&gt;可见，Type2和Type3模式各有千秋，而Spring、PicoContainer都对Type2和Type3类型的依赖注入机制提供了良好支持。这也就为我们提供了更多的选择余地。理论上，以Type2类型为主，辅之以Type3类型机制作为补充，可以达到最好的依赖注入效果，不过对于基于 Spring Framework开发的应用而言，Type3使用更加广泛。&lt;/p&gt;
&lt;p&gt;转自:http://www.51cto.com/specbook/223/60966.htm&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>spring</category><category>java</category><category>struts</category><category>j2ee</category><pubDate>Wed, 06 Aug 2008 09:04:04 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/381.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/381.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/381.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856856/4059641</fs:itemid></item><item><title>开放的奥运</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856857/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/380.html/feed/</wfw:commentRss><description>&lt;p&gt;奥运会已经进入了四天的倒记时，真的要感谢奥运让我也体会了一把开放的深意。我昨晚在网络上发现似乎现在的网络真的要开放了好多。自从sourceforge被解封之后，陆续有N多不能访问的站点开始进入我们的网络世界中，像维基百科，youtube，甚至包括像大赦国际，人权观察这些“严重违禁&amp;#8221;站点也都能访问。我浏览了一会youtube没有什么内容限制，而且访问速度非常快，很流畅，一时间我真有点羡慕那些一直可以像我今天这样浏览youtube的人。&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;这一切应该是在京外国记者的功劳，因为解禁的这些网站似乎都是外国记者所关注的，对于一些更技术化的和更专业一点的网站似乎还有一定的限制。就不知道这种开放可以维持多久？&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>生活</category><category>YouTube</category><category>GE</category><pubDate>Mon, 04 Aug 2008 09:13:39 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/380.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/380.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/380.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856857/4059641</fs:itemid></item><item><title>三款linux QQ软件</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856858/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/379.html/feed/</wfw:commentRss><description>&lt;p&gt;目前来讲linux下的qq软件有三个版本，pidgin,linuxqq,evaqq。其中linuxqq是腾讯上个月底推出的目前还是preview版本。三个版本从我使用的效果来看evaqq是最佳选择。不过从长远来说还是要看好腾讯的linuxqq，毕竟是官方即使目前版本很弱但要用发展的眼光来看:)&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;pidgin是我最早使用的linux下qq版本，可以登录多种互联网通讯协议的即时通，用他来上qq，你的CPU一定要够快起码要比我的AMD双核2.2要强，因为我已经感觉他在我电脑上跑起来效率不太高，两个核基本都能占用到60％，开一些其他的软件的时候比如浏览器。程序运行的效率介乎于linuxqq和evaqq之间。关键一点，不太稳定 对话框写的话多一点了就会死，我的系统是ubuntu8.0.4不知道其他人有没有这个现象发生。对群的支持也不好，很多群都显示不出来，没有语音系统，qq的一些基本功能还是欠缺。&lt;/p&gt;
&lt;p&gt;linuxqq preview版 腾讯在linux用户期待多年后于今年7月底推出的。因为是官方的版本不得不说，程序的效率还是有点差作为GUI程序，你点一下，然后对话框出来了，内容还要等几秒甚至更长时间，资源耗费也是个问题，有这么两个对话框在开启的状态，我一看CPU，一个98％，一个64％，这个怎么用呢？最大的麻烦就是功能，用官方的话说仅能满足最低的聊天需要，其他的功能你就想吧，没有语音，有群功能也仅仅是群聊而已，程序还算比较稳定运行起来，不过话说回来就是个聊天功能其他什么也没有。有总比没有要强，有了才会有改进和升级，我还是看好官方版。&lt;/p&gt;
&lt;p&gt;evaqq 目前我感觉效能最高而且功能方面确实要比前两个要完善很多，很多方面做到了与windows下官方qq一致，即使是屏幕截图以及快捷键的使用，用着很习惯，运行效率也比较快，资源占用好像比前面两个稍微低一点主要是CPU。暂时不能语音视频聊天，除此以外的功能我感觉已经非常不错了。用一句俗话说已经很像windows版 qq了。&lt;/p&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>腾讯</category><category>linux</category><category>qq</category><pubDate>Sun, 03 Aug 2008 23:54:37 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/379.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/379.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/379.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856858/4059641</fs:itemid></item><item><title>腾讯官方首推Linux版QQ</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856859/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/376.html/feed/</wfw:commentRss><description>&lt;p&gt;真是期待了又期待，等待了又等待，观望了又观望，总算在公元2008年七月的最后一天发布了，早上刚写了一篇&lt;a href=&quot;http://yustar.joomlar.cn/archives/375.html&quot;&gt;《又被腾讯忽悠了》&lt;/a&gt;，没想中午腾讯真的发布了，呵呵。真的好多linux用户都在翘首期盼，下载地址：&lt;a href=&quot;http://im.qq.com/qq/linux/&quot;&gt;http://im.qq.com/qq/linux/&lt;/a&gt;。目前跨平台开发是大势所趋，微软的晕到死已经不能代表所有的桌面用户，每年200万台预装linux的系统不能不让商家重新考虑。&lt;br /&gt;
&lt;!--more--&gt;&lt;br /&gt;
迅速去体验一下，目前preview版本对系统要求：&lt;/p&gt;
&lt;p&gt;Linux kernel：2.6， GTK：2.10及更高&lt;/p&gt;
&lt;p&gt;使用版本：&lt;/p&gt;
&lt;p&gt;SuSE 9 或更高；&lt;br /&gt;
Ubuntu 7.10或更高；&lt;br /&gt;
Fedora Core 8或更高；&lt;/p&gt;
&lt;p&gt;另外支持：64位操作系统&lt;/p&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/linuxqq.png' alt='linuxqq.png' /&gt;&lt;/div&gt;
&lt;div class=&quot;pic&quot;&gt;&lt;img src='http://yustar.joomlar.cn/wp-content/screenshot-qq.png' alt='screenshot-qq.png' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--adsense--&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--adsense#adtext--&gt;&lt;/p&gt;</description><category>腾讯</category><category>linux</category><category>qq</category><pubDate>Thu, 31 Jul 2008 12:42:59 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/376.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/376.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/376.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856859/4059641</fs:itemid></item><item><title>又被腾讯忽悠了</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856860/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/375.html/feed/</wfw:commentRss><description>&lt;p&gt;早在上个月就听说腾讯即将推出linux上的qq官方版，我一直是在使用pidgin上qq不过也只能算是可以用，性能方面实在是跟我理想的要求有很大距离，不太稳定强占资源。毕竟pidgin非官方产品而且腾讯是出了名的霸道，别人能开发一个qq的功能已算不易。媒体大肆报道说，腾讯将在本月推出linux上的官方版，昨天已经是7月30日我在腾讯的新闻频道也看到了这条新闻，可惜啊估计就跟他们的网页版IM一样也是个忽悠，腾讯也算是在中国互联网有一定影响力的企业，没成想说话也这么不靠谱，我记得很多大公司对外舆论都有严格规范的，任何企业员工都需要对自己的言论负责，对公司形象负责，没想到的是qq的对外言论就这么轻率，是不是这就是一个企业的作风？&lt;/p&gt;</description><category>linux</category><category>生活</category><category>qq</category><pubDate>Thu, 31 Jul 2008 09:09:30 +0800</pubDate><author>admin</author><comments>http://yustar.joomlar.cn/archives/375.html#comments</comments><guid isPermaLink="false">http://yustar.joomlar.cn/archives/375.html</guid><dc:creator>admin</dc:creator><fs:srclink>http://yustar.joomlar.cn/archives/375.html</fs:srclink><fs:srcfeed>http://yustar.joomlar.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/yustar/~5933205/110856860/4059641</fs:itemid></item><item><title>Acegi配置</title><link>http://item.feedsky.com/~feedsky/yustar/~5933205/110856861/4059641/1/item.html</link><wfw:commentRss>http://yustar.joomlar.cn/archives/374.html/feed/</wfw:commentRss><description>&lt;p&gt;Acegi是基于Spring的一个开源的安全认证框架，现在的最新版本是1.04。Acegi的特点就是有很多的过滤器：不过我们也用不到这么多的过滤器，只是可以把它们看作为一个个的模块，在用的时候加上自己用的着的即可，由于认证的流程的方面比较复杂导致它的配置很复杂，如果能摸清它的工作原理还是不太难.下面用比较顺着人思维的流程过一遍&lt;br /&gt;
这里只列出常用的过滤器和拦载器&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;1. 过滤器：&lt;br /&gt;
HttpSessionContextIntegrationFilter，authenticationProcessingFilter，&lt;br /&gt;
BasicProcessingFilter，&lt;br /&gt;
RememberMeProcessingFilter，anonymousProcessingFilter,exceptionTranslationFilter&lt;br /&gt;
2. 拦截器：&lt;br /&gt;
filterSecurityInterceptor（其实它是过滤器，不过把它放在这里更能说明它的功能），methodSecurityInterceptor&lt;br /&gt;
看着上面的用红色标出的过滤器是用来认证（表单和HTTP基本认证，当然还有别的不过这两个比较长用）它们是资源访问的入口.其它的过滤器是用来辅助的：HttpSessionContextIntegrationFilter是用来把认证信息记录到Session中的 RememberMeProcessingFilter是以cookie的形式来保存认证信息的. anonymousProcessingFilter是在匿名的时候（这时候是没有认证信息的）给这个用户分配一个匿名的认证信息，exceptionTranslationFilter总结一下异常并处理.在实际中选择适合程序的即可.&lt;br /&gt;
上面只是资源访问的入口，真正保护资源的是这两个拦截器：filterSecurityInterceptor，拦截URL的类（它是个过滤器）&lt;br /&gt;
metohdSecurityInterceptor，拦截类中方法的调用，它们为什么要拦截呢？就是想在访问或调用这些方法之前来判断一下用户是否有访问或调用的权限，有就通过，没有就踢出.&lt;br /&gt;
除此之外，Acegi专门做了两个管理器（实际上就是两个类，为什么会用做这两个管理器，因为认证和授权都有一些的操作，这就需要专门做两个管理器了）：authenticationManager（class= org.acegisecurity.providers.ProviderManager），授权管理器 accessDecisionManager（class=org.acegisecurity.vote.AffirmativeBased）&lt;br /&gt;
说白了一个用于认证用户，一个是用于权限的授于的&lt;br /&gt;
先来说认证用户，认证管理器有什么东西呢？只内置了一些提供者：这些提供者呢又是什么呢，他们是提供用户的验证身份信息的，比如从数据库或配置文件里读出用户名和密码，在用户的cookie里读出身份信息（rememberMeProcessingFilter用到的[前面讲了的，有印象吧]），或在 Session里读出身份验证信息（HttpSessionContextIntegrationFilter起作用的），这里我们只说一下从数据库或配置文件里读出用户名密码来装配验证信息的，其它的配置类似可以找一下对应api在Spring里配置即可，daoAuthenticationProvider是数据库的提供者 class=org.acegisecurity.providers.dao.DaoAuthenticationProvider，而它提供的服务呢又有几种，数据库和配置文件（这是Acegi的两个默认的实现）当然也可以自己实现（实现userDetailsService接口就行）&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.providers.ProviderManager&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;providers&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.             &amp;lt;list&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.                 &amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;daoAuthenticationProvider&amp;quot;&lt;/span&gt;/&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.             &amp;lt;/list&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;.     &amp;lt;/bean&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;daoAuthenticationProvider&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.providers.dao.DaoAuthenticationProvider&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;.         &amp;lt;!-- &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;userDetailsService&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;InMemoryDaoImpl&amp;quot;&lt;/span&gt;/&amp;gt;&amp;lt;/property&amp;gt; --&amp;gt;&amp;lt;!-- 这里有两种选择 --&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;userDetailsService&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;jdbcDaoImpl&amp;quot;&lt;/span&gt;/&amp;gt;&amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt;.     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;如果用户名和密码在配置文件里可以用 InMemoryDaoImpl，class=org.acegisecurity.userdetails.memory.InMemoryDaoImpl，在这个类的userMap里配置即可：javafish=java,ROLE_USER，配置了一个用户名为javafish,密码为java,用户组为 ROLE_USER的用户，不过最常用的还是数据库的JDBC实现（两个二选一）org.acegisecurity.userdetails.jdbc.JdbcDaoImpl里面需要usersByUsernameQuery 和authoritiesByUsernameQuery还有数据源dataSource（有人问为什么呢，userByUsernameQuery是用来通过用户名来查密码的，authoritiesByUsernameQuery是用来通过用户名来查权限的，查询数据库肯定的用数据源吧这个里是用的 SpringFrameWork的DataSource）它们查询的sql语句是有讲究的，就是查密码的时候查三个第一个是username，第二个是 password，第三个是是否可用，查权限的时候查两个：username和authorities（具体看例子）&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;InMemoryDaoImpl&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.userdetails.memory.InMemoryDaoImpl&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;userMap&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.             &amp;lt;value&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.                 &lt;span style=&quot;color: #006600;&quot;&gt;javafish&lt;/span&gt;=java,ROLE_USER  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.             &amp;lt;/value&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;.     &amp;lt;/bean&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;.     &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;jdbcDaoImpl&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.userdetails.jdbc.JdbcDaoImpl&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;usersByUsernameQuery&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;.             &amp;lt;value&amp;gt;select username,password,enabled from users where username=?&amp;lt;/value&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authoritiesByUsernameQuery&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;13&lt;/span&gt;.             &amp;lt;value&amp;gt;select username,authority from authorities where username=?&amp;lt;/value&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;14&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;15&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;dataSource&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;16&lt;/span&gt;.             &amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;dataSource&amp;quot;&lt;/span&gt;/&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;17&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;18&lt;/span&gt;.     &amp;lt;/bean&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;19&lt;/span&gt;.       
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;20&lt;/span&gt;.     &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;dataSource&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.springframework.jdbc.datasource.DriverManagerDataSource&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;21&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;driverClassName&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;22&lt;/span&gt;.             &amp;lt;value&amp;gt;com.&lt;span style=&quot;color: #006600;&quot;&gt;mysql&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;jdbc&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;Driver&lt;/span&gt;&amp;lt;/value&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;23&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;24&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;25&lt;/span&gt;.             &amp;lt;value&amp;gt;jdbc:mysql:&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//localhost:3306/test&amp;lt;/value&amp;gt;  &lt;/span&gt;
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;26&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;27&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;username&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;28&lt;/span&gt;.             &amp;lt;value&amp;gt;root&amp;lt;/value&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;29&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;30&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;31&lt;/span&gt;.             &amp;lt;value&amp;gt;javafish&amp;lt;/value&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;32&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;33&lt;/span&gt;.     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;下面说一下授权，授权管理器又有什么东西呢？accessDecisionManager，Acegi把授权方面弄的比较的形象化，把某个URL或方法是否可以被访问按投票的形式来决定，&lt;/p&gt;
&lt;p&gt;Acegi提出来了几种方案：&lt;br /&gt;
1. 如果有一个赞成就同意（具体的说就是只要你在那个URL对应的几个用户组中的一个就让你访问）&lt;br /&gt;
2. 如果都赞成就同意（具本的说就是那个URL对应的几个用户组里都有你，你才能访问）&lt;br /&gt;
3. 如果都不反对就同意（这个在下面讲投票者的时候再说）&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;# &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;accessDecisionManager&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.vote.AffirmativeBased&amp;quot;&lt;/span&gt;&amp;gt;  
#         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;allowIfAllAbstainDecisions&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;!-- 是否让全部弃权的通过 --&amp;gt;  
#             &amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;  
#         &amp;lt;/property&amp;gt;  
#         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;decisionVoters&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;!-- 投票者们 --&amp;gt;  
#             &amp;lt;ref bean=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;roleVoter&amp;quot;&lt;/span&gt;/&amp;gt;  
#         &amp;lt;/property&amp;gt;  
#     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;而投票者呢：Acegi自己实现了一个投票者的类RoleVoter：&lt;br /&gt;
现在我用第一种方案，RoleVoter只是在URL对应的用户组里有ROLE_为前缀的才进行投票，否则的话弃权.（我们也可以在配置 RoleVoter的时候把ROLE_配置成为别的前缀如JAVA_），分别对URL对应的每个用户组投票，如果用户在这个用户组里就投赞成，不在投反对（在用户组的前缀是ROLE_的前提下）这样就不难体会第三种方案的用途了吧&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;roleVoter&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.vote.RoleVoter&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;rolePrefix&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.             &amp;lt;value&amp;gt;ROLE_&amp;lt;/value&amp;gt;&amp;lt;!-- 可以改成别的 --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样认证管理器和授权管理器就ok了，别的无论是过滤器还是拦截器都会用到它们两个，因为它们都要验证而这两个就是凭证.&lt;br /&gt;
那么那两个访问过滤器呢，先说authenticationProcessingFilter是用于表单登陆的&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationProcessingFilter&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.ui.webapp.AuthenticationProcessingFilter&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;ref bean=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;/&amp;gt;&amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationFailureUrl&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;value&amp;gt;/failure.&lt;span style=&quot;color: #006600;&quot;&gt;html&lt;/span&gt;&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;!--登陆失败转向的页面  --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;defaultTargetUrl&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;value&amp;gt;/ok.&lt;span style=&quot;color: #006600;&quot;&gt;html&lt;/span&gt;&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;!-- 登陆成功转向的页面 --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;filterProcessesUrl&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;value&amp;gt;/check&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;!-- 要验证的地址 --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.     &amp;lt;/bean&amp;gt;  
&amp;nbsp;
这样的话加上上面配置的认证管理器就已经可以处理登陆了（注意的是它没有用到授权管理器，因为它只是个访问入口还没有权限的授予）
再说一下HTTP基本认证：它比上面的略复杂一点
需要配置一个 
&amp;nbsp;
&amp;lt;pre lang=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;java&amp;quot;&lt;/span&gt;&amp;gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;BasicProcessingFilterEntryPoint&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;realmName&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;value&amp;gt;javafish&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;!-- 基本认证对话框上显示的字 --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.     &amp;lt;/bean&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;. 然后  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;BasicProcessingFilter&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.ui.basicauth.BasicProcessingFilter&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;.             &amp;lt;ref bean=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;/&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationEntryPoint&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;.             &amp;lt;ref bean=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;BasicProcessingFilterEntryPoint&amp;quot;&lt;/span&gt;/&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;.     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;/pre&gt;
&lt;p&gt;即可.&lt;br /&gt;
不过在HTTP基本认证里需要注意的地方是：好多人配置好了怎么看不到效果啊，一开始我也是很郁闷，看了BasicProcessingFilter的源代码：&lt;br /&gt;
String header = httpRequest.getHeader(&amp;#8221;Authorization&amp;#8221;);／／我们一般进入网页测试的时候这里的header始终是null的&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;logger.&lt;span style=&quot;color: #006600;&quot;&gt;isDebugEnabled&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.             &lt;span style=&quot;color: #006600;&quot;&gt;logger&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Authorization header: &amp;quot;&lt;/span&gt; + header&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.         &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.         &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;header != &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &amp;amp;&amp;amp; header.&lt;span style=&quot;color: #006600;&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Basic &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//从这里可以看到一般的登陆基本认证是不起作用的  &lt;/span&gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;. .................&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;只有在服务器上配置哪个目录在访问的时候用HTTP基本认证，它才会起作用（一开始还以为是Acegi的BUG呢）&lt;br /&gt;
下面说一下真正对URL资源的保护了filterSecurityInterceptor它的本质是个过滤器，有了前面＊管理器的基础了这就很容易了：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;# &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;filterSecurityInterceptor&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.intercept.web.FilterSecurityInterceptor&amp;quot;&lt;/span&gt;&amp;gt;  
#         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;&amp;gt;  
#             &amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;/&amp;gt;  
#         &amp;lt;/property&amp;gt;  
#         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;accessDecisionManager&amp;quot;&lt;/span&gt;&amp;gt;  
#             &amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;accessDecisionManager&amp;quot;&lt;/span&gt;/&amp;gt;  
#         &amp;lt;/property&amp;gt;  
#         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;objectDefinitionSource&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;!-- 把&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;URL&lt;/span&gt;和可访问的用户组对应起来 --&amp;gt;  
#             &amp;lt;value&amp;gt;  
#                 CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON&amp;lt;!-- 把&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;URL&lt;/span&gt;全部转化为小写 --&amp;gt;  
#                 PATTERN_TYPE_APACHE_ANT&amp;lt;!-- 以ANT的形式来配置路径 --&amp;gt;  
#                 /ok.&lt;span style=&quot;color: #006600;&quot;&gt;html&lt;/span&gt;=ROLE_USER  
#             &amp;lt;/value&amp;gt;  
#         &amp;lt;/property&amp;gt;  
#     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;光这样配置还是不够的，因为当授权失败的时候会抛出异常的，我们应该配置一个异常过滤器来捕获它，exceptionTranslationFilter它是用来捕获异常的，看一下配置吧：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;exceptionTranslationFilter&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.ui.ExceptionTranslationFilter&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.       &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationEntryPoint&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;ref local=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationProcessingFilterEntryPoint&amp;quot;&lt;/span&gt;/&amp;gt;&amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.       &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;accessDeniedHandler&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.         &amp;lt;bean &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.ui.AccessDeniedHandlerImpl&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.             &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;errorPage&amp;quot;&lt;/span&gt; value=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;/failure.html&amp;quot;&lt;/span&gt;/&amp;gt;&amp;lt;!-- 发生异常转向的网页 --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.         &amp;lt;/bean&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;.       &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;.    &amp;lt;/bean&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;.    &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationProcessingFilterEntryPoint&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint&amp;quot;&lt;/span&gt;&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;loginFormUrl&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;value&amp;gt;/Login.&lt;span style=&quot;color: #006600;&quot;&gt;html&lt;/span&gt;&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;!-- 得到表单的信息 --&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;forceHttps&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;!-- 不用https --&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;.    &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样就OK了&lt;br /&gt;
最后说一下对类中方法的保护：&lt;br /&gt;
首先写一个类并在spring中配置好：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;package&lt;/span&gt; org.&lt;span style=&quot;color: #006600;&quot;&gt;li&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;acegi&lt;/span&gt;;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.   
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;. &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; TestAcegi  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;. &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.     &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; Role&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.     &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;.         &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;javafish&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;.     &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;. &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;testAcegi&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.li.acegi.TestAcegi&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;然看写个servlet访问一下它&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;package&lt;/span&gt; org.&lt;span style=&quot;color: #006600;&quot;&gt;li&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;servlet&lt;/span&gt;;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.   
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import java.io.IOException;  &lt;/span&gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import java.io.PrintWriter;  &lt;/span&gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.   
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import javax.servlet.ServletException;  &lt;/span&gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import javax.servlet.http.HttpServlet;  &lt;/span&gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import javax.servlet.http.HttpServletRequest;  &lt;/span&gt;
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import javax.servlet.http.HttpServletResponse;  &lt;/span&gt;
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;.   
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import org.li.acegi.TestAcegi;  &lt;/span&gt;
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import org.springframework.context.ApplicationContext;  &lt;/span&gt;
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;13&lt;/span&gt;. &lt;span style=&quot;color: #a1a100;&quot;&gt;import org.springframework.web.context.support.WebApplicationContextUtils;  &lt;/span&gt;
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;14&lt;/span&gt;.   
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;15&lt;/span&gt;. &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; TestServlet &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; HttpServlet  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;16&lt;/span&gt;. &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;17&lt;/span&gt;.     &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;long&lt;/span&gt; serialVersionUID = -5610016980827214773L;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;18&lt;/span&gt;.   
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;19&lt;/span&gt;.     &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; doGet&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;HttpServletRequest request, HttpServletResponse response&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;20&lt;/span&gt;.             &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;IOException&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;21&lt;/span&gt;.     &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;22&lt;/span&gt;.         &lt;span style=&quot;color: #006600;&quot;&gt;response&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;setContentType&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/html;charset=GBK&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;23&lt;/span&gt;.         &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;PrintWriter&lt;/span&gt; out = response.&lt;span style=&quot;color: #006600;&quot;&gt;getWriter&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;24&lt;/span&gt;.         &lt;span style=&quot;color: #006600;&quot;&gt;ApplicationContext&lt;/span&gt; ctx =   
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;25&lt;/span&gt;.             &lt;span style=&quot;color: #006600;&quot;&gt;WebApplicationContextUtils&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;getRequiredWebApplicationContext&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;request.&lt;span style=&quot;color: #006600;&quot;&gt;getSession&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;getServletContext&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;26&lt;/span&gt;.         &lt;span style=&quot;color: #006600;&quot;&gt;TestAcegi&lt;/span&gt; test = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;TestAcegi&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;ctx.&lt;span style=&quot;color: #006600;&quot;&gt;getBean&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;testAcegi&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;27&lt;/span&gt;.         &lt;span style=&quot;color: #006600;&quot;&gt;test&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;Role&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//访问TestAcegi类的Role方法  &lt;/span&gt;
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;28&lt;/span&gt;.         &lt;span style=&quot;color: #006600;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;调用成功&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;29&lt;/span&gt;.     &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;30&lt;/span&gt;.   
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;31&lt;/span&gt;.     &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; doPost&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;HttpServletRequest request, HttpServletResponse response&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;32&lt;/span&gt;.             &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;throws&lt;/span&gt; ServletException, &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;IOException&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;33&lt;/span&gt;.     &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;34&lt;/span&gt;.         &lt;span style=&quot;color: #006600;&quot;&gt;doGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;request,response&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;35&lt;/span&gt;.     &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;36&lt;/span&gt;.   
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;37&lt;/span&gt;. &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;准备工作做好了，开始配置Acegi&lt;br /&gt;
先在Spring里给Acegi做个代理：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;autoProxyCreator&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;beanNames&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.             &amp;lt;list&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.                 &amp;lt;value&amp;gt;testAcegi&amp;lt;/value&amp;gt;&amp;lt;!-- 要代理的Bean的id --&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;.             &amp;lt;/list&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;interceptorNames&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;.             &amp;lt;list&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;.                 &amp;lt;value&amp;gt;methodSecurityInterceptor&amp;lt;/value&amp;gt;&amp;lt;!-- 代理为... --&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;.             &amp;lt;/list&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;11&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
  &lt;span style=&quot;color: #cc66cc;&quot;&gt;12&lt;/span&gt;.     &amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;里面的methodSecurityInterceptor呢配置为：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot;&gt;   &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;. &amp;lt;bean id=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;methodSecurityInterceptor&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;.         &amp;lt;property name=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;.             &amp;lt;ref bean=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;authenticationManager&amp;quot;&lt;/span&gt;/&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;.         &amp;lt;/property&amp;gt;  
   &lt;span style=&quot;color: #cc66cc;&quot;&