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

jBeanBox第一版终于完成了,已更新到项目目录https://sourceforge.net/projects/jbeanbox/ 下,有兴趣的可以看一看。
这个项目的主要特点:
1)简单,只用一个Java文件实现了IOC/AOP功能,源码不到350行,由此可见实现IOC/AOP实际上很简单。
2) 用Java类代替XML作为配置文件,Java作为配置文件的主要优点是IDE支持类名检查、重构。其实这也是这个项目如此小的原因,因为不用考虑读取和翻译XML文件的问题。
3) 支持所有注入方式如构造器注入、工厂注入等; AOP功能简化,只支持Around方法和切点的正则表达式,但是已能应付大多场合。
4)本项目以功能单一、源码精简为目的,功能仅限于IOC/AOP。 事务支持、DAO支持等业务功能不考虑扩充进来。

目前项目已完成,进入排错阶段,欢迎大家来挑错和试用,谢谢!(Email: Yong9981@gmail.com ) 因为发布在sourceForge,是英文介绍,就对付着看吧。
本贴的附件和网站上的是一样的,打了一个war包,可以直接导入到Eclipse,其中用到了asm-x.x.x.jar和cglib-x.x.jar两个第三方库也打进包了。

jBeanBox1.0.1 is a micro scale(1 file) but full functional IOC & AOP tool, it has no XML files(Use "BeanBox" java classes as configuration), no annotations. 1 single Java class ~350 lines source code do all the IOC/AOP job like Spring framework IOC/AOP core did.
jBeanBox is an open source project follows BSD license, project address: https://sourceforge.net/projects/jbeanbox/
(Note: 2 jar files asm-x.x.x.jar and cglib-x.x.jar are still needed for this project, it's used for create proxy beans similar like Spring did.)

Why jBeanBox?
Some other IOC/AOP frameworks problem:
1) Spring, HiveMind and other IOC/AOP tools use XML as configuration file: XML does not support class name spelling check & IDE refactoring, hard to create/change configuration in run-time.
(I noticed from Spring3.0, it started to use a kind Java class to replace XML, but Java mixed up with annotations, looks weird, and it's hard to create/change configuration at run time.)
About Spring, here are some pros & cons: http://www.aksindiblog.com/spring-framework-advantages-disadvantages.html. For my opinion, as an IOC/AOP tool, it’s too fat(more than 700 classes of core functions).
2) Guice and other IOC/AOP tools depend on annotation: write annotation in Java classes is invasion, IOC/AOP tool should better not change Java files.

jBeanBox is a micro IOC/AOP tool, only focus on IOC/AOP. Its source code are very short and easy to understand. It's ideal to mobile device, small projects, and of cause can be used anywhere where a tiny IOC/AOP tool needed.

Key features of jBeanBox:
1) Simple, only 1 short java file do all the IOC/AOP job. No XML files, no annotations, use pure Java classes as configurations, these Java classes be called "BeanBox" (like "Box" class in another project "jWebBox", in that project 1 single Java file did all jobs Tiles did; It seems using "Box-Oriented Programming” can often make project very short). It's easy to learn and to debug, any problem you can solve by yourself after look into the 350 lines source codes.
2) Compare to XML, Java configurations is not easy to read (but still some programmer like Java, otherwise why Spring invented Java configurations?), but the advantage is it can be organized in packages, and UML tool can used to draw class relationship, and most of all, IDE support class name spelling check and refactoring.
3) Bean configurations (BeanBoxes) can be created dynamically, it's easy to modify or create configurations at run-time, testing become simple and quick, testing configurations(if organized in packages) can be reused in production environment.
4) Small size, ideal for immigrate to mobile device.

How to use it:
For convenient, this project be packaged as .war file, you can throw it into Tomcat or Jboss webapps folder, or import into Eclipse as a web project to see the source code, and run "MainTest.java" to see the test result. There are 2 jar files "asm-3.x.x.jar" and "cglib-2.x.jar" packed in the war package but you can replace these 2 jars by downloading from their websites. There are some test classes in this war package, but for a new project, only 1 java file "BeanBox.java" and 2 libs (asm-3.x.x.jar and cglib-2.x.jar) are needed.

Typically a project using jBeanBox, need prepare below files:

1. Your bean or interface classes, advoice classes(AOP), for example:
public interface Iitem {
public void doPrint();
}

public class ItemImpl implements Iitem {
public void doPrint() {
System.out.println("Do print");
};
}

public class Tester {
private Iitem item;
//gette & setter

public void doPrintItem() {
item.doPrint();
}
}

public class LogAdvicor {//This is an advicor sample
private String name;
public Object doAround(Object[] args) {
System.out.println("=====logger " + name + ", Before method: " + args[2] + "=====");
Object o = BeanBox.invoke(args);
System.out.println("=====logger " + name + ", After method: " + args[2] + "=====");
return o;
}
//getter&setter
}

2. Configuration classes (The substitute of XML):
class TesterBox extends BeanBox {
{
this.setClassOrValue(Tester.class);
this.setProperty("item", new BeanBox(ItemImpl.class));
}
}

3. At last, add point-cut and get bean by call getBean() method:
public static void main(String[] args) {
BeanBox.addAdvicor("com.test.\\w*.\\w*", "doPrint\\w*", new BeanBox(LogAdvicor.class).setProperty("name", "Demo"), "doAround");
Tester t = (Tester) new TesterBox().getBean();
t.doPrintItem();
}
The result:
=====logger Demo, Before method: public void com.test.anotherTest.Tester.doPrintItem()=====
=====logger Demo, Before method: public void com.test.anotherTest.ItemImpl.doPrint()=====
Do print
=====logger Demo, After method: public void com.test.anotherTest.ItemImpl.doPrint()=====
=====logger Demo, After method: public void com.test.anotherTest.Tester.doPrintItem()=====

More usage like Construction injection, Static Factory injection & Bean Factory injection can see test demo in project test folder.
政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.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 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

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

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

Drinkjava2的博客 248

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

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

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

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

Drinkjava2的博客 752

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

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

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

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

项目里面哪些地方用到了ioc_IOC/AOP工具 jBeanBox

jBeanBoxLicense: Apache 2.0jBeanBox是一个微形但功能较齐全的IOC/AOP工具,除了引入的第三方库之外,它的核心只有十多个类,源码只有1500行左右。它运用了“Box”编程模式,利用纯粹的Java类作为配置。jBeanBox运行于JDK1.6或以上。jBeanBox的开发目的是要克服其它IOC/AOP工具的一些问题:Spring: 源码臃肿,Java方式的配置不灵...

weixin_39611070的博客 269

深度学习与神经网络有什么区别

人工神经网络(ArtificialNeuralNetwork,即ANN)是从信息处理角度对人脑神经元网络进行抽象,是20世纪80年代以来人工智能领域兴起的研究热点,其本质是一种运算模型,由大量的节点(或称神经元)之间相互联接构成,在模式识别、智能机器人、自动控制、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。...

super67269的博客 8488

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

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

曾用名:极客柒 1853

DLMS—Cryptographic algorithms—(Green-Book)加密算法

密码学是数学的一个分支,基于数据的转换,并且可以用来提供多种安全服务:保密性、数据完整性、认证、授权和不可否认性。密码学依赖于两个基本组成部分:算法(或密码学方法)和密钥。算法是一个数学函数,而密钥是在转换过程中使用的参数。密码算法和密钥用于对数据应用密码保护(例如,加密数据或生成数字签名),以及移除或检查保护(例如,解密加密的数据或验证数字签名)。密码哈希函数:这类函数不需要密钥(尽管它们可以以使用密钥的模式使用)。哈希函数通常用作算法的一个组成部分,以提供安全服务。见9.2.3.2节。对称密钥算法。

一个bug是bug,多个bug能work 1711

征求IOC/AOP微形开源项目jBeanBox合作者

这是一个微形开源项目,目标是使用尽可能少的Java类实现全功能的IOC和AOP功能,有兴趣参加的朋友可以跟贴,贡献者将列入作者名单,谢谢! 项目的目的是取消XML配置文件而用纯Java类代替,Spring本身越来越臃肿,替我们自做主张集成了自以为最好的一条龙服务,这本身没什么,可以自取所需。 但是它最大问题是采用XML静态配置,导致需要动态修改配置功能时灵活性不够,注解的引入没有根本性变化。 j...

Drinkjava2的博客 261

软件测试面试题汇总

软件测试面试题汇总 测试技术面试题 ........................................................................................................................................................................ 5 1、什么是兼容

晴天的专栏 2万+

荣耀将从华为独立?ofo总部人去楼空;半数用户满意新iPhone|极客头条

「优快云 极客头条」,是从 优快云 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道。风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时...

优快云资讯 1856

视觉Transformer实战 | Token-to-Token Vision Transformer(T2T-ViT)详解与实现

Vision Transformer (ViT) 在计算机视觉领域取得了巨大成功,但标准的 ViT 存在一些局限性,如需要大规模预训练数据、对局部结构建模不足等。Token-to-Token ViT (T2T-ViT) 通过引入渐进式分词过程改进了原始 ViT,使其能够在中小型数据集上取得更好的性能。本节将详细介绍 T2T-ViT 的技术原理,并使用 PyTorch 从零开始实现 T2T-ViT。

盼小辉丶的博客 4万+

以阿克曼转向车为例对URDF和XACRO文件进行解读

   最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文章就以这个阿克曼小车的XACRO文件为例,对URDF或XACRO文件的格式和内容进行解读,期望经过解读和学习,找到错误原因及所在,并解决这三个错误    先来放一下上面右图所示的模型的完整的XACRO文件: <?xml version="1.0"?> <!-- racecar.urdf.x

慕羽★的博客 3702
上一篇: Eclipse导入Gradle下载的spring源码过程笔记
下一篇: 意识的本质和一个人工脑模型
Drinkjava2
博客等级 码龄11年 9粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值