ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>久久在线视频,中文在线a√在线8,欧美专区一区二区三区http://www.aygfsteel.com/lijiajia418/category/14360.htmlVicent's blogzh-cnTue, 27 Feb 2007 12:16:53 GMTTue, 27 Feb 2007 12:16:53 GMT60Spring技巧之½Ž€‹zé…¾|?/title><link>http://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64972.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Tue, 22 Aug 2006 01:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64972.html</guid><wfw:comment>http://www.aygfsteel.com/lijiajia418/comments/64972.html</wfw:comment><comments>http://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lijiajia418/comments/commentRss/64972.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lijiajia418/services/trackbacks/64972.html</trackback:ping><description><![CDATA[Spring2.0在酾|®ä¸Šè°ƒæ•´äº†ä¸ž®‘地方,增加更加ç‰|´»ã€ç®€‹zçš„é…置方å¼åQŒæœ¬æ–‡é€šè¿‡ä¸¤ä¸ª½Ž€å•çš„½CÞZ¾‹æ¥æ¼”½Cºã€?br />      é…ç½®Apacheçš„ä¸€ä¸ªæ•°æ®æº˜qžæŽ¥æ± ï¼Œåœ¨Spring 2.0以å‰çš„版本中åQŒæˆ‘们å¯ä»¥ä‹É用类ä¼ég¸‹é¢çš„é…ç½®åQ?br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><!</span><span style="COLOR: #000000">DOCTYPE beans PUBLIC </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-//SPRING//DTD BEAN//EN</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  destroy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">driverClassName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />   </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />   </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">jdbc:mysql:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">127.0.0.1:3306/easyjf-bbs</value> </property></span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">><</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">root</span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">><</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">mypass</span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">></</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /> </span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">></span></div> <br />      在Spring2.0中,å¯ä»¥æŠ?lt;value>å?lt;ref>ä¸¤ä¸ªæ ‡ç­¾ä½œäØ“å…¶çˆ¶¾U?lt;bean>标签的一个属性æ¥å®šä¹‰åQŒè¿™æ ·ä‹Éå¾—é…¾|®æ–‡ä»¶æ›´åŠ ç®€‹z,如下所½Cºï¼š<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><!</span><span style="COLOR: #000000">DOCTYPE beans PUBLIC </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-//SPRING//DTD BEAN//EN</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  destroy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">driverClassName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />   value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />   value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:mysql://127.0.0.1:3306/easyjf-bbs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">root</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/></span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mypass</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/></span><span style="COLOR: #000000"><br /> </span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">></span></div><br /><br />       å¦å¤–åQŒSpring2.0中还有一个éžå¸¸å®žç”¨çš„è§£æžå™¨ï¼ŒSimplePropertyNamespaceHandleåQŒè‹¥é…置文äšg中引用http: //www.springframework.org/schema/p命ä×o½Iºé—´åQŒåˆ™ž®†ä¼šä½¿ç”¨ SimplePropertyNamespaceHandleæ¥å¤„ç†è¿™ä¸ªBean的定义,å¯ä»¥åœ¨Spring2.0中的Bean中以更简å•的方å¼é…置讑ր¼æ–¹æ³•注入,如下所½Cºï¼š<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">beans xmlns</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/schema/beans</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> xmlns:xsi</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.w3.org/2001/XMLSchema-instance</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> xmlns:p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/schema/p</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> xsi:schemaLocation</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br /><br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> destroy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  p:driverClassName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  p:url</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:mysql://127.0.0.1:3306/easyjf-bbs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> p:username</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">root</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> p:password</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mysql</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">></span></div><br /><br />在上é¢çš„é…置中,使用p:url则å¯ä»¥ç›´æŽ¥æ³¨å…¥BasicDataSourceçš„url属性å€û|¼Œå¯ä»¥ä½¿ç”¨p:url-ref属性æ¥å¼•用å¦å¤–一个Beanã€?br />    如,Spring2.0以å‰çš„一个DAOé…ç½®åQ?br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">userDao</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.easyjf.bbs.dbo.springjdbc.UserDaoSpringJdbc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />       </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">><</span><span style="COLOR: #000000">ref bean</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/></</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br />   </span><span style="COLOR: #000000"></</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">  <br />  使用½Ž€çŸ­å±žæ€§æ–¹å¼ï¼Œåˆ™æ”¹æˆå¦‚下:<br /></span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">userDao</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.easyjf.bbs.dbo.springjdbc.UserDaoSpringJdbc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> p:dataSource</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">ref</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/></span></div><br /><br />Spring2.0比以å‰çš„版本é…置更加ç‰|´»ã€ç®€‹z,如果手工书写é…ç½®åQŒåˆ™æ¯”较实用。当ç„Óž¼Œè€çš„é…ç½®æ–¹å¼æœ‰å¾ˆå¤šå¼€å‘工具如MyEclipse½{‰éƒ½èƒ½è¯†åˆ«ï¼Œä¸éœ€è¦æˆ‘们动手一点一点的录入é…置文äšgåQŒå¤§å¤šæ•°å·¥å…·å¯ÒŽ–°çš„é…¾|®æ–¹å¼è¿˜ä¸èƒ½è¯†åˆ«åQŒå› æ­¤ï¼Œè¯äh ¹æ®å®žé™…情况酌情ä‹É用ã€?img src ="http://www.aygfsteel.com/lijiajia418/aggbug/64972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lijiajia418/" target="_blank">Binary</a> 2006-08-22 09:56 <a href="http://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64972.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>Spring技巧之‹zÈ”¨FactoryBeanhttp://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64970.htmlBinaryBinaryTue, 22 Aug 2006 01:52:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64970.htmlhttp://www.aygfsteel.com/lijiajia418/comments/64970.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64970.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/64970.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/64970.htmlSpring中有两秾cÕdž‹çš„BeanåQŒä¸€¿U是普通BeanåQŒå¦ä¸€¿U是工厂BeanåQŒå³FactoryBean。工厂Bean跟普通Beanä¸åŒåQŒå…¶˜q”å›žçš„å¯¹è±¡ä¸æ˜¯æŒ‡å®šç±»çš„一个实例,其返回的是该工厂Beançš„getObjectæ–ÒŽ³•所˜q”回的对象。在Spring框架内部åQŒAOP相关的功能åŠäº‹åС处ç†ä¸­ï¼Œå¾ˆå¤šåœ°æ–¹ä½¿ç”¨åˆ°å·¥åŽ‚BeanåQŒæœ¬æ–‡ç®€å•分æžå·¥åŽ‚Bean的用法ã€?br />首先回顾一下普通BeanåQŒæ™®é€šçš„Bean直接˜q”回指定¾c?é…置中的class属性的å€?的一个实例,如下é¢çš„bean1ž®†è¿”回一个String字符ä¸ÔŒ¼š
<bean name="bean1" class="java.lang.String">
 
<constructor-arg value="我是字符�" />
 
</bean> 

下é¢åQŒçœ‹çœ‹ä¸€ä¸ªç®€å•的工厂BeanåQ?br />
import java.util.Date;
import org.springframework.beans.factory.FactoryBean;
public class FactoryBeanDemo implements FactoryBean {
 
private String name;
 
public void setName(String name)
 {
  
this.name=name;
 }
 
public Object getObject() throws Exception {
  
if("date".equals(name))return new Date();
  
else return new String("˜q™æ˜¯ä¸€ä¸ªå­—½W¦ä¸²!");
 }
 
public Class getObjectType() {  
  
return "date".equals(name)?Date.class:String.class;
 }
 
public boolean isSingleton() {  
  
return false;
 }
}

下é¢çœ‹è¿™ä¸ªå·¥åŽ‚Bean的酾|®ï¼š
<bean name="myFactoryBean" class="springroad.deomo.chap4.FactoryBeanDemo"/>
<bean name="myFactoryBean1" class="springroad.deomo.chap4.FactoryBeanDemo"><property name="name" value="date"/></bean>

䏋颿˜¯æµ‹è¯•代ç ï¼š
Resource res=new ClassPathResource("springroad/deomo/chap4/demo-bean.xml");
BeanFactory factory
=new XmlBeanFactory(res);
System.out.println(factory.getBean(
"myFactoryBean").getClass());
System.out.println(factory.getBean(
"myFactoryBean1").getClass());


输出¾l“æžœåQ?br />
class java.lang.String
class java.util.Date


由此å¯è§åQŒé€šè¿‡ä½¿ç”¨FactoryBeanåQŒæˆ‘们å¯ä»¥å¾—åˆîC¸åŒç±»åž‹çš„对象实例。这也就是我们在AOP中通过讄¡½®calssä¸?ProxyFactoryBeanå¯ä»¥˜q”回ä¸åŒ¾cÕdž‹çš„业务对象的原ç†ã€‚在实际应用中若能絋zÖM‹É用FactoryBeanåQŒåˆ™å¯ä»¥¾l™åº”用程åºå¢žåŠ å¾ˆå¤šçš„™ì”å‰ò功能ã€?br />
一个尽Hé—¨åQ?br />  FactoryBean˜q˜è—有一个技巧,也就是在我们实际需è¦è¿”回FactoryBean实例æ—Óž¼Œåº”该怎么办。也ž®±æ˜¯æˆ‘们在应用程åºä¸­éœ€è¦é€šè¿‡å®¹å™¨å¾—到一个FactoryBean。此æ—Óž¼Œéœ€è¦ä‹É用特ŒDŠçš„æ–¹å¼åQŒå³åœ¨beançš„å¿U°å‰åŠ ä¸Šä¸€ä¸ªç‰¹ŒDŠç¬¦å·â€?amp;â€å³å¯ã€?br />  如,下é¢çš„代ç ï¼š
System.out.println(factory.getBean("&myFactoryBean").getClass());
 System.out.println(factory.getBean(
"&myFactoryBean1").getClass());

输出的结果将会是åQ?br />
class  springroad.deomo.chap4.FactoryBeanDemo
class  springroad.deomo.chap4.FactoryBeanDemo 


Binary 2006-08-22 09:52 å‘表评论
]]>
Spring2.0中新的Bean¾cÕdž‹å®žçŽ°åŽŸç†http://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64968.htmlBinaryBinaryTue, 22 Aug 2006 01:49:00 GMThttp://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64968.htmlhttp://www.aygfsteel.com/lijiajia418/comments/64968.htmlhttp://www.aygfsteel.com/lijiajia418/archive/2006/08/22/64968.html#Feedback0http://www.aygfsteel.com/lijiajia418/comments/commentRss/64968.htmlhttp://www.aygfsteel.com/lijiajia418/services/trackbacks/64968.html  Spring2.0中新增了一个用æ¥è¡¨½CºBean范围的Scope接å£
  public interface Scope {
  Object get(String name, ObjectFactory objectFactory);
//æ ÒŽ®åç§°åŠåˆ›å»ºå·¥åނ得åˆîC¸€ä¸ªBean实例
  Object remove(String name);//删除一个指定å¿U°çš„Bean
  }


  在容器ConfigurableBeanFactory接å£ä¸­å®šä¹‰äº†Bean工厂有关Scope注册的相å…Ïx–¹æ³•,使得å¯å¾€Bean工厂中加入新¾cÕdž‹çš„Beanã€?br />
  public interface ConfigurableBeanFactory extends HierarchicalBeanFactory,
  
void registerScope(String scopeName, Scope scope);//å¾€Bean工厂中添加一个新的范å›?é»˜è®¤åªæœ‰ä¸¤ç§èŒƒå›´åQšsingletonåŠprototype)
  void destroyScopedBean(String beanName);//销æ¯B ean工厂中范围Bean
  }


  在AbstractFactoryBeançš„getBeanæ–ÒŽ³•中实çŽîCº†å¯¹ç‰¹å®šScope Bean支æŒåQŒæ ¸å¿ƒä»£ç æ‘˜è¦ï¼š

    String scopeName = mergedBeanDefinition.getScope();//å–得当å‰Bean的范å›ß_¼Œä¹Ÿå³åœ¨å®šä¹‰ä¸­çš„scope=â€requestâ€çš„部分ã€?/span>
    Scope scope = (Scope) this.scopes.get(scopeName);//得到Bean工厂中的范围处ç†å™?/span>
    if (scope == null) {
     
throw new IllegalStateException("No Scope registered for scope '" + scopeName + "'");
    }
    
try {
//使用scope.get(beanName,ObjectFactory)从指定的范围中得到或创å¾Bean实例
     Object scopedInstance = scope.get(beanName, new ObjectFactory() {
      
public Object getObject() throws BeansException {
       beforePrototypeCreation(beanName);
//剿‹¦æˆ?/span>
       try {
        
return createBean(beanName, mergedBeanDefinition, args);//调用å­ç±»çš„createBean实现真正的Bean创å¾å·¥ä½œ
       }
       
finally {
        afterPrototypeCreation(beanName);
//åŽæ‹¦æˆ?/span>
       }
      }
     });
     bean 
= getObjectForBeanInstance(scopedInstance, name, mergedBeanDefinition);//˜q”回正确¾cÕdž‹çš„Bean实例
    }
    
catch (IllegalStateException ex) {
     
throw new BeanCreationException(beanName, "Scope '" + scopeName + "' is not active", ex);
    }


  默认情况下,低层的Beanå·¥åŽ‚ä¸­åªæ”¯æŒsingletonåŠprototype两秾cÕdž‹çš„Bean。当把scope讄¡½®æˆrequestå?session时将会出çŽîC¸èƒ½æ­£¼‹®è¯†åˆ«Scope的错误。这是因为普通的Bean工厂都没有注册新的Scopeã€‚åªæœ‰åœ¨ WebApplicationContextä¸­æ³¨å†Œæ‰æ³¨å†Œäº†æ–°¾cÕdž‹çš„Beanã€?br />  下é¢çœ‹å®žçŽ°æ³¨å†ŒScope的代ç ?
  在WebApplicationContext中定义常�br />
public interface WebApplicationContext extends ApplicationContext {
  String SCOPE_REQUEST 
= "request";
  String SCOPE_SESSION 
= "session";
         String SCOPE_GLOBAL_SESSION 
= "globalSession";
}


  然åŽåœ¨æ‰€æœ‰ç±»åž‹çš„Web应用上下文的实现中,都在Bean工厂的拦载过½E‹ä¸­é€šè¿‡postProcessBeanFactoryæ–ÒŽ³•æ¥æ³¨å†Œæ–°¾cÕdž‹ ScopeåQŒå¦‚GenericWebApplicationContextã€StaticWebApplicationContextã€?
AbstractRefreshableWebApplicationContext½{‰WebApplication应用上下文实çŽîC¸­ã€?br />  protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
    beanFactory.registerScope(SCOPE_REQUEST, 
new RequestScope());//注册request¾cÕdž‹çš„Bean
    beanFactory.registerScope(SCOPE_SESSION, new SessionScope(false));//注册session¾cÕdž‹çš„Bean
    beanFactory.registerScope(SCOPE_GLOBAL_SESSION, new SessionScope(true));//注册glogalsession  的Bean
}


  ¾l“åˆä¸Šé¢çš„代ç ï¼ŒçŽ°åœ¨åº”è¯¥æ˜Žç™½ä¸ÞZ»€ä¹ˆåªæœ‰åœ¨Web应用上下文中æ‰èƒ½ä½¿ç”¨æ–°å¢žåР䏉¿U类型的Bean了å§ã€‚当ç„Óž¼Œç”׃ºŽæœ‰äº†ScopeåQŒæˆ‘们也å¯ä»¥éžå¸¸è½ÀL¾çš„实现我们自å·Þqš„ScopeåQŒå¢žåŠ æ–°ç”¨æˆ·è‡ªå®šä¹‰ç±»åž‹çš„BeanåQŒç„¶åŽè®¾è®¡å‡ºä¸€ä¸ªé€‚åˆæˆ‘们自己的Bean工厂ã€?img src ="http://www.aygfsteel.com/lijiajia418/aggbug/64968.html" width = "1" height = "1" />

Binary 2006-08-22 09:49 å‘表评论
]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÅíÔóÏØ| ÏØ¼¶ÊÐ| ÓéÀÖ| ÁÙº£ÊÐ| Æ½É½ÏØ| ÇßÑôÊÐ| ʯʨÊÐ| ÒåÂíÊÐ| ÉÏÈÄÏØ| ·½É½ÏØ| ɳÑÅÏØ| ËìÄþÊÐ| ÈýºÓÊÐ| ÁéÊÙÏØ| ÎäÂ¡ÏØ| ÆæÌ¨ÏØ| ¾ÞÒ°ÏØ| ÇåÔ·ÏØ| Æî¶«ÏØ| Á½µ±ÏØ| ÄϺÍÏØ| »ÔÏØÊÐ| ¶¼½­ÑßÊÐ| É̳ÇÏØ| ƾÏéÊÐ| ɳÍåÏØ| ÕØ¶«ÊÐ| ¶«Æ½ÏØ| ·ðɽÊÐ| Ì©ºÍÏØ| н¨ÏØ| Ì©ÖÝÊÐ| Ð˳ÇÊÐ| ÔúêãÌØÆì| »ÔÄÏÏØ| ¶¨½áÏØ| °²ÑôÏØ| Íû¶¼ÏØ| ¿Æ¶û| ¹ÅÌïÏØ| Ã×ȪÊÐ|