b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Spring声明式事务管理,通过Spring AOP实现

电脑杂谈  发布时间:2020-04-01 09:14:19  来源:网络整理

spring aop事务配置_spring aop事务不生效_spring aop事务的含义

Spring还提供声明式事务管理. 这是通过Spring AOP实现的.

在Spring中执行事务管理的通常方法是使用AOP(面向切片的编程)封装用于普通Java类的事务控制. 它是通过动态代理实现的. 因为延迟了接口的实例化,所以Spring会通过及时加载事务切片. 原理是这样的. 有关详细信息,请参阅jdk中有关动态代理的文档. 本文主要介绍如何在Spring中控制交易.

动态代理的一个重要特征是它是用于接口的,因此,如果我们想让spring通过动态代理接管事务,则必须在dao前面抽象一个接口. 当然,如果没有这样的接口,那么spring将使用CGLIB解决问题,但这不是spring建议的方式,因此不再讨论.

大多数Spring用户选择声明式事务管理. 这是对应用程序代码影响最小的选择,因此与无创轻量级容器的概念一致.

考虑EJB CMT与Spring声明式事务管理之间的异同是很有帮助的. 它们的基本方法相似: 它们可以将事务管理指定为单独的方法;如果需要,他们可以在事务上下文上调用setRollbackOnly()方法. 区别如下:

与EJB CMT绑定到JTA不同,Spring声明式事务管理可以在任何环境中使用. 只需更改配置文件,它将与JDBC,JDO,Hibernate或其他事务机制一起使用

Spring允许将声明式事务管理应用于普通的Java对象,而不仅仅是特殊的类,例如EJB

Spring提供了声明性的回滚规则: EJB没有相应的功能,我们将在下面讨论此功能. 回滚可以声明式控制,而不仅仅是编程方式

Spring允许您通过AOP自定义事务行为. 例如,如果需要,您可以在事务回滚中插入自定义行为. 您还可以添加任意通知,就像交易通知一样. 使用EJB CMT,除了使用setRollbackOnly()

之外,您无法影响容器的事务管理.

Spring不提供跨高端应用程序服务器提供的远程调用的事务上下文传播. 如果需要这些功能,建议您使用EJB. 但是,不要轻易使用这些功能. 通常我们不希望交易跨远程呼叫

spring aop事务不生效_spring aop事务的含义_spring aop事务配置

回滚规则的概念很重要: 它们使我们可以指定哪些异常应启动自动回滚. 我们在配置文件中声明性地指定它,而不是在Java代码中指定它. 因此,尽管我们仍然可以通过编程方式调用TransactionStatus对象的setRollbackOnly()方法来回滚当前事务,但是大多数时候我们可以指定诸如MyApplicationException之类的规则来引起回滚. 这具有显着的优势,即业务对象不需要依赖事务基础结构. 例如,他们通常不需要导入任何Spring API,事务或其他任何东西.

EJB的默认行为是遇到系统异常(通常是运行时异常),并且EJB容器自动回滚事务. 当EJB CMT遇到应用程序异常(java.rmi.RemoteException以外的检查异常)时spring aop事务的含义,它不会自动回滚事务. 尽管Spring的声明式事务管理遵循EJB约定(当遇到未检查的异常时自动回滚事务)spring aop事务的含义,但是可以自定义.

根据我们的测试,Spring声明式事务管理的性能优于EJB CMT.

Spring事务代理通常是通过TransactionProxyFactoryBean设置的. 我们需要包装在交易代理中的目标对象. 目标对象通常是普通Java对象的bean. 定义TransactionProxyFactoryBean时,必须提供相关PlatformTransactionManager的引用和事务属性. 交易属性包含上述交易定义.

Java代码

>

<属性>

<属性>

<属性>

spring aop事务配置_spring aop事务的含义_spring aop事务不生效

PROPAGATION_REQUIRED,-MyCheckedException

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED,只读

>

<属性>

<属性>

<属性>

spring aop事务配置_spring aop事务不生效_spring aop事务的含义

PROPAGATION_REQUIRED,-MyCheckedException

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED,只读

事务代理实现目标对象的接口: 这是ID为petStoreTarget的bean. (CGLIB也可以用于实现特定类的代理. 只需将proxyTargetClass属性设置为true. 如果目标对象未实现任何接口,这将自动将属性设置为true. 通常,我们希望面向接口而不是类编程. )使用proxyInterfaces属性还可以限制事务代理以代理指定的接口(通常是个好主意). 您还可以通过继承org.springframework.aop.framework.ProxyConfig或所有AOP代理工厂共享的属性来自定义TransactionProxyFactoryBean的行为.

这里的transactionAttributes属性是通过在org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource中设置属性格式来定义的. 此方法名称映射(包括通配符)非常简单. 请注意,insert *映射的值包括回滚规则. 添加的-MyCheckedException指定如果该方法抛出MyCheckedException或其子类,则事务将自动回滚. 多个回滚规则可以用逗号定义. -前缀强制回滚,而+前缀指定提交(即使抛出未检查的异常,这也允许提交事务,当然您必须了解自己在做什么).

TransactionProxyFactoryBean允许您通过“ preInterceptors”和“ postInterceptors”属性设置“ pre”或“ post”通知来提供其他拦截行为. 您可以设置任意数量的“ before”和“ after”通知,它们的类型可以是Advisor(可以包括入口点),MethodInterceptor或当前Spring配置支持的通知类型(例如ThrowAdvice,AfterReturningtAdvice或BeforeAdvice). 这些是默认设置(受支持). 这些通知必须支持实例共享模式. 如果需要高级AOP功能来使用事务(例如有状态的maxin),则最好使用通用的org.springframework.aop.framework.ProxyFactoryBean而不是TransactionProxyFactoryBean实用程序代理创建器.

您还可以设置自动代理: 配置AOP框架,无需单独的代理定义类即可生成类代理.

spring aop事务配置_spring aop事务不生效_spring aop事务的含义

在春季安装所有交易策略

PROPAGATION_MANDATORY

PROPAGATION_NESTED

PROPAGATION_NEVER

PROPAGATION_NOT_SUPPORTED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED_NEW

PROPAGATION_SUPPORTS

在B Spring中附加所有隔离策略:

ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITED

ISOLATION_COMMITED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159892-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...