Spring 学习笔记(六)—— AOP的简单理解
来源:互联网 发布:淘宝差评师怎么找 编辑:程序博客网 时间:2024/06/05 03:03
系统中的业务可以分为核心关注点和横切关注点。
核心关注点时业务处理的主要流程,而横切关注点是与核心业务无关但更为通用的业务。
各个横切关注点离散地穿插于核心业务之中,导致系统地每一个模块都与这些业务具有很强的依赖性,当需要添加新的横切功能时,需要大幅修改已有的代码,这些都严重影响了系统的可维护性和可拓展性。
AOP要解决的就是整个问题,使用AOP框架后,能够将这些影响多个类的通用性服务抽取出来(即切面),并通过配置的方法明确再哪些位置插入这些服务;系统运行后,AOP框架会在指定的时机自动运行这些服务;从而达到将核心业务逻辑和服务性逻辑分离的目的,减少了重复代码。
场景模拟
首先我们建立一个可以使用AOP的场景———一个简化的购买过程以及退货过程模拟
建立一个Service来处理这两个请求:
package aop_part.Demo1;/** * Created by Richard on 2017/7/28. */public interface BuyService { /* * 模拟购买商品的过程 * @param:username,productname * @return orderNum */ int buy(String username,String productname); /* *模拟退货过程 * @param:orderNum */ void returnGod(int orderNum);}
其实现类:
package aop_part.Demo1;/** * Created by Richard on 2017/7/28. */public class BuyServiceImpl implements BuyService { private static int Order_Num=1000; private TransactionManager transactionManager=new TransactionManager(); @Override public int buy(String username, String productname) { try{ transactionManager.transaction_start(); System.out.println("用户"+username+"购买了"+productname); transactionManager.transaction_submit(); }catch (Exception e){ e.printStackTrace(); transactionManager.transaction_rollback(); } return Order_Num++; } @Override public void returnGod(int orderNum) { try { transactionManager.transaction_start(); System.out.println("订单"+orderNum+"申请退回"); transactionManager.transaction_submit(); }catch (Exception e) { e.printStackTrace(); transactionManager.transaction_rollback(); } }}
因为购买和退货的实际操作中会涉及到数据库,所以我们引入事务整个概念,来控制整个流程,现在创建一个TransactionManager来管理事务:
package aop_part.Demo1;/** * 模拟简单的数据库事务操作的三个状态 * Created by Richard on 2017/7/28. */public class TransactionManager { public void transaction_start(){ System.out.print("【事务开始】"); } public void transaction_submit(){ System.out.println("【事务提交】"); } public void transaction_rollback(){ System.out.println("【事务回滚】"); }}
创建一个Test类,来模拟两个操作,假设购买用户为rekent,购买产品为AOP_Study,之后再执行退货操作,操作订单为1100,其输出结果为:
【事务开始】用户rekent购买了AOP_Study【事务提交】【事务开始】订单1100申请退回【事务提交】Process finished with exit code 0
上面的示例演示了AOP的应用场景:
(1)存在多个业务操作(如示例中的购买商品和退货业务)
(2)多个核心操作中都需要完成某个相同的操作(如示例中的事务操作),并且这些操作和核心业务功能没有直接关系。
即上述的事务操作可以使用AOP框架来协助我们更加方便的解决。
阅读全文
0 0
- Spring 学习笔记(六)—— AOP的简单理解
- Spring学习笔记---AOP的简单实例
- spring学习(六)—AOP的概念和作用
- AOP学习笔记(二)——Spring AOP
- Spring学习——IOC和AOP的理解
- spring学习笔记(5)——spring AOP
- spring 源码学习笔记(三)—— spring aop
- [知了堂学习笔记]_Spring中AOP的简单理解
- spring AOP简单理解
- Spring Aop简单理解
- Spring中的AOP(六)——基于XML配置文件方式的AOP
- Spring中的AOP(六)——基于XML配置文件方式的AOP
- spring学习笔记5——AOP的应用
- Spring AOP的实现——对AOP的理解
- Spring的AOP学习笔记
- Spring AOP的理解和简单实现
- Spring AOP 配置文件的简单理解
- spring框架学习(六)AOP
- 装箱与拆箱以及性能损失
- hdu 1166 敌兵布阵
- 主成分分析 (Principal Components Analysis, PCA)
- printf 格式化输出符号详细说明
- 整理篇:C++之标准输入
- Spring 学习笔记(六)—— AOP的简单理解
- webservice综合案例(四)
- U8数据字典生成表及字段备注
- ARC下OC对象和CF对象之间的桥接(bridge)
- 最小树形图poj3164 Command Network
- Ubuntu 12.04 or 14.04 下USB存储设备自动挂载和自动打开功能的开启和关闭
- CASE WHEN 及 SELECT CASE WHEN的用法
- ListVIew子项布局右对齐,TextVIew右对齐
- Linux 系统安装与软件配置相关