














































調(diào)用存儲過程:
Spring通過實現(xiàn)CallableStatementCallback來支持存儲過程。假定有個存儲過程的名字是ARCHIVE_STUDENTS,執(zhí)行代碼如下:






























把操作創(chuàng)建成對象:
插入:









































查詢:






































實現(xiàn)WEB服務(wù)客戶
web服務(wù)是跨平臺的、跨語言的,所以WEB服務(wù)的客戶端使用的語言和平臺和他的服務(wù)端沒有必然的關(guān)系。比如我們可以在.Net下開發(fā)、部署web服務(wù),然后在J2EE平臺下調(diào)用它,或者使用在J2EE平臺下開發(fā)、部署web服務(wù),然后使用VB來調(diào)用它。
在J2EE平臺中,WEB服務(wù)客戶同EJB客戶類似。如下兩種方式能夠訪問到WEB服務(wù):
1、不借助于JNDI查找,即使用單獨的JAX-RPC客戶訪問。
2、借助于JNDI上下文訪問WEB服務(wù)的J2EE客戶
第一種方法稱之為靜態(tài)存根,此時需要在客戶端預(yù)先生成SOAP客戶存根,這同RMI存根類似。第二種方法稱之為動態(tài)代理。它將在運行時獲得WSDL描述,然后創(chuàng)建動態(tài)代理。無論采用哪種方式訪問WEB服務(wù),客戶都需要獲得服務(wù)Endpoint地址URL,否則單憑JNDI名是很難訪問到WEB服務(wù)的。






































1、下載安裝服務(wù)器后,需要設(shè)置環(huán)境變量。




2、創(chuàng)建初始目錄


















4、實現(xiàn)服務(wù)端點接口









































5、創(chuàng)建EJB描述
用于部署成Web服務(wù)的無狀態(tài)會話Bean的描述符和普通的無狀態(tài)會話Bean不同ejb-jar.xml
















在這個新的部署描述符中,使用<service-endpoint>指定了服務(wù)端點,同時,必須指定EJB為無狀態(tài)會話Bean
6、生成WEB服務(wù)描述
下面的任務(wù)就是生成一個Web服務(wù)描述,我們通常使用工具來生成這個描述符。在這里使用J2EE提供的wscompile工具來生成。在使用wscompile工具生成web服務(wù)描述前,首先手工編寫一個簡單的XML描述config.xml










在這個描述中,指定了目標(biāo)的名稱空間、包的名字和Web服務(wù)端點接口:HelloInterface。如下命令就可以生成一個web服務(wù)描述
c:\\ HelloBeanService\\ejb \\>wscompile -define -d . -nd . -classpath . config.xml
自動生成MyHelloBeanService.wsdl文件。
7、編寫一個web服務(wù)映射文件:
在ejb\\META-INF目錄下新建一個mapping.xml文件,然后編輯這個描述符
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE java-wsdl-mapping PUBLIC
"-//IBM Corporation,Inc.//DTD J2EE JAX-RPC mapping 1.0//EN"
"http://www.ibm.com/standards/xml/webservices/j2ee/j2ee_jaxrpc_mapping_1_0.dtd">
<java-wsdl-mapping>
<package-mapping>
<package-type>HelloBeanService</package-type>
<namespaceURI>urn:HelloBean</namespaceURI>
</package-mapping>
</java-wsdl-mapping>
8、編寫webservices.xml文件
另外,還需要提供webservices.xml文件,并存放到Ejb-jar存檔的META-INF目錄中。各個J2EE產(chǎn)品可能提供相應(yīng)的部署工具來創(chuàng)建這個文件。
9、EJB打包
另外,web服務(wù)部署描述符在EJB-JAR文件中的位置是META-INF/webservices.xml.把生成的HelloBeanService.wsdl拷貝到ejb\\META-INF目錄下
c:\\HelloBeanService\\ejb\\jar cvf ejb.jar com META-INF
10、Application打包
HelloBeanService\\MEAT-INF目錄下創(chuàng)建2個文件:application.xml和sun-j2ee-ri.xml
application.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC '-//Sun Microsystems,
Inc.//DTD J2EE Application 1.3//EN'
'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
<description>Application description</description>
<display-name>HelloBeanServiceApp</display-name>
<module>
<ejb>ejb.jar</ejb>
</module>
</application>
最后歸檔
c:\\ HelloBeanService\\ejb\\>copy ejb.jar ../
c:\\ HelloBeanService\\ejb\\>cd..
c:\\ HelloBeanService\\\\>jar cvf encryptservice.ear ejb.jar META-INF
感覺自己心里的牽掛太多,不是說她。自己做了10多個場景,有復(fù)雜有簡單的,離開公司之后,還想著那些接我的人能不能把我的場景接好。就在昨天晚上,還有個新來的小伙問了我些問題,看來接手的不是太順利。沒有辦法,公司的開發(fā)模式就是這樣,有利有弊,接手的人只要能干活就可以了,不需要你思考。我討厭這種模式,而且他也沒有重要的對待我。只有離開是我的選擇。擔(dān)心我們的團隊,擔(dān)心我的主管,擔(dān)心我的隊友?,F(xiàn)在團隊非?;靵y,有很多人提出離職,他們太盲目了,沒有目的性,就像我和我好朋友說的,我是謀定而后動,他則是先動而后謀,他的下分工作目標(biāo)可能是工作輕松點,錢拿的多點,我們公司確實太累了。而我的目標(biāo)就是項目經(jīng)理,在這個公司的期間,我每次看到團隊遇到困難的時候,我都能看到事情的本質(zhì),所以看問題還是很準(zhǔn)的,自己也想去嘗試一下。
你的羽翼已經(jīng)豐滿了,就是缺少在藍天下翱翔的經(jīng)驗,自己慢慢積累吧,在這個項目里我不能在給你什么了,我剩下的只有自己的經(jīng)驗和技術(shù),自己的經(jīng)驗屬于自己的。前幾天還在哭鼻子的你,堅強點吧,你已經(jīng)長大了,遇到問題想辦法去解決它,不要去回避。不知道你想不想在這個程序的世界里自由翱翔,不知道你的心有沒有那么大,我看到的你是不屬于程序的這片天空的,所以還在擔(dān)心走在這條路上的你。多余了,因為飛在路上的你根本就沒想到你在成長路上的我。
希望你們一切都好,我的大家,我也會在自己的道路上努力,我相信我自己,我也相信我們的友誼。 年終獎"除12"稅收優(yōu)惠
按照《國家稅務(wù)總局關(guān)于調(diào)整個人取得全年一次性獎金等計算征收個人所得稅方法問題的通知》規(guī)定,對個人某個月取得的全年一次性獎金,可以先除以12個月,再按其商數(shù)確定適用稅率和速算扣除數(shù)。
具 體的解釋是,行政機關(guān)、企事業(yè)單位向其雇員發(fā)放的一次性獎金(包括:年終加薪、實行年薪制和績效工資辦法的單位,根據(jù)考核情況兌現(xiàn)的年薪和績效工資)可單 獨作為一個月工資、薪金所得計算納稅,并按以下計稅辦法:先將雇員當(dāng)月內(nèi)取得的全年一次性獎金,除以12個月,按其商數(shù)確定適用稅率和速算扣除數(shù)。如果雇 員當(dāng)月工資薪金所得高于(或等于)稅法規(guī)定的費用扣除額(個稅起征點)的,則將一次性獎金全額作為應(yīng)稅所得額,計算應(yīng)納稅額。適用公式為:應(yīng)納稅額=雇員 當(dāng)月取得全年一次性獎金×商數(shù)對應(yīng)的適用稅率-速算扣除數(shù)。
而在這個規(guī)定之前,個人所取得的年終獎金是全額作為應(yīng)納稅所得額來尋找適用稅率及速算扣除數(shù)的。具體公式為:應(yīng)納稅額=雇員當(dāng)月取得的全年一次性獎金*獎金全額對應(yīng)的適用稅率-對應(yīng)的速算扣除數(shù)。
可別小看這"12",如此這般將年終獎先除以12,所得稅率可就大大降低了,能為員工減輕不少稅負呢。
比 如,某私營企業(yè)主王老板要給自己的得力干將張先生準(zhǔn)備年終獎。年終獎為12000元,按原有規(guī)定,12000元作為單月收入,對應(yīng)的適用稅率為20%,速 算扣除數(shù)為375元,則張先生這筆年終獎應(yīng)納個人所得稅款為2025元(12000×20%-375)。但若按新辦法,張先生12000元年終獎先除以 12,得到商數(shù)為1000元,1000元對應(yīng)的適用稅率為10%,速算扣除數(shù)為25。因此,新辦法下,張先生只需交納個人所得稅1175元 (12000×10%-25)。也就是說,如果采用新辦法,張先生可少交850元的個人所得稅。換而言之,張先生實際拿到手的稅后年終獎可以多850元。
月薪較低者還有"特別"優(yōu)惠
對于日常每月工資較低的個人,年終獎還會有另一層稅收優(yōu)惠。為此,平常對員工比較"摳門"的老板,可要發(fā)發(fā)善心,在過年前給員工多些獎金哦。
按 照前述國家稅務(wù)總局的《通知》規(guī)定,如果在發(fā)放一次性獎金的當(dāng)月,雇員工資薪金所得低于稅法規(guī)定的費用扣除額(即個稅起征點,2006年1月1日后全國統(tǒng) 一為1600元),應(yīng)將全年一次性獎金減去"雇員當(dāng)月工資薪金所得與費用扣除額的差額"后的余額作為應(yīng)納稅額,再按前述辦法確定全年一次性獎金的適用稅率 和速算扣除數(shù)。
具體如下:如果雇員當(dāng)月工資薪金所得低于稅法規(guī)定的費用扣除額的,適用公式為:應(yīng)納稅額=(雇員當(dāng)月取得全年一次性獎金-雇員當(dāng)月工資薪金所得與費用扣除額的差額)×適用稅率-速算扣除數(shù)。
比 如,王老板手下有個普通工人蔣某,雖然月薪只有1200元,但平常工作非常賣力,尤其最近大半年來表現(xiàn)特別突出,長進很快。新年到了,王老板準(zhǔn)備在年輕工 人中間樹立一個學(xué)習(xí)典型,蔣某正是一個不錯的選擇。那么,王老板完全可以通過給蔣某多發(fā)放一些年終獎,并拉開蔣某所獲年終獎與其他同級工人年終獎所得距離 的方式,暗示大家公司是"獎優(yōu)懲劣"的,由此激勵年輕人要奮發(fā)圖強,多為企業(yè)做績效。若王老板此次給蔣某發(fā)放6000元的年終獎,按照原來的老辦 法,6000元獎金對應(yīng)的所得稅率為20%,速算扣除數(shù)為375元,蔣某需要被繳納的個人所得稅額為825元(6000×20%-375),實際拿到手的 稅后獎金為5175元。
而按照新辦法,則蔣某這筆年終獎可以先除以12,得到商數(shù)為500,對應(yīng)的所得稅率為5%,速算扣除數(shù)為0。 同時,由于蔣某當(dāng)月的工資收入只有1200元,比國家規(guī)定的1600元費用扣除額還低400元,因此蔣某這筆年終獎實際的應(yīng)納稅額為5600元 (6000-400),其應(yīng)該被繳納的個人所得稅額為108元(5400×5%-0),實際拿到手的稅后獎金有5892元。
分次獎金不如歸總發(fā)放
但是,老板們還必須明確一個概念,國家稅務(wù)總局對于年終獎這樣一次性發(fā)放的獎金稅收優(yōu)惠政策,每個員工每年只能享受一次。
因為前述《通知》規(guī)定,在一個納稅年度里,對每一個納稅人,該計算辦法只允許采用一次。同時,雇員取得除全年一次性獎金以外的其他各種名目獎金,如半年獎、季度獎、加班獎、先進獎、考勤獎等,仍舊是一律與當(dāng)月工資、薪金合并,按稅法規(guī)定繳納個人所得稅。
正 是基于這一點,我們在此提出一個發(fā)放獎金的竅門,就是如果老板們想為員工盡量減輕稅負,應(yīng)盡量減少季度獎、半年獎等名目繁多的獎金發(fā)放次數(shù),而是把這些本 欲發(fā)放的獎金先在平時"記賬",然后和年終獎一起,一次性發(fā)給員工。這樣一來,員工全年得到的稅后獎金收入,并不會減少,反而會增加。
比 如,作為王老板得力助手的張先生,除了12000元的年終獎,王老板每個季度還會發(fā)2000元的季度獎金給他。由于張先生的月工資為6000元,平常每月 的應(yīng)納稅所得額6000-1600=4400元,對應(yīng)的適用稅率為15%,速算扣除數(shù)為125元,應(yīng)納稅額為535元。但每次發(fā)放季度獎時,都必須與其當(dāng) 月的工資收入合并繳稅,所以每次發(fā)放季度獎的那個月,也是他最不愿意看到工資明細單的那個月--那個月的所得稅率和所得稅額令他非常"郁悶"。在那些月份 里,他的當(dāng)月所得總額為8000元,減去1600元的起征點(費用扣除額),應(yīng)納稅所得額為6400元,對應(yīng)的適用稅率為20%,對應(yīng)的速算扣除數(shù)為 375元,應(yīng)納稅額為905元。所以說,2000元的季度獎為他當(dāng)月增加了370元(905-535)的稅收負擔(dān)。一年四個季度,四次季度獎一共繳稅 1480元。加上12000元的單次年終獎所得稅為1175元,那么張先生需要全年總共2萬元的獎金繳納所得稅2655元。
如果王老板平時不給張先生分次發(fā)季度獎,而是將總共8000元的季度獎與12000元的年終獎一起放在元月發(fā)放,那么張先生的年度獎金一共需要繳稅1975元(20000×10%-25)。
顯然,對于張先生而言,一般來說是更樂意接受老板一次性給他發(fā)放年終獎2萬元,而不是將2萬元拆開為季度獎和年終獎分次發(fā)放,因為這樣可以減少680元的稅金負擔(dān)。
我國個人所得稅稅率表(工資、薪金所得適用)
級數(shù) 全月應(yīng)納稅所得額 稅率(%) 速算扣除數(shù)(元)
1 不超過500元的 5 0
2 超過500元至2000元的部分(含2000元) 10 25
3 超過2000元至5000元的部分(含5000元) 15 125
4 超過5000元至20000元的部分(含20000元) 20 375
5 超過20000元至40000元的部分(含40000元) 25 1375
6 超過40000元至60000元的部分(含60000元) 30 3375
7 超過60000元至80000元的部分(含80000元) 35 6375
8 超過80000元至100000元的部分(含100000元) 40 10375
9 超過100000元的部分 45 15375
注:正常月份下,工資,月應(yīng)納稅所得額= 月工資、薪金所得-1600元;月應(yīng)納稅額= 月應(yīng)納稅所得額×適用稅率-速算扣除數(shù) Web服務(wù)是構(gòu)建B2B應(yīng)用最為重要的利器之一,使用它能夠構(gòu)建、集成大型的系統(tǒng)。這一切都是通過發(fā)送XML消息給已定義的模塊化接口完成的。借助于無狀態(tài)會話Bean能夠構(gòu)建Web服務(wù)。為實現(xiàn)Java客戶對Web服務(wù)的訪問,需要使用到JAX-RPC.Web服務(wù)是構(gòu)建SOA的一種方式。SOA是架構(gòu)方法,它能夠?qū)⒏鞣N異構(gòu)應(yīng)用集成起來,并組成更大的分布式應(yīng)用,最后通過服務(wù)接口的形式將整個應(yīng)用支撐起來。
服務(wù)提供者創(chuàng)建抽象服務(wù)定義,并將它發(fā)布到服務(wù)注冊器中。對于WEB服務(wù)而言,服務(wù)定義是通過WSDL文件給出的;服務(wù)注冊器需要遵循UDDI標(biāo)準(zhǔn)。服務(wù)請求者可以使用一套查詢機制從服務(wù)注冊器中查找到WSDL文件,如果找到合適的服務(wù)定義,請求者將綁定到服務(wù)提供者上。
服務(wù)接口類似于對象或EJB接口。但是對于WEB服務(wù)而言,服務(wù)接口更為靈活。比如服務(wù)實現(xiàn)和客戶處于松耦合的關(guān)系,而這在其他EJB應(yīng)用或分布式應(yīng)用中是實現(xiàn)不了的。這種松耦合使得客戶和服務(wù)實現(xiàn)能夠運行在不同平臺上,比如Microsoft.NET客戶能夠訪問到J2EE應(yīng)用服務(wù)器中所運行的服務(wù)。另外,相比Java對象而言,Web服務(wù)實體的粒度更粗。
通過標(biāo)準(zhǔn)化接口,能夠加強SOA的模塊化;通過松耦合,能夠提高SOA的靈活性;通過XML,能夠增強SOA擴展性。在B2B場合,這些都是很重要的因素。WEB服務(wù)能夠在那些使用了多種異構(gòu)平臺的企業(yè)應(yīng)用中大顯身手。所有的WEB服務(wù)都是構(gòu)建在XML和Internet協(xié)議上的。EJB只能夠采用Java開發(fā)。如果使用其他語言開發(fā)應(yīng)用,互操作如何實現(xiàn)?
組成WEB服務(wù)的事實標(biāo)準(zhǔn)可以通過如下等式表達:
Web服務(wù) = WSDL+SOAP+UDDI
1、WSDL語言比Java更抽象、廣度更大。HelloWorldWSDL中存在<service>標(biāo)簽,它能夠在具體地址提供若干<port>.<port>代表了服務(wù)接口及對具體協(xié)議的綁定。
2、服務(wù)描述包含了Endpoint地址。WSDL是由Java接口和對象引用構(gòu)成的。換句話說,Web服務(wù)不存在真正的實體,它們不是對象,因此必須將它們按照模塊化對待。
3、根據(jù)輸入、輸出定義操作。開發(fā)者需要將輸入、輸出消息表示為XML元素。
4、采用的綁定是SOAP綁定。到目前為止,只能采用SOAP綁定。也請注意,<soap:binding>標(biāo)簽還存在style="rpc"屬性,因此可以看出style還存在其他取值,目前,用于交換SOAP消息的另一種風(fēng)格是文檔風(fēng)格(document-style)。文檔風(fēng)格意味著在SOAP消息體中不在包含對具體操作的描述。
SOAP協(xié)議為Web服務(wù)和它們的客戶定義了XML消息格式。SOAP消息格式非常簡單。它實際包含兩部分內(nèi)容:其一,HTTP POST請求頭信息。其二,XML文檔,這就是SOAP信封(Envelope)。另外,通過上述兩分SOAP消息,我們還想表達Web服務(wù)中的另一個重要概念。從SOAP協(xié)議的使用過程來看,它非常輕量,因為它對處于交互中的客戶和服務(wù)沒有任何限制。但是,從SOAP協(xié)議的大小、性能角度考慮,它并不輕量。如果不壓縮SOAP消息,則需要在網(wǎng)絡(luò)上傳遞大量的SOAP數(shù)據(jù)消息。因此,采用二進制更為明智,比如CORAB的IIOP協(xié)議。對于含有大量的SOAP數(shù)據(jù)消息進行壓包和解包操作將耗費大量的CPU時間。請不要忘記,WEB服務(wù)的誕生背景,它只是為集成應(yīng)用而來的,而不是替換現(xiàn)有的高性能中間件平臺技術(shù)。否則,就不需要使用web服務(wù)了。
XML文檔和平臺無關(guān)性,借助于標(biāo)準(zhǔn)化的XML文檔,WEB服務(wù)能夠幫助集成異構(gòu)的分布式系統(tǒng)。在實際應(yīng)用開發(fā)過程中,它具有許多優(yōu)勢,比如松耦合、平臺無關(guān)性、遵循XML方面的標(biāo)準(zhǔn)、能夠合并不同的XML技術(shù)等。借助于XML能夠?qū)崿F(xiàn)應(yīng)用和中間件平臺的松耦合,這是很重要的優(yōu)勢。
比如在開發(fā)EJB組件時,客戶和服務(wù)器端同事需要使用組件接口。一旦組件接口發(fā)生變動,比如需要往方法簽名中新增參數(shù),則EJB組件本身需要重新構(gòu)建、集成、部署。當(dāng)然,客戶也逃脫不了重新編譯的命運。因此,它們之間并沒有實現(xiàn)松耦合,開發(fā)者不能獨立的開發(fā)應(yīng)用組件。否則,一旦某些組件發(fā)生變動,應(yīng)用的其他部分也需要變動。我們都希望應(yīng)用具有良好的擴展性。對基于IIOP的請求消息而言,所有的參與者必須使用相同的類型信息,否則不能夠正確對消息進行解包操作。而且,在IIOP技術(shù)領(lǐng)域中,應(yīng)用必須能夠理解消息的所有內(nèi)容。如果基于XML和XML消息開發(fā)應(yīng)用,則這些限制將不復(fù)存在。
J2EE平臺技術(shù)對WEB服務(wù)提供了一流的支持能力。無論WEB服務(wù)實現(xiàn),還是WEB服務(wù)客戶,都可以使用JAVA語言開發(fā)完成。在J2EE中,使用WEB服務(wù)同RMI、RMI-IIOP并沒有多大區(qū)別。他們都將具體傳輸層屏蔽掉,使得開發(fā)者能夠?qū)W⒂跇I(yè)務(wù)邏輯。
JSR921規(guī)范,即實現(xiàn)企業(yè)WEB服務(wù),定義了WEB服務(wù)編程模型。它使用術(shù)語port組件,描述web服務(wù)的服務(wù)器端視圖。它是服務(wù)接口的java實現(xiàn)。而且,它遵循服務(wù)接口到Java的映射,并提供了相應(yīng)的Java實現(xiàn)。需要將它部署并運行在容器中。使用EJB開發(fā)WEB服務(wù)需要創(chuàng)建若干port組件。其中,還需要提供若干XML部署描述符。當(dāng)然,直接基于EJB實現(xiàn)WEB服務(wù)是J2EE平臺中實現(xiàn)WEB服務(wù)的最大優(yōu)勢。
JAX-RPC服務(wù)端點接口,現(xiàn)在,來開發(fā)另一遠程接口,它將企業(yè)Bean所提供的業(yè)務(wù)方法都列舉出來,我們稱之為服務(wù)Endpoint接口(Service Endpoint Interface,SEI),下面給出了代碼。











JAX-RPC要求WEB服務(wù)提供SEI,EJB容器同WEB服務(wù)交互時需要使用它。JAX-RPC規(guī)范要求SEI遵循如下規(guī)則:
1、接口必須間接或直接繼承java.rmi.Remote.
2、所有的方法必須拋出java.rmi.RemoteException.
3、方法參數(shù)和返回類型必須是JAX-RPC支持的JAVA類型。
4、SEI中不能包含敞亮。
在J2EE1.4平臺中,可以對EJB技術(shù)進行了升級,使得無狀態(tài)會話Bean可以直接部署為Web服務(wù)端點。這樣,在J2ee1.4平臺下,開發(fā)Web服務(wù)將更加簡單。這樣,EJB2.1中的無狀態(tài)會話Bean可以有3種不同的客戶端:本地接口的客戶端、遠程接口的客戶端和web服務(wù)客戶端。EJB的WEB服務(wù)客戶端視圖通過WSDL文檔描述。
待續(xù)......
當(dāng)我們有很多類需要通知時,顯示的創(chuàng)建每個代理就會顯得很笨拙。幸運的是,Spring有一個自動代理機制,它可以讓容器為我們產(chǎn)生代理。Spring有2個類提供這種服務(wù):BeanNameAutoProxyCreate和DefaultAdvisorAutoProxyCreator.
BeanNameAutoProxyCreate:為匹配一系列名字的Bean自動創(chuàng)建代理。它也允許在名字的2端進行通配符的匹配。
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="performanceThresholdInterceptor" class="com.wyq.spring.common.aopinstance.autoproxy.PerformanceThresholdInterceptor">
<constructor-arg>
<value>5000</value>
</constructor-arg>
</bean>
<!--
如果Bean是一個Advisor或攔截器,它將應(yīng)用到代理對象的所有方法上。如果是通知的話,Advisor切入點
會根據(jù)不同Bean將通知應(yīng)用到不同的地方。
-->
<bean id="performanceThresholdProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<value>performanceThresholdInterceptor</value>
</property>
</bean>
</beans>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="performanceThresholdInterceptor" class="com.wyq.spring.common.aopinstance.autoproxy.PerformanceThresholdInterceptor">
<constructor-arg>
<value>5000</value>
</constructor-arg>
</bean>
<!--
一個Advisor是一個切入點和一個通知的結(jié)合體。不用顯示的將Advisor與其他東西結(jié)合,現(xiàn)在只要簡單的定義他們,然后讓他們自動
應(yīng)用到他們匹配的地方。這樣松耦合Bean以及他們的通知就實現(xiàn)了。你只管寫好你的Bean,寫好你的通知,讓容器來充當(dāng)媒婆。
-->
<bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<bean class="com.wyq.spring.common.aopinstance.autoproxy.PerformanceThresholdInterceptor"></bean>
</property>
<property name="pattern">
<value>.+Service\..+</value>
</property>
</bean>
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
</bean>
</beans>
引入與其他類型的通知不同,引入影響的是整個類。他們通過給需要消息的類添加方法和屬性來實現(xiàn)。引入讓你能夠動態(tài)地建立復(fù)合對象,提供了多態(tài)繼承的好處。
Spring通過一個特殊的方法攔截器接口IntroductionMethodInterceptor來實現(xiàn)引入。這個接口添加一個方法:
boolean implementsInterface(Class intf);
如果IntroductionMethodInterceptor是為了實現(xiàn)指定接口,那么方法implementsInterface應(yīng)該返回true.就是說,調(diào)用這個接口聲明的方法的任何調(diào)用將被委派給IntroductionMethodInterceptor的invoke()方法.invoke()方法負責(zé)實現(xiàn)這個方法,不能調(diào)用MethodInvocation.proceed().他引入了新的接口,調(diào)用目標(biāo)對象是沒有用的。
Spring提供了一個方便的類來處理我們的大多數(shù)應(yīng)用:DelegatingintroductionInterceptor.代碼:
import java.util.Date;
/**
* @author 作者
* @version 創(chuàng)建時間:2009-11-6 下午02:58:21
* 類說明
*/
public interface Auditable {
void setLastModifiedDate(Date date);
Date getLastModifiedDate();
}
import java.util.Date;
import org.springframework.aop.support.DelegatingIntroductionInterceptor;
/**
* @author 作者
* @version 創(chuàng)建時間:2009-11-6 下午03:00:06
* 類說明
*/
public class AuditableMixin extends DelegatingIntroductionInterceptor implements
Auditable {
private Date lastModifiedDate;
/*
* 注意我們不用實現(xiàn)invoke()方法了,DelegatingIntroductionInterceptor為我們實現(xiàn)了這
* 個方法。DelegatingIntroductionInterceptor也要實現(xiàn)你的混合類暴露的任何方法,并且將
* 任何對這些方法的調(diào)用委托給這個混合類。因為我們的類實現(xiàn)了Auditable,對這個接口的方法的
* 所有調(diào)用都將調(diào)用我們的攔截器。任何其他方法將委托給目標(biāo)對象。
*/
public Date getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(Date lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
}
創(chuàng)建一個引入Advisor:
因為引入通知只應(yīng)用在類層次上,所以引入有他們自己的Advisor:IntroductionAdvisor.Spring也提供了一個適合大多數(shù)情況的缺省實現(xiàn)。它的名字叫做DefaultIntroductionAdvisor.
BeanFactory對象是一個負責(zé)創(chuàng)建其他JavaBean的JavaBean.我們的ProxyFactoryBean創(chuàng)建代理對象。和其他JavaBean一樣,它有控制行為的屬性。
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 創(chuàng)建一個目標(biāo)對象 -->
<bean id="courseTarget" class="com.springinaction.training.model.Course"></bean>
<!-- 創(chuàng)建一個引入 -->
<bean id="auditableMixin" class="com.springinaction.training.advice.AuditableMixin"></bean>
<!-- 創(chuàng)建一個引入通知 -->
<bean id="auditableAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
<constructor-arg>
<ref bean="auditableMixin"/>
</constructor-arg>
</bean>
<!-- 創(chuàng)建一個代理
ProxyFactoryBean的屬性
target:代理的目標(biāo)對象
proxyinterfaces:代理應(yīng)該實現(xiàn)的接口列表
interceptorNames:需要應(yīng)用到目標(biāo)對象上的通知Bean的名字,可以是攔截器、Advisor或者其他通知類型的名字。
singleton:在每次抵用getBean時,工廠是否返回的是同一個代理實例。如果是有狀態(tài)通知,應(yīng)該設(shè)置為false.
aopProxyFactory:通常不需要使用這個屬性。
ProxyTargetClass:是否代理目標(biāo)類,而不是接口類。
-->
<bean id="course" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="singleton">
<value>false</value>
</property>
<property name="proxyInterfaces">
<value>com.springinaction.training.advice.Auditable</value>
</property>
<property name="interceptorNames">
<ref bean="auditableAdvisor"/>
</property>
<property name="target">
<ref bean="courseTarget"/>
</property>
</bean>
</beans>
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
常用鏈接
留言簿(1)
隨筆分類
- EJB學(xué)習(xí)筆記(13)
- HIBERNATE(25)
- J2SE(1)
- JAVASCRIPT
- SOA
- SPRING(16)
- WEBWORK
- 人生隨筆(7)
- 開發(fā)實踐
- 設(shè)計思想(4)
- 財經(jīng)新聞
隨筆檔案
關(guān)注blogs
- Anders小明的Blog
- DWR學(xué)習(xí)手冊
- IBM解決方案
- j2ee api
- JavaEye Java
- java技術(shù)賽迪網(wǎng)
- jdk詳解
- J道論壇
- mldn解惑
- robbin的自言自語
- SpringFramework中文論壇
- validation詳細解釋
- 一只小螞蟻
- 中國it實驗室
- 啊密果
- 當(dāng)當(dāng)網(wǎng)
- 林信良學(xué)習(xí)筆記
- 灰狐動力
- 鼠標(biāo)的咖啡屋
搜索
最新評論

- 1.?re: 心中的那個她[未登錄]
- 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
- --王永慶
- 2.?re: 心中的那個她[未登錄]
- 兄弟,喜歡就大膽去追好了,就是因為喜歡才會有不愉快,如果想一輩子沒有這些煩惱,找一個可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實不太重要。放開心情就好了。
- --萍水相逢
- 3.?re: 心中的那個她
- 只能同甘不能共苦,就他媽算了吧,程序員也是人??!我現(xiàn)在也很討厭女的不理解人情。
- --咖啡妝
- 4.?re: 難以割舍的那份情感
- 評論內(nèi)容較長,點擊標(biāo)題查看
- --王永慶
- 5.?re: 難以割舍的那份情感
- 評論內(nèi)容較長,點擊標(biāo)題查看
- --隔葉黃鶯