jBeanBox 4.0.0 發布,微形 Java IOC/AOP 工具

2020-12-12 開源中國

jBeanBox是一個微形但功能較齊全的IOC/AOP工具,它本身的核心源碼只有約3000行,jBeanBox兼容主要的JSR330和Spring註解。jBeanBox適用於小型項目做為Spring的替代品,或充當開源項目的IOC/AOP功能模塊。jBeanBox用於Java6及以上環境,主頁:https://gitee.com/drinkjava2/jBeanBox


下表是jBeanBox與Spring、Guice在功能上的一個對比表,紅字部分為本次更新新增的內容:  

4.0.0版更新明細:  
1. 添加了@NAMED和@QUALIFER兩個註解,並相應地增加了對應的Spring的@Qualifer和JSR330的@Named、@Qualifer註解的兼容性支持。  
 具體用法請參見JSR330標準或Spring關於@Named和@Qualifer的用法,唯一的區別只是jBeanBox自帶的註解都是大寫的,當然,也可以直接使用JSR或Spring註解,jBeanBox已經把這些註解都打包進來了,無須引入Spring或JSR庫。 Java的類加載器有先到先得的特性,如果jar沒有特殊設定,當一個類被先加載,後面出現的同名類將被忽略,這是為什麼jBeanBox能兼容Spring註解的原理。  

2. 新增@COMPONENT註解,並相應增加了對應的Spring的@Service,@Component,@Controller,@Repository四個註解的兼容性支持。  
具體用法請參見Spring對上述四個註解的用法,而且必須結合jBeanBox的scanComponents方法來進行類掃描,這個和Spring的類掃描是一樣的,光在類上加一個@Component註解是不夠的,還必須開啟掃描,好發現哪些類屬於需要容器生成的。注意Guice是沒有這個類掃描功能的,功能缺失。 
類掃描的一個示例子如下,以包名為參數,可以有多個包名用逗號隔開,但每個包名只允許出現一個星號通配符:
JBEANBOX.scanComponents("com.foo.*", "com.bar.*", "com.*.baz");

3. 新增一個PrototypeBean接口
   通常如果一個類,沒有任何配置、註解,則使用jBeanBox獲取它的實例JBEANBOX.getBean(Foo.Class)將會是一個單例,但是如果這個類實現了PrototypeBean接口,jBeanBox將會每次都創建一個新的實例。這個功能通常可以用在Controller上,如果讓Controller由jBeanBox生成,它可以強制每次生成一個新實例而不是返回一個單例。

4.其它一些其它細小更新
  增加Spring的@Value支持、AOP匹配允許有多個規則用逗號隔開、create方法取消Caller參數等。具體使用請參見主頁說明。

另外說一下,本次更新jBeanBox新增了@Named和@Qualifier註解的支持,但目的僅僅是為了更符合標準和可移植性,照顧現有Guice和Spring用戶習慣。但我本人不建議使用@Named和@Qualifier這兩個註解,因為在jBeanBox中有更優雅的實現方式,見下:

//數據池配置基類public static class HikariCPBox extends BeanBox { public HikariDataSource create() { HikariDataSource ds = new HikariDataSource(); ds.addDataSourceProperty("cachePrepStmts", true); ds.addDataSourceProperty("prepStmtCacheSize", 250); ds.setMaximumPoolSize(3); ds.setConnectionTimeout(5000); this.setPreDestroy("close");// jBeanBox will close pool return ds; }}//oracle數據池配置,繼承於HikariCPBoxpublic static class OracleDataSourceBox extends HikariCPBox { { injectValue("jdbcUrl", "jdbc:oracle:thin:@127.0.0.1:1521:XE"); injectValue("driverClassName", "oracle.jdbc.OracleDriver"); injectValue("username", "root");// change to your user & password injectValue("password", "root888"); }}//MySql數據源配置類, 繼承了用戶名和密碼,重載了jdbcRul和driverClassNamepublic static class MySqlDataSourceBox extends OracleDataSourceBox { { injectValue("jdbcUrl", "jdbc:mysql://127.0.0.1:3306/jsqlboxtest?rewriteBatchedStatements=true&useSSL=false"); injectValue("driverClassName", "com.mysql.jdbc.Driver"); }}//Service類,有兩個DataSource欄位需要注入public class SomeService{@INJECT(MySqlDataSourceBox.class)DataSource ds1;@INJECT(OracleDataSourceBox.class)DataSource ds2;...}

大家可以看到,使用jBeanBox可以直接在@INJECT裡寫上配置類就完了,簡單明了。而使用@Named或@Qualifier不光開發麻煩,而且還不支持IDE定位到配置類,維護也麻煩。如果有不相信的,可以把上例用Guice或Spring寫一遍作對比就知道了。  

相關焦點

  • Java 第一大框架:Spring 的 IoC 跟 AOP 雛形如何實現?
    SpringSpring make java more simple;Spring make java more modern;Spring make java more reactive;Spring make java more productive;Spring make java more cloud-ready。
  • xk-time 1.1.0 發布,Java 時間工具包,增加模糊解析日期功能
    xk-time 1.1.0 發布了,更新如下:1.增加Excel常用日期格式
  • 面試被問spring的aop的機制,這樣答
    參加過面試的或者是準備要參加面試在刷面試題的小夥伴,肯定遇到過「spring的aop的機制是什麼?」這個問題。刷過面試題的小夥伴肯定要說了,aop的機制是代理啊。那代理又是怎麼回事呢?下面我來給大家說說這個代理是怎麼回事,怎麼就能實現aop了。先來說說代理這個詞,你都聽過哪些代理相關的詞呢?房產代理?保險代理?代理商?
  • smart-doc 1.8.5 發布,Java 零註解文檔生成工具
    smart-doc是一個java restful api文檔生成工具, smart-doc完全基於接口源碼分析來生成接口文檔,完全做到零註解侵入
  • Oracle 微服務框架 Helidon 2.0.0-M1 發布
    Helidon 支持兩種編程模型,一種是 Helidon SE,Oracle 稱之為「以現代響應式方式開發的簡單、多功能、輕量級微框架」;另一個是 Helidon MP,它是一個 Eclipse MicroProfile 實現,提供 Java EE/Jakarta EE 開發人員熟悉的開發體驗。
  • Java 時間工具包 xk-time 3.0.1 發布,中國工作日計算問題修復
    4.代碼優化,增加注釋和文檔等。為什麼要開發這個工具?(1)Java8以前的Date API設計不太好,使用不方便,往往會有線程安全問題。xk-time工具包,使用java8 api,其中Instant、LocalDate、LocalDateTime、LocalTime、ZonedDateTime等都是線程安全的類,而且增加了更豐富的方法,在此基礎上開發相關工具類,線程安全,讓使用更方便。
  • JPress 0.2.3 發布,WordPress 的 Java 代替版
    JPress 0.2.3 版本發布了,此版本主要是修復bug,增強穩定性,同時完善module,非常方便的二次開發。
  • java新手0基礎如何最快速的入門?
    0基礎學Java只需辦法適合,仍然有機遇進修好Java編程。初學Java就像交同夥從生疏到認識再到鐵桿錯誤平生相伴,跟著進修的深刻,你會發明學Java並非設想的那樣死板和艱苦,乃至另有一些美好之感,本文中軟卓著就為人人先容零根基學java的10個籌劃,對初學java的你必定有贊助:籌整齊:透闢理解面向工具只有理解了面向工具能力感知Java編程的絕妙,面向工具是Java中很緊張的一個概念,假如理解不透闢的話,你可以或者在前期編程時會仍然遵守面向進程的形式
  • 聊聊java中NIO的2.0版本AIO
    在2011年7月28日,jdk1.7被正式發布。他的一個最大的亮點就是將原來的NIO類庫生成到了NIO2.0,也被叫做AIO。這篇文章將通過案例對AIO進行一個講解。一、IO的演進在jdk1.4之前,java中的IO類庫實在是超級原始,很多我們現在熟知的概念都還沒有出現,比如說管道、緩衝區等等。
  • Wit 2.0.0-beta 發布,Java 模板引擎(原 Webit Script)
    Febit Wit (原 Webit Script )是一個 Java 平臺下的模板引擎,語法類似 JavaScript,支持自定義函數,全局變量,Lambda 表達式,核心模塊輕巧(2.0.0
  • 零基礎學習初識Java筆記
    java -version 檢測jdk版本的開發java:1.新建文本文檔2.編寫java代碼3.更改文件後綴名為 .java4.按Windows+R因為.java文件 電腦是讀不懂的,編譯成二進位文件後,電腦才能讀懂我們都知道電腦只認識0 和1 電腦只認知二進位進位 二進位 八進位 十進位......
  • 搞Java的你還不會Spring?一篇文章帶你掌握
    maxSpeed=300000.0]雖然程序並沒有報錯,但這樣的結果也不是我們想看到的,若是想避免這樣的問題,可以指定每個參數的類型:<bean id="car"><constructor-arg value="Audi" type="java.lang.String
  • 這款Java工具類庫簡直棒級了
    」官方文檔網址:「https://www.hutool.cn/docs/#/」Hutool主要組件:模塊介紹hutool-aopJDK動態代理封裝,提供非IOC下的切面支持hutool-bloomFilter布隆過濾,提供一些Hash算法的布隆過濾hutool-cache
  • 賊好用的Java工具類庫,GitHub星標10k+,你在用嗎?
    (抄自作者簡介)功能一個Java基礎工具類,對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝,組成各種Util工具類,同時提供以下組件:  hutool-aop JDK動態代理封裝,提供非IOC下的切面支持  hutool-bloomFilter 布隆過濾,提供一些Hash
  • 虛擬主機 支持java嗎
    虛擬主機 支持java嗎?虛擬主機支持java的,但java需要專屬環境、硬體支持,不像其他語言,如ASP、PHP等,很多情況下,可以共享環境、硬體等。所以,提供java環境的虛擬主機比較少,只有少部分服務商,比如西部數碼。
  • java生成隨機數的五種方法
    0.25090731064243355 0.011064998061666276 0.600686228175639 0.9084006027629496 0.12700524654847833 0.6084605849069343 0.7290804782514261 0.9923831908303121實現原理:
  • spring原理詳解,兩大核心IOC和AOP
    大家好,我是java夢之旅,一個被Bug耽誤了才藝的程式設計師,專注於Java領域的知識分享和技術交流,每天會給大家帶來Java學習的乾貨教程,喜歡我的同學可以關注我,一起學習,一起加油!--><beanid="stu1"class="first.Student"/><beanid="date1"class="java.util.Date"/>2)靜態工廠方法<!
  • AndroidStudio 4.0發布啦,構建數據實時分析,動作編輯器是亮點
    在Android Studio 4.0中,desugaring引擎已經擴展到支持Java語言的API,因此,無論你的APP的minSdk版本是多少,都能支持Java語言的API。這意味著即便某些API只在最近的Android版本中才有(如java.util.stream、java.util.function和java.time),你的APP都能使用。
  • Java 通用代碼生成器光 1.5.0 Kama( 頓悟)發布嘗鮮版 8,支持克隆...
    Java通用代碼生成器光1.5.0 Kama(頓悟)發布嘗鮮版8,支持克隆動詞,即將進入Beta測試Java通用代碼生成器光1.5.0 Kama