Spring事务配置(在SpringContext中配置)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring事务配置(在SpringContext中配置)?相关的知识,希望对你有一定的参考价值。

<!--使用Spring AOP代理方式实现声明式事务 -->// 这里配置的transactionProxyFactoryBean这个bean在哪里用到了?
<bean id="transactionProxyFactoryBean" abstract="true" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="myTransactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<!--<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="set*">PROPAGATION_REQUIRED,readOnly</prop>-->
</props>
</property>
</bean>

这里配置的transactionProxyFactoryBean这个bean在哪里用到了?

给你一个我的配置文件你看看吧。

<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>

<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.esoft.sale.manager.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
参考技术A transactionProxyFactoryBean
有两个property:transactionManager (引用自:myTransactionManager)
transactionAttributes

其中:transactionAttributes 里面的:<prop key="*">PROPAGATION_REQUIRED</prop>

key="*" 就是所有方法.

而你原来注销掉的:
<!--<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="set*">PROPAGATION_REQUIRED,readOnly</prop>-->
是只有一get 或者 set开头的方法 才会用到

“说TM你呢” 这位兄弟的配置 好熟悉好熟悉,你不会是安艾艾迪的吧~!
参考技术B 调用任意方法时都使用了,你自己配的
<prop key="这里是方法">这里是事务声明PROPAGATION_REQUIRED</prop>

spring总结

 

1.spring的模块划分, 各有什么特点?
spring模块主要有:
spring core 自定义创建配置和管理bean的方式beanfactory
spring context 上下文是一个配置文件,提供了一些在企业服务,在beanfactory基础上,加入了国际化,校验,调度等功能。建立在core基础之上的,主要类applactioncontext接口下面的类和方法。
spring aop 集成了面向切面的编程,提供了一种途径,可以使面向切面跟spring或者其他模块很好的进行整合。
spring dao spring 对jdbc作了抽象框架的封装
spring orm :spring对orm框架作了抽象层封装。orm对象关系映射:ibatis,mybatis,hibernate,jpa..等数据持久化框架能够很好的进行整合在一起类如:mybatis-spring
spring web: spring提供了对web技术的支持,web模块还简化了处理大部分请求以及请求参数绑定到作用域对象的工作。
spring webmvc:spring建立在web模块之上的mvc框架
2.springMVC的工作原理?

1.客户端请求提交到DispatcherServlet
2.由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller控制层中的具体方法
3.Controller调用业务逻辑处理后,返回ModelAndView
4.DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
5.视图负责将结果显示到客户端

3.你使用过哪些spring的注解,各有什么作用?

注解的作用:1、生成文档 2 .跟踪代码依赖性 3.在编译时进行格式检查
@Component : 是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。
@Controller:标识这个类是控制器,对应表现层的Bean 通常作用在控制层
@Autowired :读取 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作 注释标注在 Setter 方法上
@RequestMapping:转发
@Repository : 表示这是dao的实现类
@Service:服务层 ,对应的业务bean层 通常作用在业务层
@ContextConfiguration:要解析的spring.xml文件
@RunWith :SpringJUnit4ClassRunner.class
@Transactional:事物处理
@Annotation:为并发编程准备
@Immutable 类是不可变的
@ThreadSafe 表示这个类是线程安全的
@NotThreadSafe表示这个类不是线程安全的
4.BeanFactory和ApplicationContxt类的区别?

BeanFactory 在解析配置文件时并不会初始化对象,只有在使用对象时(getBean())才会对该对象进行初始化,好处是节约内存,缺点是速度比较慢。多用于移动设备的开发上。


ApplicationContext 在解析配置文件时对配置文件中的所有对象都初始化了,getBean()方法只是获取对象的过程,好处是可以预先加载速度快,坏处是浪费内存。


5.解析spring的配置文件的方式有哪些? (ClassPathXmlApplicationContext)

1.利用ClassPathXmlApplicationContext可以从classpath中读取XML文件
2.利用ClassPathResource可以从classpath中读取XML文件
3.利用XmlWebApplicationContext读取从Web应用程序的文件架构中,指定相对位置来读取定义文件
4.利用FileSystemResource读取
5.利用FileSystemXmlApplicationContext读取
6.spring和jdbc的整合. dao
一.加载资源文件
二.配置数据源和连接池
三.注入数据调用jdbc模板完成操作

7.spring和hibernate的整合
一.加载资源文件
二.配置数据源和连接池
三.创建SessionFactory对象(set注入数据源,设置hiberante的属性,映射元数据)
四.配置hibernate的模板
五.调用hibernate的模板完成操作
8.spring和mybatis的整合;
一.在mybatis.xml配置setting属性和typeAliases属性
二.在spring.xml中加载资源文件
三.配置数据源和连接池
四.在配置mybatis的sessionFactory(注入数据源,关联mybatis主配置文件,关联映射sql文件)
五.调用mybatis的SqlSessionTemplate完成操作
9.数据库连接池的工作原理

运用程序启动时,初始化一定数目的数据库连接,并维护不少于最小值数目的池链接,某一个事务使用链接,并把当前链接标记成忙,用完之后放回池中,并标记为空闲。
10、谈谈spring的事务;
事物管理是保证数据操作的事务性即,原子性,一致性,隔离性,持久行,即所谓的acid
Spring框架对事务管理的支持改变了传统上认为J2EE应用需要应用服务器的观点,Spring可以将任意Java Bean纳入事务管理, 同时Spring事务管理也不依赖特定的事务资源。
spring提供了几个关于事务处理的类:TransactionDefinition 事务属性定义, 包含了事务的静态属性,比如:事务传播行为、超时时间等等
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager //是spring提供的用于管理事务的基础接口,用于执行具体的事务操作,其下实现有一个抽象类
AbstractPlatformTransactionManager。
相关的事务管理类例如DataSourceTransactionManager等都是这个抽象类的子类。
事务隔离级别:隔离级别是指若干个并发的事务之间的隔离程度
事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。所谓事务传播行为就是多个事务方法相互调用时,
事务如何在这些方法间传播。
spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是重复的代码比较多,直接或间接使用底层持久化api;
声明式的比编程式的更灵活,声明式事务管理是通过Spring AOP实现的,其中的事务通知由元数据(XML或注解)驱动。这也是我们常采用的事务管理方式。
11、声明式事务的特点及传播属性。
声明式事务的特点:
Spring的声明式事务顾名思义就是采用声明的方式来处理事务
传播属性:采用声明的方式来处理事务
propagation_required:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择
propagation_supports:支持当前事务,如果当前没有事务,就以非事务方式执行
propagation_mandatory:支持当前事务,如果当前没有事务,就抛出异常
propagation_requires_new:新建事务,如果当前存在事务,把当前事务挂起
propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
propagation_never:?以非事务方式执行,如果当前存在事务,则抛出异常
propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作
















































































以上是关于Spring事务配置(在SpringContext中配置)?的主要内容,如果未能解决你的问题,请参考以下文章

spring总结

Spring开发

如何在Maven中配置Spring依赖

Spring Context 工具类

如何在MAVEN中配置Spring的依赖包

Spring---七大核心模块