AOP 面向切面编程,个人认为也可以理解为抽取各个业务模块中所共有的部分,放在一个 springXXX.xml 的文件中由spring框架进行统一的管理,把业务逻辑和其他的控制模块分离,比如银行里 ATM 的查询、取现和转账的业务都需要进行用户信息验证,如下图:

这是 OOP(Object Oriented Programming) 的管理模式,可以看出这三个模块都有一个公共的部分:用户信息验证,因此,可以把这一部分单独抽取出来放在一个地方进行统一的管理,这就是 aop 的思想。我们可以发挥一下想象,假如有100或者更多个这样的模块,把它们放在一起,而并非一排,这样抽取的公共部分就相当于一个切面,这个切面的具体含义就是告诉 spring 应该在哪里做什么事情,比如这个银行系统,切面的含义就是告诉spring 在取现、查询和转账之前,都需要进行 “用户信息验证”,切面抽出来之后由谁来告诉spring做这个事情呢?那就是 advice(通知)了,看下面这个具体的实例:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这个 trans 配置完全可以在 applicationContex-service 里面配置,只是为了看着更清楚,单独拿出来配置-->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 数据源 --><property name="dataSource" ref="dataSource" /></bean><!-- 通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 传播行为 --><tx:method name="save*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="create*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="find*" propagation="SUPPORTS" read-only="true" /><tx:method name="select*" propagation="SUPPORTS" read-only="true" /><tx:method name="get*" propagation="SUPPORTS" read-only="true" /></tx:attributes></tx:advice><!-- 切面 --><aop:config><aop:advisor advice-ref="txAdvice"pointcut="execution(* com.maxiao.service.*.*(..))" /></aop:config>
</beans>

这是一个常见的由 spring 来管理实务的配置,我们现在已经知道实务管理这个模块可以作为一个切面,也就是说切面现在已经有了,我们要拿这个切面去切谁呢?总归要有个切的地方吧,因此在 <aop:config> 标签中配置了切面所要切的地方,也就是 com.maxiao.service 这个包下的所有的类的所有方法,也就是告诉了 spring 要到这里去找具体要切的对象,但是并没有告诉 spring 要切谁,因此在 advice (通知)里面配置了具体切的对象,即:在这个包里面的所有类的所有方法中,只要方法名称里包含 insert,add,create,delete,update...等这些名称,就由 advice 通知事物管理器 DataSourceTransactionManager为该方法添加一个事物:

注释:每个蓝色的长方体代表一个方法

这些方法可能来自service包下面的不同的类,但是这并不重要,只要方法名称中有这样的字眼,我就要“把你切了”

其实事务控制只是 spring aop 应用的一个方面,还有其他很多的方面比如日志管理等,我认为更重要的是要能理解 aop 的这种思想,即:把项目模块中公共的部分抽取出来由 spring 来进行统一的管理,实现和实际的业务解耦,简化代码,便于维护等目的

spring 之 AOP 理解相关推荐

  1. java Spring的AOP理解和动态代理

    Spring的AOP OOP面向对象,允许开发者定义纵向的关系,但并不适用于定义横向的关系,会导致大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些 ...

  2. Spring的AOP理解

    OOP面向对象,允许开发者定义纵向的关系,但并不适用于定义横向的关系,会导致大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个 ...

  3. spring框架AOP的理解,程序高类聚的体现

    本文主要介绍AOP思想,而不是Spring,Spring在本文只做为理解AOP的工具和例子,所以也不打算介绍Spring的Aspect.Join point.Advice.AOP proxy等概念,那 ...

  4. [Spring 深度解析]第4章 Spring之AOP

    第4章 ◄Spring之AOP► 在上一章节中,我们大致了解了Spring核心容器,了解了IOC思想在Spring中的具体应用Bean容器以及Bean的配置与使用,这一章我们将开始学习AOP在Spri ...

  5. Spring对AOP的支持

     Spring对AOP的支持<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  6. 【SSM框架系列】Spring 的 AOP(面向切面编程)

    什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP 是 OOP ...

  7. Spring的AOP原理

    AOP是什么? 软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互 ...

  8. Spring中AOP相关的API及源码解析,原来AOP是这样子的

    前言 之所以写这么一篇文章主要是因为下篇文章将结束Spring启动整个流程的分析,从解析配置到创建对象再到属性注入最后再将创建好的对象初始化成为一个真正意义上的Bean.因为下篇文章会涉及到AOP,所 ...

  9. Spring【AOP模块】就是这么简单

    2019独角兽企业重金招聘Python工程师标准>>> 前言 到目前为止,已经简单学习了Spring的Core模块.....于是我们就开启了Spring的AOP模块了...在讲解AO ...

  10. spring之AOP(转)

    Spring之AOP篇: AOP框架是Spring的一个重要组成部分.但是Spring IOC 并不依赖于AOP,这就意味着你有权力选择是否使用AOP,AOP作为Spring IOC容器的一个补充,使 ...

最新文章

  1. python PDF 转 图片
  2. 2021-01-22 使用 Docker 打包 Python 项目
  3. JavaWeb(一)——web服务器、Tomcat安装和配置
  4. 数据结构C#版笔记--堆栈(Stack)
  5. yield方法释放锁吗_死磕Synchronized底层实现重量级锁
  6. 服务动态选择域名问题
  7. HTML5 列表和表格
  8. 并行导致的进程数过大无法连接数据库
  9. 【状压DP】poj2686 Traveling by Stagecoach
  10. adb shell am 的用法
  11. 探测能源、跨洲安全通信……你所想不到的量子技术!
  12. 欧洲冠军联赛决赛结束
  13. 相机标定:机器人手眼标定全解析
  14. 【优化求解】狼群优化算法matlab源码
  15. 中兴B860AV2.1U,联通版本,强刷固件线刷包
  16. Python:利用python语言实现18位身份证号码和15位身份证号码相互转换
  17. android 坐标度分秒转换工具,经纬度格式转换定位工具
  18. 微信小程序input输入框屏蔽非法字符
  19. 【NDN基础】Networking Named Content 全文翻译
  20. 内网信息收集小知识(一)

热门文章

  1. 写代码:实现用户输入用户名和密码,当用户名为seven且密码为123时,显示登录成功,否则失败,失败时允许重复输入三次。...
  2. jmeter正则表达式提取器使用
  3. oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)1
  4. debian分区方案(就这个看着靠谱点)转
  5. Regex Tester 安装教程
  6. 测试驱动开发全功略(转)
  7. PetShop数据访问层之消息处理(转Bruce Zhang)
  8. UNIX高级环境编程(2)FIle I/O - 原子操作、共享文件描述符和I/O控制函数
  9. CSS篇 Process Document第7章 Technical Report Development Process翻译
  10. js获取内网ip_WebRTC安全问题:私有IP与mDNS