jBeanBox 4.0.0 发布,微形 Java IOC/AOP 工具
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写一遍作对比就知道了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
冰枫蓝叶聊天女仆 V2.0 已发布
冰枫蓝叶聊天女仆 是由 冰枫火灵X<1079092922@qq.com> 编写的一款简单实用的聊天机器人软件,采用LGPLv3许可证对外发布。 新版特征: 重构程序,拆分为三个模块,分别是主程序(maid.py),答句库(libmaid.py),时间库(libmaidtimer.py)三个部分,后两个程序库可以单独使用。 添加了两种提问的回答 对卖萌的回复 少量语句调整 可以使用以下语句来单独使用自带程序库: ./libmaid.py '问句' ./libmaid.py '问句' '主人名字' '女仆名字' ./libmaidtimer.py --fulltime ./libmaidtimer.py --time 您可以通过 pyinstaller -F 命令来将它们编译成二进制程序文件。 下载链接:https://gitee.com/FSTEATED/CHAT-ROBOT/releases/v2.0
- 下一篇
Spring Integration 5.3 M2 发布,Spring 消息通信
Spring Integration 5.3 的第二个里程碑版本发布了,可从里程碑仓库获取。 compile "org.springframework.integration:spring-integration-core:5.3.0.M2" 主要更新内容: 通过 IntegrationFlowExtension 实现,现在可以将自己的 Java DSL 进行 Spring 集成。现在可以将现有的 IntegrationComponentSpec 实现扩展为其他选项。因此,现在可以在目标项目中实现 Java DSL 中的任何自定义和可重用解决方案。 HTTP 和 WebFlux outbound通道适配器现在支持 UriBuilderFactory.EncodingMode 选项,而不是以前的 `encodeUri` 布尔标志。 AMQP outbound 通道适配器具有一个新的属性 multiSend,允许在一个 RabbitTemplate 调用范围内发送多条消息。 现在,AMQP inbound通道适配器支持将 ConsumerBatchEnabled 属性设置为 tru...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路