




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
jBeanBox是一個微形但功能較齊全的IOC/AOP工具,利用了Java的初始化塊實現(xiàn)的Java配置代替XML,比目前Spring或Guice的Java配置更簡單。jBeanBox采用ApacheLicense2.0開源協(xié)議。Spring,HiveMind及其他一些利用XML作為配置文件的IOC/AOP框架:XML不支持類名稱拼寫檢查和IDE重構(gòu),很難在運行時更改配置。(從Spring3.0Java的配置來取代XMLJava作為一個IOC/AOP工具來說,Spring過于復(fù)雜了。)強,對無源碼的第庫支持不佳,IOC/AOP工具不應(yīng)該完全依賴于源碼。簡單,很少的源碼(不到3000行)實現(xiàn)了所有的IOC/AOP功能,沒有XML,只有1個注解(InjectBox)。學(xué)習(xí)曲線低、易、易擴充和移植。2)使用Java來代替XML,其實現(xiàn)比Spring或Guice的Java配置更簡單實用,上,Spring的一些服務(wù)如式事務(wù)可以抽取出來在jBeanBox上使用。中全部或部分取代SpringIoC/AOP內(nèi)核,其主要功能有:*以JavaJava(第一種配置方式)來代替XML*以Java方法回調(diào)為基礎(chǔ)的JavaJava型安全和IDE重構(gòu)支持。于學(xué)習(xí)。以上三種配置各有特點,甚至可以在同一個配置中混合使用。*單例/多例支持,默認(rèn)情況下所有實例為單例(Spring);*內(nèi)置AOP和AspectJSpring傳統(tǒng)XML拉式注入:利用@InjectBox注解(與GuiceSpring),支*以約定方式尋找配置,這是jBeanBoxSpring中創(chuàng)建多個ApplicationContext實例)*Bean(postConstruction和preDestory比較新,缺少足夠的測試。設(shè)置AOP時,目標(biāo)類不能是finalCGLIB)在pom.xml個是標(biāo)準(zhǔn)AOP接口),如果使用Maven將自動這兩個jar包,jBeanBox了CGLIB及ASM庫,為了防止可能發(fā)生的與其它CGLIB版本,已將這兩個庫打包到j(luò)BeanBox并變更命名空間。jBeanBox不依賴于commonlog或Log4j,但是如果在類路徑中找到它們的配置,將自動采用它們jBeanBox項目導(dǎo)入JDK6以上版本、Gitbash、Maven,git cdmvnEclipse,按"import"->"ExistingProjectsintoWorkspace",選中jBeanBox,即可將項目導(dǎo)入,注意導(dǎo)入時不要勾選“Copytoproject示例1-oWorld第一個IOC注入演下面這個簡單程序演示了jBeanBox1+Box)尋找配置2JavapublicoWorldprivateStringpublicstatic oWorldBoxextendsBeanBox{o}}publicstaticvoidmain(String[]args)oWorldh=o}}2-基礎(chǔ)jBeanBoxpublicpublicclassOrder//orderprivateCompany//getters&setter}publicclassCompanyCompanyprivateString//getters&setters}publicclassOrderBoxextendsBeanBoxOrderBoxBeanBox子類,這是一個配{ setProperty("companyCompanyBox.class設(shè)定要注入的對象,可以是目標(biāo)類,也可以是一個BeanBox配置類}publicpublicstaticclassCompanyBox1extendsBeanBox{setProperty("name","PetStore1");}}{//{}}}publicclassTesterpublicstaticvoidmain(String[]args)System.out.println("OrderbeanisaSingleTon?"+(order==}}為節(jié)省篇幅,一些java類以及靜態(tài)工廠、實例工廠演示未在此說明中列出,請詳見jbeanbox-eaxmple項目源碼,下同。3:AOP&AspectjSpring兼容,此項目已集成了AOP接口和Aspectj接口支持,但是切點只支持Java正則表達(dá)式式。("AOPLogAdvice","AspectjLogAdvice"源碼此處略)publicclassTester{privateIitemitem;publicvoidsetItem(Iitemitem){this.item=item;}publicvoiddoPrintItem(){}publicstaticvoidmain(String[]args)BeanBoxadvice=newBeanBox(AOPLogAdvice.class).setProperty("name","AOPLogger");"doPrint\\w*",advice,"doAround");BeanBoxadvice2=newBeanBox(AspectjLogAdvice.class).setProperty("name","AspectJLogger");","doPrint\\w*",advice2,Testert=newBeanBox(Tester.class).setProperty("item",}}入,注入8和9為傳統(tǒng)無侵入的推式注入。可以看出,注解的引入可簡化源詳見jbeanbox-BeanBoxpublicpublicclass{@InjectBox(A.StrBox.class)Strings1;//UseStrBox.class,Strings2;//UseA.StringBox.class(orA.StringBox2.class,2to8dependscontextsetting)Strings3;//UseCc4;Use Strings5;//Use@InjectBox(required=d6;//UseConfig$DBox.class(or@InjectBox(required=e7;//UseConfig$E7Box.class(orprivateStrings8;//injectedbyfield,notsuitableforProxyprivateStrings9;//injectedbysetterpublicvoidsetS9(Strings9){this.s9=s9;}publicvoidprint(){System.out.println((c4==null)?null:c4.value);System.out.println((d6==null)?null:d6.value);System.out.println((e7==null)?null:e7.value);}publicpublicstaticvoidmain(String[]{Testert=BeanBox.getBean(Tester.class);t.print();BeanBoxContextctx=newTestert3ctx.getBean(Tester.class);}}5Bean(PostConstructor和PreDestorypublicpublicclass{privateStringpublicvoid{name=}publicvoid{System.out.println("Bye"+}publicstaticclassTesterBoxextendsBeanBox{}}}publicstaticvoidmain(String[]{BeanBox.getBean(Tester.class);BeanBox.defaultContext.closeByeSam}}示例6:利用jBeanBox取代Spring內(nèi)核實現(xiàn)無XML的式事式事務(wù)是AOP的典型運用場合,基本原理是利用線程局部變量來管理連接,AOP的特點就是服務(wù)和內(nèi)核是插拔式設(shè)計,內(nèi)核和服務(wù)可以單獨使用。SpringIOC/AOP使用,如果抽取不出來,說明它綁死在Spring是不符的。本著不重新發(fā)明的原則,此示例將Spring中的式事務(wù)服務(wù)抽取出來,與jBeanBox整合,也就是說這一次的整合只利用了Spring的事務(wù)服務(wù),而不使用它的IOC/AOP內(nèi)核,很詭異的組合,但目的很明確:取消XML配置。以下是jBeanBox整合了c3p0數(shù)據(jù)池+JDBCTemplate+Spring式事務(wù)的一個例子,實測通過","insert\\w*",newTxInterceptorBox(),}同{ setProperty("driverClass","com.mysql.jdbc.Driver");//yourjdbcdrivername}}staticclassTxManagerBoxextendsBeanBoxSpring中{setProperty("dataSource",DSPoolBeanBox.class);}}{Propertiesprops=newProperties();}}}publicstaticclassJdbcTemplateBoxextendsBeanBoxJdbcTemplate模板配置,可換成dbUtils等{}}}publicclassTester測試類publicvoidinsertUser()dao.execute("insertintousersvaluesUser1')");inti=1/0;//拋出運行期錯誤,導(dǎo)致事務(wù)回滾dao.execute("insertintousersvaluesUser2')");}publicstaticvoidmain(String[]args)TestertesterBeanBox.getBean(Tester.class);//從默認(rèn)上下文獲取類實例}}此示例中需要額外用到C3P0、MysqlMySQL示例7:利用Java方法來手工生成實例。這種方式和Spring的Java配置類jBeanBox入屬性,(如運行在JAVA8下,強制類型轉(zhuǎn)換可以省略):publicpublicclassTesterBoxextends{statict\\w*","insert\\w*",newTxInterceptorBox(),}staticclassDSPoolBeanBoxextendsBeanBox{//Type-unsafeandtype-safeconfigurationscanmixeduse.publicDataSourcecreate()ComboPooledDataSourceds=newComboPooledDataSource();return}publicvoidconfig(ComboPooledDataSourceds.setPassword("root888");//changetoyourPWD} }}staticclassTxManagerBoxextendsBeanBox{publicDataSourceTransactionManagercreate(){DataSourceTransactionManagerdm=newreturn}}staticclassTxInterceptorBoxextendsBeanBox{//AdvicepublicTransactionInterceptorcreate(){Propertiesprops=newProperties();returnnewTransactionInterceptor((DataSourceTransactionManager)}}publicstaticclassJdbcTemplateBoxextendsBeanBox{publicJdbcTemplatecreate(){returnreturnnewJdbcTemplate((DataSource)}}}8演示用注解來注入屬性、構(gòu)造函數(shù)參數(shù)和方法參數(shù)。目前jBeanBox有三種配置方式,初始塊、Java活,可完全替代XML,但不支持方法名重構(gòu),Java方法回調(diào)是類型安全但靈充。參數(shù)用代號加數(shù)字指定,從0開始,如s0表示第一個String參數(shù),i1表示第二個Integer參數(shù),box2表示第三個BeanBox參數(shù)publicpublicclass{StringString@InjectBox(s0="name3")Stringname3;AAa4,@InjectBox(s0=publicTester(Stringname1AAa4{//a4將自動找到配置類AAB1=name1;this.a4=}@InjectBox(s0="name2",box1=A5Box.class)publicvoidinjectBymethod(Stringname2,AAa5){2=name2;this.a5=a5;}publicstaticclassAA{publicStringname;}publicstaticclassAABoxextendsBeanBox{}}publicstaticclassA5BoxextendsBeanBox{publicAAcreate(){AAaa=newAA();="name5";returnaa;}}publicstaticvoidmain(String[]args){Testert=BeanBox.getBean(Tester.class);System.out.println("name1="+1);//System.out.println("name2="+2);//name2=name2System.out.println("name3="+3);//name3=name3System.out.println("name4="System.out.println("name2="+2);//name2=name2System.out.println("name3="+3);//name3=name3System.out.p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年初中人教版《物理》九年級全一冊第十八章第二節(jié)“電功率”說課稿
- 3.2 熔化和凝固 說課稿 2025年初中人教版物理八年級上冊
- 共同購房協(xié)議書范本
- 學(xué)校戰(zhàn)略合作協(xié)議
- 物聯(lián)網(wǎng)居間協(xié)議
- 二零二五年度北京市化工原料寄存與倉儲環(huán)境監(jiān)測合同
- 地塊項目基坑工程 投標(biāo)方案(技術(shù)方案)
- 航空運輸與服務(wù)系統(tǒng)作業(yè)指導(dǎo)書
- 三農(nóng)產(chǎn)品產(chǎn)銷對接網(wǎng)絡(luò)平臺建設(shè)方案
- 創(chuàng)業(yè)孵化基地入駐條件及運營管理辦法匯編
- 統(tǒng)編版(2024)道德與法治七年級下冊第一單元 珍惜青春時光 單元測試卷(含答案)
- 蘇教版數(shù)學(xué)一年級下冊(2024)第七單元觀察物體(一)綜合素養(yǎng)測評 A 卷(含答案)
- 2025年甘肅省張掖市民樂縣招聘專業(yè)技術(shù)人員9人(第二期)歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年湖北武漢理工大學(xué)學(xué)生輔導(dǎo)員招聘18人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 金融科技概論-課件 第十五章 金融科技監(jiān)管與監(jiān)管科技
- 初級咖啡師資格理論考試題及答案
- 2025年烏蘭察布醫(yī)學(xué)高等專科學(xué)校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年09月寧夏寧夏黃河農(nóng)村商業(yè)銀行系統(tǒng)社會招考筆試歷年參考題庫附帶答案詳解
- 招標(biāo)代理機構(gòu)選取突發(fā)情況應(yīng)急處理預(yù)案
- 深筋膜徒手松解療法
- 皮膚病學(xué)測試題含參考答案
評論
0/150
提交評論