从头细说J2EE-3
作者头像
  • 张娜
  • 2019-10-07 08:22:56 7

Spring AOP

(1)IoC的目的是为了管理Bean,而Bean是面向对象(OOP)设计的核心。例如,声明一个用户类或插座类都是基于面向对象的思想。

(2)有些情况是面向对象难以解决的。举个例子,消费部门的订单、消费部门和财务部门三者符合OOP的设计理念。订单发出后,消费部门进行审批并准备付款,但财务部门发现订单价格超出预算,需要取消订单。显然,预算超支不仅影响财务部门,还会影响消费部门之前所做的审批,因此需要撤销这些操作。我们将预算超支称为“切面”,它影响了订单、消费部门和财务部门这三个OOP对象。在理想情况下,这样的切面条件跨越多个对象,并影响它们之间的协作。因此,仅靠面向对象编程并不够,还需要面向切面的编程(AOP),通过它来管理这些切面上的对象之间的协作。

(3)Spring AOP经常用于数据库事务管理。许多情况类似于下面的例子:我们在执行第一步数据库更新后,不确定下一步是否会成功。如果下一步失败,我们会利用数据库事务的回滚功能来撤销第一步的更新,从而确保数据的一致性。在Spring AOP实现的数据库事务管理中,异常被用来触发事务回滚。默认情况下(可以通过Spring配置进行更改),只要Spring接收到异常信息,它就会回滚事务,从而保证数据一致性。这意味着在Spring事务管理中,只要接收到异常信息,Spring就会自动回滚事务,无需通过代码手动处理这一过程。

java /** * Spring AOP 处理订单伪代码 * @param order 订单 */ private void processOrder(Order order) { // 判断消费部门是否通过订单 boolean passFlag = productionDept.isPass(order); if (passFlag) { // 如果消费部门通过,继续进行财务部门审批 if (financialDept.isOverBudget(order)) { // 如果财务审批超限,抛出异常并回滚事务 throw new RuntimeException("预算超限!!"); } } }

在这里,我们看不到任何数据库代码,也没有复杂的try-catch-finally语句。在实际应用中,Spring AOP简化了这些细节,使开发者不需要关心这些底层逻辑,只需专注于业务代码即可。当发生异常时,Spring会自动回滚事务。尽管事务管理和业务逻辑非常复杂,但Spring通过提供隔离级别和传播行为等功能,大大简化了这些任务,减少了开发者的代码量和工作量。

    本文来源:图灵汇
责任编辑: : 张娜
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
细说从头EE
    下一篇