用Base类统一注入的方式简化编程

本文介绍了一种使用BaseAction简化Spring框架下Action配置的方法,通过在BaseAction中统一管理ServiceBean,减少重复配置,提高开发效率。
最近我们在一个小项目作了一点新的尝试,改变以往传统的做法,用Base类统一注入管理Bean的方式来简化编程。

这个项目使用的是Webwork + Spring + Hibernate的框架,每个功能模块都有对应的一套Webwork Action、Service和Hibernate Dao。我们使用这种框架的传统做法是,在每个Action中注入需要用到的Service Bean,这样需要在Action中声明要用到的Service成员变量,并提供set方法,也要在对应的Spring配置文件中(比如application.xml)为每个Action写上<property name="xxxService" value="xxxService"/>,以便Spring来进行Ioc注入管理。这样做的好处是结构很清晰,通过配置这一整套东西,能清晰地知道每个Action都要用到哪些Service。但这么做也带来额外的工作,新写一个功能的时候,比如新建一个Action,在这个Action中用到已经存在的一些Service的方法,则需要新写很多代码和配置文件项。

为了提高开发速度,我们做了一个改进,即抽取一个BaseAction类,所有其他具体功能的Action都从BaseAction继承。在BaseAction中统一声明所有的Service Bean为 protected 成员变量,并提供对应的get、set方法。在Spring配置文件中(application.xml),只在BaseAction这个Bean中声明所有用到的Service Bean,比如<property name="xxxService" value="xxxService"/>,而每个具体的Action Bean通过parent这个属性指定它们用到的父类(比如<bean id="xxxAction" parent="BaseAction" ...></bean>),而不用每个都写<property name="xxxService" value="xxxService"/>,这个可以省略了。在每个具体的Action中,也不需要声明Service成员变量,因为父类中已经有了,只需要在用的时候通过this.getXxxService() 的方式来取得所用的Service实例。这样,通过BaseAction就把所有的Service管理起来了,你每增加一个新的Action,只需要写业务相关的代码,在Spring中配置一个简单的Bean类,而不需要考虑如何配置、注入Service Bean。别小看这么一点点改进,它能缩短很多编码时间,每一个小的改进累积起来,就能大幅提高开发效率。

这里需要提醒一点的是,一定要记得在具体Action Bean的Spring配置时加上parent属性,如果你忘了添加这个属性,虽然你的Action在代码中确实是继承了BaseAction,编译和应用服务器启动时并不会报错,但当程序执行到具体Action中用this.getXxxService()来取得BaseAction中的Service实例时,只能取到空指针null。原因是你没写parent属性,Spring不会自动去给BaseAction注入需要的Service Bean。

这套新的方案,我们专门用Load runner作了一个性能测试,在模拟访问量达到10000时(不是完全的并发),新方案的内存损耗和传统方案没有太大差别。也就是说用新方案不会对内存产生大量的额外损耗,一方面因为我的Service都是singleton的,另一方面Spring的延迟注入也减少了一些开销。因为虽然我们每一个具体业务Action都从BaseAction继承了,而BaseAction拥有所有的Service Bean,但因为每个具体Action只根据需要使用到了某几个Service,而不是所有的Service,所以只有用到的这几个Service会被注入这个Action实例所引用的BaseAction实例,在加上单实例的作用,因此,这种方案从理论上来说应该和传统方案的内存损耗是近似的。

我们打算在接下来的大型项目中使用这个方案,看看真的具体到大型项目的实际运行中,是否会有别的问题。总之,我们会持续改进我们的设计思路和方案,朝着提高开发效率的方向前进。
内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值