首页 > 试题广场 >

对下面Spring声明式事务的配置含义的说明错误的是()

[单选题]
对下面Spring声明式事务的配置含义的说明错误的是()
<bean id="txProxyTemplate" abstract="true"
class=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="myTransactionManager" />
<property name="transactionAttributes">      
 <props>
        <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
         <prop key="*">PROPAGATION_REQUIRED</prop>
     </props>
</property> 
</bean>

  • 定义了声明式事务的配置模板
  • 对get方法采用只读事务
  • 缺少sessionFactory属性的注入
  • 配置需要事务管理的bean的代理时,通过parent引用这个配置模板,代码如下:
    
    <bean id="petBiz" parent="txProxyTemplate">
             <property name="target" ref="petTarget"/>
    </bean>
    
1.Spring本身并不直接管理事务,而是提供了事务管理器接口,对于不同的框架或者数据源则用不同的事务管理器;而对于事务,它把相关的属性都封装到一个实体里边去,有以下的属性:
    int propagationBehavior;    /*事务的传播行为*/
    int isolationLevel;                /*事务隔离级别*/
    int timeout;                            /*事务完成的最短时间*/
    boolean readOnly;                /*是否只读*/
Spring提供了对编程式事务声明式事务的支持,编程式事务是嵌在业务代码中的,而声明式事务是基于xml文件配置。
2. readOnly -- 事务隔离级别,表示只读数据,不更新数据
3.PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

发表于 2017-03-07 20:21:29 回复(7)
 <!-- 配置事务管理器 --> 
      <property name="transactionManager">
<!-- 配置事务属性 --> 
      <property name="transactionAttributes">        <props>
  声明式事务 管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
发表于 2016-03-25 10:34:50 回复(0)
这里已经注入了工厂
<property name="transactionManager"ref="myTransactionManager"/>

编辑于 2016-02-26 21:16:23 回复(1)
sessionFactory只有使用Hibernate才需要注入,并且是注入到事务管理器的,所以c错误
发表于 2017-05-19 00:55:03 回复(3)
<bean id="myTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="mySessionFactory" />
</bean>
myTransactionManager bean被定义的时候会注入sessionFactory
编辑于 2017-08-10 11:50:35 回复(0)
对get方法采用只读事务   应该是以get开头的方法 
发表于 2015-10-30 11:12:08 回复(2)
选C
发表于 2016-01-08 14:54:39 回复(1)
TransactionProxyFactoryBean用于为目标生成事务代理。
需要配置三个
  1. 目标对象
  2. 事务属性
  3. 事务管理器
<property name="transactionManager" ref="myTransactionManager" />
<property name="transactionAttributes">  
上面这两行配置了事务属性和事务管理器。
接下来看看TransactionProxyFactoryBean的定义
public class TransactionProxyFactoryBean extends AbstractSingletonProxyFactoryBean
		implements BeanFactoryAware {

	private final TransactionInterceptor transactionInterceptor = new TransactionInterceptor();
上面配置的事务属性和事务管理器都是配置到TransactionInterceptor中。
接下来还需要配置的只有目标对象。
我们看到TransactionProxyFactoryBean被配置成了抽象类,在D选项中通过parent属性继承了这个抽象类。然后petBiz中配置了需要的目标对象。

这样TransactionProxyFactoryBean对象需要配置三个对象全部配置完成。




发表于 2021-05-06 12:39:13 回复(0)

spring提供的事务管理可以分为两类:编程式的和声明式的。

编程式的,比较灵活,但是代码量大,存在重复的代码比较多;

声明式的比编程式的更灵活.

发表于 2014-11-21 20:29:54 回复(0)
sessionFactory只有使用Hibernate才需要注入,并且是注入到事务管理器的,所以c错误
发表于 2019-03-15 17:13:20 回复(0)
事务传播:一个事务进行时调用另一个事务
发表于 2019-04-20 23:45:32 回复(0)
这个只是配置声明式事务的模板bean,不需要一定注入SessionFactory
发表于 2016-04-19 15:39:47 回复(0)
对get方法采用只读事务   应该是以get开头的方法
发表于 2016-03-02 10:27:48 回复(0)
sessionFactory只有使用Hibernate才需要注入,并且是注入到事务管理器的,SessionFactory是Hibernate框架中的一个核心接口,用于创建和管理Hibernate的Session对象。所以c错误

发表于 2023-09-26 19:37:27 回复(0)
  • 编程式事务处理:所谓编程式事务指的是通过编码方式实现事务,允许用户在代码中精确定义事务的边界。即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
  • 声明式事务处理:管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
发表于 2019-10-27 15:18:43 回复(0)
 
为什么?
发表于 2022-10-22 14:45:19 回复(0)
不晓得这类题还有没有学习的必要?
发表于 2019-05-23 00:39:16 回复(1)
没有注入sessionfactory
编辑于 2019-05-11 10:15:04 回复(0)
B
发表于 2019-05-01 18:23:21 回复(0)
<property name="transactionManager" ref="myTransactionManager" />
发表于 2015-10-09 16:24:03 回复(0)