事务管理的方式:编程式和声明式,spring推荐使用后一种方式。
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
事务管理的原理:Aop为普通java类封装事务控制,它是通过动态代理实现的,spring在这段时间内通过拦截器,加载事务切片。由于Aop的原理是动态加载(回去研究一下proxy动态加载)来进行事务控制的。
事务管理的步骤(以hibernate为例):
1.定义一个hibernate适用的事务管理器,将SessionFactory注入进去:
<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
2.定义事务管理的策略:
<bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
<property name="properties">
<props>
<prop key="add">
PROPAGATION_REQUIRES_NEW
</prop>
</props>
</property>
</bean>
还可以定义事务隔离程度和回滚
3.定义一个事务管理器(动态加载来实现的)
<bean id="studentManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target">
<ref bean="studentManager"/>
</property>
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref bean="transactionAttributeSource"/>
</property>
</bean>
这个bean的外观是一个接口(StudentManagerInterface),我们指出了它的具体实现(studentManager),而且为它绑定了事务策略
附A pring中的所有事务策略
|
AOP应用范围
附B Spring中所有的隔离策略:
ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITED
ISOLATION_COMMITED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
典型的hibenrnate事务管理
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory“ class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource" /></property>
<property name="mappingResources">
<list><!-- Add list of .hbm.xml files here -->
<value>org/mzone/model/Tuser.hbm.xml</value>
<value>org/mzone/model/Article.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialec</prop>
<prop key="hibernate.show_sql">True</prop>
</props>
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory" /></property>
</bean>
<bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target">
<ref local=" userManagerTarget " />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="userManagerTarget" class="org.mzone.service.impl.UserManagerImpl">
<property name="userDAO"><ref local="userDAO"/></property>
<property name="articleDao"><ref local="articleDAO"/></property>
</bean>
userDAO和articleDao是接口