您现在的位置是:首页 > 文章详情

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

日期:2020-02-14点击:385

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数据池配置,继承于HikariCPBox public 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和driverClassName public 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写一遍作对比就知道了。  

原文链接:https://www.oschina.net/news/113392/jbeanbox-4-0-0-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章