Spring AOP框架的作用和使用方法

发布时间:2021-06-16 15:27:40 作者:chen
来源:亿速云 阅读:139

这篇文章主要介绍“Spring AOP框架的作用和使用方法”,在日常操作中,相信很多人在Spring AOP框架的作用和使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring AOP框架的作用和使用方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在向大家详细介绍Spring AOP框架之前,首先让大家了解下Spring装配组件事务,然后全面介绍Spring AOP框架

本文主要探讨Spring AOP框架,包括其事务上下文。从J2EE应用程序内部连接到单个的数据库并不是什么难事。但是,如果要装配或者集成企业级的组件,情况就复杂了。一个组件可以有一个或多个支持它的数据库,因此,当装配两个或更多的组件时,我们希望能够保持在跨组件的多个数据库中进行的操作的原子性。J2EE服务器为这些组件提供了一个容器来保证事务原子性和跨组件独立性。如果使用的不是J2EE服务器,则可以利用Spring来帮助我们。Spring基于Inversion of Control(控制反转)模式(也称为依赖注入),它不仅可以连接组件服务,还可以连接关联的事务上下文。在本文中,我们将Hibernate用作对象/关系持久性存储和查询服务。

装配组件事务

假设在企业组件库里,我们已经有一个审计组件,里面有可以被客户端调用的服务方法。然后,当我们想要构建一个订单处理系统时,我们发现存在这样的设计要求:OrderListManager组件服务同样需要审计组件服务。OrderListManager创建和管理订单,因此所有的 OrderListManager服务都有自己的事务属性。当我们从OrderListManager服务内调用审计组件时,我们实际上是在把 OrderListManager服务的事务上下文传播给审计服务。也许将来新的业务服务组件同样需要审计组件,但那时将在一个不同的事务上下文中调用它。实际结果就是,即使审计组件的功能保持不变,它也可能是由别的业务服务功能组成,包含了混搭的(mix-and-match)事务属性来提供不同的运行时事务性行为。

如果客户端有TX上下文,那么OrderListManager既可以参与其中,也可以启动一个新的TX,这取决于客户端是否在TX中,以及为OrderListManager方法指定了什么样的TX属性。这同样适用于 OrderListManager服务依次调用AuditManager方法的情况。

EJB架构允许组件装配者声明式地给出正确的事务属性,从而为他们提供这种灵活性。我们不探讨声明式事务管理的替代方案(即所谓的编程式事务控制),因为这会牵涉到代码更改,从而产生不同的运行时事务行为。几乎所有的J2EE应用服务器都按照X/Open XA规范提供了服从两阶段提交协议的分布式事务管理器。现在的问题是,我们能不能利用EJB服务器来实现相同的功能?Spring就是其中的一种解决方案。让我们来看一下Spring如何帮助我们解决事务组装的问题:

使用Spring进行事务管理

我们将看到一个轻量级的事务基础架构,它实际上可以管理组件级的事务装配。Spring是其中的一个解决方案。它的优点在于,我们不会被捆绑到 J2EE容器服务(如JNDI DataSource)上。最棒的一点是,如果我们想把这个轻量级事务基础架构关联到一个已可用的J2EE容器基础架构,将不会有任何问题。看起来我们可以利用两者的优点。

另一方面,Spring这个轻量级事务基础架构使用了一个面向方面编程(Aspect-Oriented Programming,AOP)框架。Spring AOP框架使用了一个支持AOP的Spring bean工厂。在特定于Spring的配置文件applicationContext.xml中,通过在组件服务级指定事务特性来划分事务。

  1. <beans> 

  2.  

  3. <!-- other code goes here... --> 

  4.  

  5. <bean id="orderListManager"class="org.springframework.
    transaction.interceptor.TransactionProxyFactoryBean"> 

  6. <property name="transactionManager"> 

  7. <ref local="transactionManager1"/> 

  8. </property> 

  9. <property name="target"> 

  10. <ref local="orderListManagerTarget"/> 

  11. </property> 

  12. <property name="transactionAttributes"> 

  13. <props> 

  14. <prop key="getAllOrderList"> 

  15. PROPAGATION_REQUIRED  

  16. </prop> 

  17. <prop key="getOrderList"> 

  18. PROPAGATION_REQUIRED  

  19. </prop> 

  20. <prop key="createOrderList"> 

  21. PROPAGATION_REQUIRED  

  22. </prop> 

  23. <prop key="addLineItem"> 

  24. PROPAGATION_REQUIRED,-com.example.exception.FacadeException  

  25. </prop> 

  26. <prop key="getAllLineItems"> 

  27. PROPAGATION_REQUIRED,readOnly  

  28. </prop> 

  29. <prop key="queryNumberOfLineItems"> 

  30. PROPAGATION_REQUIRED,readOnly  

  31. </prop> 

  32. </props> 

  33. </property> 

  34. </bean> 

  35.  

  36. </beans> 

到此,关于“Spring AOP框架的作用和使用方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Spring常见面试题和解题思路
  2. Spring的AOP是什么?如何使用AOP?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring aop框架

上一篇:Numpy中怎么将二维图像矩阵转换为一维向量

下一篇:Vue中怎么利用Router去掉url中默认的锚点

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》