xml配置声明式事务:
配置事物管理器 DataSourceTransactionManager 注入DataSource
配置事物的通知(增强的类是谁):
<tx:advice id=“通知的标识” transaction-manager=“通知是谁”>
配置aop ,建立切入点表达式(哪些方法增强)和事物通知的关系
aop:config中aop:pointcut && aop:advisor
配置事物的属性:tx:advice中tx:attributes
<!--声明式事物配置步骤-->
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--配置事务的属性-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="false"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method>
</tx:attributes>
</tx:advice>
<!--配置aop 建立切入点表达式与事物通知之间的关系-->
<aop:config>
<!--切入点表达式-->
<aop:pointcut id="pt1" expression="execution(* com.itliuyu.service.impl.*.*(..))"></aop:pointcut>
<!--建立切入点表达式和通知的关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor>
</aop:config>
注解配置声明式事务:
步骤
配置事物管理器 DataSourceTransactionManager 注入DataSource
开启spring对注解配置事务的支持tx:annotation-driven
在需要事务控制的地方使用注解@Transactional(事务的属性)
@Transactional作用在接口上,实现类重写的方法都有事物的支持
@Transactional作用在类上,类中的方法都有事务支持
@Transactional作用在方法上,该方法具有事务支持
作用级别:就近原则
<!--声明式事物注解配置-->
<!--配置事物管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--开启spring对注解配置事物的支持-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<!--在需要事物控制的地方使用@Transactional-->
@Transactional(propagation = Propagation.REQUIRED,readOnly = false)
public class AccountServiceImpl implements IAccountService{
纯注解实现:创建配置类
主配置类
@Component
@ComponentScan("com.itliuyu") //创建容器扫描的包
@PropertySource("classpath:jdbc.properties")//指定配置文件位置
@Import({jdbcConfig.class,TransationConfig.class}) //关联配置类
@EnableTransactionManagement
public class SpringConfiguration {
}
jdbc配置类
public class jdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean("dataSource")
public DataSource createDataSource(){
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
事物管理器配置类:
public class TransationConfig {
//**************************************************
@Bean("transactionManager") //事务管理器进ioc容器 *****
//**************************************************
public PlatformTransactionManager createTransactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}