用jBeanBox替换Spring内核实现无XML配置的声明式事务服务

jBeanBox是一个微形但功能较齐全的IOC/AOP工具,用于Java6或以上环境 License: Apache 2.0 jBeanBox是一个微形但功能较齐全的IOC/AOP工具,用于Java6或以上环境。 jBeanBox项目的定位:需要一个功能较全的IOC/AOP工具,但是又不想引入臃肿的Spring。 其它IOC/AOP工具的问题: Spring: 源码臃肿,Java方式的配置不灵活, 非单例模式时性能差。 Guice: 源码臃肿(200多个类),手工绑定使用不方便,功能不全,如不支持PostConstruct、不支持类路径扫描。 Feather:源码极简(几百行),但功能不全,只是DI工具,不支持AOP。 Dagger: 源码略臃肿(300个类),编译期静态注入,性能最好,但使用不方便,不支持AOP。 Genie: 这是ActFramework项目的内核,只是DI工具,不支持AOP。 Nutz、jFinal等Web开发框架中也有IOC/AOP工具,但它们没有独立出来,并且没有考虑JSR330、AOP联盟等业界标准,通用性差。 jBeanBox的主要优点 功能较全,Java配置、注解配置、Bean生命周期支持、循环依赖检测和注入、AOP这些功能都具备。 立即下载
Spring的问题主要是太复杂、配置方式太多,XML配置不支持运行期修改,不支持IDE类名重构、方法提示。jBeanBox是一个单文件源码只有650行的IOC/AOP微型项目,特点是用JAVA代替XML, 简单易懂。目前版本更新到2.0版,添加了AOP联盟和AspectJ接口支持以与其它AOP工具兼容。 声明式事务是AOP的典型运用场合,基本原理是利用线程局部变量来管理连接,本来想写一个简化版的,但一来水平有限,二来AOP的特点就是服务和内核是插拔式设计,内核和服务可以单独使用。Spring中提供的其它业务支持如 ORM、JTA、JMS等理论上都可以抽取出来在其它IOC/AOP工具上使用,如果抽取不出来,说明它绑死在Spring内核上了,这与它的设计理念是不符的。本着不重新发明轮子的原则, 现试着将Spring中的声明式事务服务抽取出来,与 jBeanBox整合,也就是说这一次的整合只利用了Spring的事务服务,而不使用它的IOC/AOP内核 ,很怪异的组合方式,但目的很明确:取消XML配置。
以下是jBeanBox整合了c3p0数据池+JDBCTemplate+Spring声明式事务的一个例子,实测通过。


package examples.example3_transaction;
import java.util.Properties;
import net.sf.jbeanbox.BeanBox;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.interceptor.TransactionInterceptor;

import com.mchange.v2.c3p0.ComboPooledDataSource;

class DSPoolBeanBox extends BeanBox {
{ setClassOrValue(ComboPooledDataSource.class);
setProperty("jdbcUrl", "jdbc:mysql://127.0.0.1:3306/test?user=root&password=yourpwd&useUnicode=true&characterEncoding=UTF-8");
setProperty("driverClass", "com.mysql.jdbc.Driver");//your jdbc driver name
setProperty("maxPoolSize", 10);
}
}

class JdbcTmpBox extends BeanBox {
{ setConstructor(JdbcTemplate.class, new Object[] { new DSPoolBeanBox() });
}
}

class TxManagerBox extends BeanBox {
{ setClassOrValue(DataSourceTransactionManager.class);
setProperty("dataSource", new DSPoolBeanBox());
}
}

class TxInterceptorBox extends BeanBox {// Advice
{ Properties props = new Properties();
props.put("insert*", "PROPAGATION_REQUIRED");
setConstructor(TransactionInterceptor.class, new Object[] { new TxManagerBox(), props });
}
}

public class SpringTxTest {
static {// AOP setting
BeanBox.setAOPAround("examples.example3_transaction.SpringTx\\w*", "insert\\w*", new TxInterceptorBox(), "invoke");
}

public void insertUser() {
JdbcTemplate dao = new JdbcTmpBox().getBean();
dao.execute("insert into users values ('User1')");
int i = 1 / 0; // throw RuntimeException
dao.execute("insert into users values ('User2')");
}

public static void main(String[] args) {
SpringTxTest tester = new BeanBox(SpringTxTest.class).getBean();
tester.insertUser();
}
}

可以看到,insertUser方法中出错事务将整体回滚, Spring的声明服务生效了。讨厌的XML终于彻底消失, 配置和代码的界限模糊,可以在Java里随用随配,程序员又做回了程序员。套用一句话来说:这个世界终于清静了。

顺便提一下, 从Spring3.0起支持一种基于JAVA的配置,但需要与注解配合使用,复杂难用,基本上是一种等同于XML的伪码, 并有以下问题:配置不能继承,运行期不能改配置,以方法名而不是类名来作为bean的缺省ID, 目标类重构时,方法名不能跟着自动变更, 必须手工更改,这就抵消了重构的意义。
例如Spring基于JAVA的配置 :
@Bean
public Student studentBean(){
return new Student("yoona",24);
}
Student student = (Student)context.getBean("studentBean");
当Student类重构为Teacher类时,studentBean这个BeanID不会自动变更为"TeacherBean",必须手工去改。

如需运行本文例子,请修改实际数据库连接及下载下面提到的12个jar包。 或是从jBeanBox项目网站下载打包好的"Demo_jBeanBox2.0.war"文件,其中已包含此示例及所有库。
jBeanBox2.0所须包:
http://central.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar
http://central.maven.org/maven2/asm/asm/3.3.1/asm-3.3.1.jar
http://central.maven.org/maven2/org/aspectj/aspectjrt/1.8.9/aspectjrt-1.8.9.jar
http://central.maven.org/maven2/cglib/cglib/2.2.2/cglib-2.2.2.jar

此示例所须包:
http://central.maven.org/maven2/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar
http://central.maven.org/maven2/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.5/mysql-connector-java-5.1.5.jar
http://central.maven.org/maven2/org/springframework/spring-aop/3.2.16.RELEASE/spring-aop-3.2.16.RELEASE.jar
http://central.maven.org/maven2/org/springframework/spring-beans/3.2.16.RELEASE/spring-beans-3.2.16.RELEASE.jar
http://central.maven.org/maven2/org/springframework/spring-core/3.2.16.RELEASE/spring-core-3.2.16.RELEASE.jar
http://central.maven.org/maven2/org/springframework/spring-jdbc/3.2.16.RELEASE/spring-jdbc-3.2.16.RELEASE.jar
http://central.maven.org/maven2/org/springframework/spring-tx/3.2.16.RELEASE/spring-tx-3.2.16.RELEASE.jar
如需用"pom.xml"下载包,可在项目主页找到。
jBeanBox是以源码形式发布,只有一个Java文件,下载页面为:https://github.com/drinkjava2/jBeanBox/tree/master/jBeanBox2.0
以源码形式发布一方面是因为jBeanBox还处于开发期,以源码形式发布便于阅读源码和改错,毕竟是个只有650行源码的小程序。另一主面是因为BeanBox作为IOC/AOP基类,如同一个项目需要存在多套IOC/AOP容器,必须将BeanBox类拷贝并改名以获取新的命名空间。
政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx 政府科技管理者如何提升科技成果转化项目进场交易的备案效率? 立即下载

相关推荐

科技中介服务机构如何通过智能体技术提升服务效率与专业度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

解决maven 打包不能下载私服上的jar包

背景 使用mvn clean package -DskipTests -Pro 打包,提示如下信息,找不到依赖的三方包,正常应该是从公司的私服下载,如果找不见,再从其他中央仓库下载。 问题截图如下: 于是查看maven 的setting.xml ,如下图二其中,profile 里配置了公司私服的地址,而且公司私服的镜像地址也配置,如下图三: 图二: 图三: 解决办法 查看官网及其他环境的maven setting.xml 配置文件,发现没有配置默认的profile ,因此需要给公司私服的.

xiangqianzou_liu的专栏 2188

产业园区如何高效对接企业技术需求并推动成果转化?观点作者:科易网-国家科技成果转化(厦门)示范基地.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Box类Java,jBeanBox: BeanBox是一个微形(只有单个Java文件约1000行源码)但麻雀虽小功能齐全的IOC/AOP项目,用Java配置代替XML,比目前Spring或Guice的...

jBeanBox是一个微形(只有单个Java文件约1000行源码)但功能较齐全的IOC/AOP工具,利用了Java的初始化块实现的Java配置代替XML,比目前Spring或Guice的Java配置更简单更实用。jBeanBox遵循BSD-3开源协议,目前的版本是jBeanBox2.2。其他一些IOC / AOP框架问题:1)Spring,HiveMind的和其他IOC/AOP工具使用XML作为配...

weixin_28996271的博客 238

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

20.Spring实现无xml的事务控制

参考的学习视频→https://b23.tv/av47952931/p82 使用的注解: @EnableTransactionManagement 作用: 开启spring对注解事务的支持 -示例 新建事务管理器配置类TransactionConfig 新建数据库配置类JdbcConfig jdbcConfig.properties配置文件 spr...

si_si_si的博客 213

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

用jBeanBox替换Spring内核实现声明式事务

Spring的问题主要是太复杂、配置方式太多,XML配置不支持运行期修改,不支持IDE类名重构、方法提示。jBeanBox是一个单文件源码只有650行的IOC/AOP微型项目,特点是用JAVA代替XML, 简单易懂。目前版本更新到2.0版,添加了AOP联盟和AspectJ接口支持以与其它AOP工具兼容。 声明式事务是AOP的典型运用场合,基本原理是利用线程局部变量来管理连接,本想自已写一个简化版的...

Drinkjava2的博客 248

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

无功优化电网故障下分布式能源系统多目标优化[并网转换器(GCC)](Matlab代码&Simulink实现)

内容概要:本文详细介绍了基于Plecs或Simulink平台构建的全桥LLC谐振变换器仿真模型,重点研究了变频控制与移相混合控制策略下的闭环系统设计与参数优化方法。内容涵盖全桥LLC谐振变换器的工作原理、小信号建模技术(如扩展描述函数EDF)、PID控制器参数整定过程以及软开关实现条件,并通过仿真验证了系统在稳态输出性能、动态响应特性(如启动过程与负载阶跃)和频率调节平滑性等方面的优良表现。同时提供了完整的仿真模型、参数设计报告及说明文档,有助于读者复现结果并深入理解控制机制与建模细节。; 适合人群:具备电力电子、自动控制等相关专业知识背景,从事高效率电源设计、新能源变换系统研发的工程师及高等院校电力电子与电力传动方向的研究生。; 使用场景及目标:①掌握LLC谐振变换器的小信号建模与闭环控制系统设计方法;②学习并应用变频与移相结合控制策略提升电源转换效率;③支撑科研项目中的电力电子系统仿真验证或学位论文课题开发;④复现高水平学术论文中关于谐振变换器的控制方案与性能分析。; 阅读建议:建议结合所提供的仿真模型与参数设计资料,边运行仿真边对照文章内容理解控制逻辑与建模过程,特别关注小信号模型的建立方法与PID控制器参数整定环节,以增强对实际工程问题的分析与设计能力。

JPA Guice的JPA持久化

Java Persistence API (JPA) JPA 是个标准发布的JSR-220 (或 EJB3)的一部分. 大致与HIbernate或者Oracle的TopLink相同; 他们也是很多重要JPA的实现中的2个。. Guice 的持久化支持与厂商无关, 所以如果你需要的话它很容易在不同的实现(如Appengine's datastore)中进行切换。 启用持久化支持(

yys79的专栏 3281

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1613

单文件实现IOC/AOP功能,jBeanBox项目第一版发布

jBeanBox第一版终于完成了,已更新到项目目录https://sourceforge.net/projects/jbeanbox/ 下,有兴趣的可以看一看。 这个项目的主要特点: 1)简单,只用一个Java文件实现了IOC/AOP功能,源码不到350行,由此可见实现IOC/AOP实际上很简单。 2) 用Java类代替XML作为配置文件,Java作为配置文件的主要优点是IDE支持类名检查、...

Drinkjava2的博客 317

PointNetLK实战:5步搞定点云配准(附ModelNet40数据集训练技巧)

本文提供了一份详细的PointNetLK实战指南,帮助读者在5步内掌握点云配准技术。文章以ModelNet40数据集为例,深入讲解了环境搭建、数据预处理、模型训练与调试等核心步骤,并分享了关键的训练技巧和调参策略,旨在让开发者快速实现并应用这一高效的深度学习配准方法。

wind6的博客 462

图像质量评估:使用 SSIM 计算图像相似性

在图像处理领域,衡量两幅图像之间相似性的一种常见方法是使用结构相似性指数(SSIM)。SSIM 是一种全参考的图像质量评估指标,它不仅考虑了图像的亮度、对比度,还考虑了结构信息。在本文中,我们将介绍一个使用 Python 和 OpenCV 实现的 SSIM 计算脚本,并使用该脚本评估两幅图像的相似性。

hasque2019的博客 1153

Spring中基于xml和注解的声明式事务配置

基于xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://w...

qq_44341488的博客 299

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法

本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。

qq_43011586的博客 3685

IOC/AOP工具 jBeanBox

jBeanBox是一个微形(只有单个Java文件约1000行源码)但功能较齐全的IOC/AOP工具,利用了Java的初始化块实现的Java配置代替XML,比目前Spring或Guice的Java配置更简单更实用。jBeanBox遵循BSD-3开源协议,目前的版本是jBeanBox2.2。 参考:http://www.oschina.net/p/jBeanBox

qqyouhappy的博客 584

02-基于ART-PI开发板创建USB CDC 虚拟串口设备

本例在ART-PI开发板上,基于RT-Thread 5.0,5虚拟了一个USB32 CDC串口设备。

arm_fan的专栏 1886

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9645
上一篇: 用jBeanBox替换Spring内核实现声明式事务
下一篇: 一个机械工程师也谈谈对数据和领域建模的理解
Drinkjava2
博客等级 码龄11年 9粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值