版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024顶管工程建设项目施工协议范本
- 2024年协议履行细则管理规程
- 2024建筑工程监理及管理服务协议
- 2024年二手注塑机交易协议指南
- 匆匆课件笔记教学课件
- 五年级劳动技术课教案1课
- 拈连课件教学课件
- 产业新城物业管理细化方案
- 产品推广简易劳动合同
- 个人影视贷款还款协议
- 混凝土路面工程监理实施细则
- 福建师范大学《数字摄像》2023-2024学年第一学期期末试卷
- 煤炭行业2025年行业回归合理盈利估值仍有提升空间
- 期中测试卷(1-4单元)(试题)-2024-2025学年四年级上册数学北师大版
- 5.2 珍惜师生情谊同步课件-2024-2025学年统编版道德与法治七年级上册
- 人教版2024新版七年级上册数学期中模拟测试卷(含答案解析)
- 专题25 圆的基本性质(分层精练)(解析版)
- 2024-2030年中国电视访谈节目行业市场前瞻与未来投资战略研究报告
- 手工木工(技师)技能认定理论考试题库大全-上(单选题)
- 5.2 珍惜师生情谊 课件-2024-2025学年统编版道德与法治七年 上册
- 在初中数学教学中有效开展项目式学习的策略
评论
0/150
提交评论