




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
jBeanBox是一個微形但功能較齊全的IOC/AOP工具,利用了Java的初始化塊實現的Java配置代替XML,比目前Spring或Guice的Java配置更簡單。jBeanBox采用ApacheLicense2.0開源協議。Spring,HiveMind及其他一些利用XML作為配置文件的IOC/AOP框架:XML不支持類名稱拼寫檢查和IDE重構,很難在運行時更改配置。(從Spring3.0Java的配置來取代XMLJava作為一個IOC/AOP工具來說,Spring過于復雜了。)強,對無源碼的第庫支持不佳,IOC/AOP工具不應該完全依賴于源碼。簡單,很少的源碼(不到3000行)實現了所有的IOC/AOP功能,沒有XML,只有1個注解(InjectBox)。學習曲線低、易、易擴充和移植。2)使用Java來代替XML,其實現比Spring或Guice的Java配置更簡單實用,上,Spring的一些服務如式事務可以抽取出來在jBeanBox上使用。中全部或部分取代SpringIoC/AOP內核,其主要功能有:*以JavaJava(第一種配置方式)來代替XML*以Java方法回調為基礎的JavaJava型安全和IDE重構支持。于學習。以上三種配置各有特點,甚至可以在同一個配置中混合使用。*單例/多例支持,默認情況下所有實例為單例(Spring);*內置AOP和AspectJSpring傳統XML拉式注入:利用@InjectBox注解(與GuiceSpring),支*以約定方式尋找配置,這是jBeanBoxSpring中創建多個ApplicationContext實例)*Bean(postConstruction和preDestory比較新,缺少足夠的測試。設置AOP時,目標類不能是finalCGLIB)在pom.xml個是標準AOP接口),如果使用Maven將自動這兩個jar包,jBeanBox了CGLIB及ASM庫,為了防止可能發生的與其它CGLIB版本,已將這兩個庫打包到jBeanBox并變更命名空間。jBeanBox不依賴于commonlog或Log4j,但是如果在類路徑中找到它們的配置,將自動采用它們jBeanBox項目導入JDK6以上版本、Gitbash、Maven,git cdmvnEclipse,按"import"->"ExistingProjectsintoWorkspace",選中jBeanBox,即可將項目導入,注意導入時不要勾選“Copytoproject示例1-oWorld第一個IOC注入演下面這個簡單程序演示了jBeanBox1+Box)尋找配置2JavapublicoWorldprivateStringpublicstatic oWorldBoxextendsBeanBox{o}}publicstaticvoidmain(String[]args)oWorldh=o}}2-基礎jBeanBoxpublicpublicclassOrder//orderprivateCompany//getters&setter}publicclassCompanyCompanyprivateString//getters&setters}publicclassOrderBoxextendsBeanBoxOrderBoxBeanBox子類,這是一個配{ setProperty("companyCompanyBox.class設定要注入的對象,可以是目標類,也可以是一個BeanBox配置類}publicpublicstaticclassCompanyBox1extendsBeanBox{setProperty("name","PetStore1");}}{//{}}}publicclassTesterpublicstaticvoidmain(String[]args)System.out.println("OrderbeanisaSingleTon?"+(order==}}為節省篇幅,一些java類以及靜態工廠、實例工廠演示未在此說明中列出,請詳見jbeanbox-eaxmple項目源碼,下同。3:AOP&AspectjSpring兼容,此項目已集成了AOP接口和Aspectj接口支持,但是切點只支持Java正則表達式式。("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為傳統無侵入的推式注入。可以看出,注解的引入可簡化源詳見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內核實現無XML的式事式事務是AOP的典型運用場合,基本原理是利用線程局部變量來管理連接,AOP的特點就是服務和內核是插拔式設計,內核和服務可以單獨使用。SpringIOC/AOP使用,如果抽取不出來,說明它綁死在Spring是不符的。本著不重新發明的原則,此示例將Spring中的式事務服務抽取出來,與jBeanBox整合,也就是說這一次的整合只利用了Spring的事務服務,而不使用它的IOC/AOP內核,很詭異的組合,但目的很明確:取消XML配置。以下是jBeanBox整合了c3p0數據池+JDBCTemplate+Spring式事務的一個例子,實測通過","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;//拋出運行期錯誤,導致事務回滾dao.execute("insertintousersvaluesUser2')");}publicstaticvoidmain(String[]args)TestertesterBeanBox.getBean(Tester.class);//從默認上下文獲取類實例}}此示例中需要額外用到C3P0、MysqlMySQL示例7:利用Java方法來手工生成實例。這種方式和Spring的Java配置類jBeanBox入屬性,(如運行在JAVA8下,強制類型轉換可以省略):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演示用注解來注入屬性、構造函數參數和方法參數。目前jBeanBox有三種配置方式,初始塊、Java活,可完全替代XML,但不支持方法名重構,Java方法回調是類型安全但靈充。參數用代號加數字指定,從0開始,如s0表示第一個String參數,i1表示第二個Integer參數,box2表示第三個BeanBox參數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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品配送運輸管理制度
- 藥店中藥銷售管理制度
- 藥店店長培訓管理制度
- 莘縣食堂安全管理制度
- 設備人員安全管理制度
- 設備借用歸還管理制度
- 設備安裝流程管理制度
- 設備施工工程管理制度
- 設備點檢日常管理制度
- 設備維修現場管理制度
- 婦幼保健機構績效考核評分細則
- 【高分復習資料】山東大學《244德語》歷年考研真題匯編
- (新版)山東省物流工程師職稱考試參考試題庫-下(多選、判斷題)
- 青年興則國家興青年強則國家強
- 全國行業職業技能競賽(電力交易員)考試題庫及答案
- DB50-T 1293-2022 松材線蟲病疫木除治技術規范
- 山東省青島市英語中考試題及解答參考(2025年)
- 多功能熱洗車熱洗清蠟QHSE作業指導書及操作規程
- 2024年北京中考地理試卷
- 液化石油氣站規章制度2024
- (安全生產)煤礦安全生產監管檢查清單
評論
0/150
提交評論