事务的通知类型有:
1.前置通知,后置通知,异常通知,最终通知
2.环绕通知可以自定义通知的顺序灵活调用上面的通知方法()
配置方式是:
不管是xml配置的还是注解配置的都要引入空间和约束声明:
导入依赖坐标:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
基于xml配置的
<!--配置事务通知类型对象-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pc" expression="execution(* com.test.service.impl..*.*(..))"></aop:pointcut>
<!--配置通知类型-->
<aop:aspect id="logAdvice" ref="transactionManager">
<!--前置通知-->
<aop:before method="beginTransaction" pointcut-ref="pc"></aop:before>
<!--后置通知-->
<aop:after-returning method="commit" pointcut-ref="pc" ></aop:after-returning>
<!--异常通知-->
<aop:after-throwing method="rollback" pointcut-ref="pc"></aop:after-throwing>
<!--最终通知-->
<aop:after method="close" pointcut-ref="pc"></aop:after>
<!--环绕型通知-->
<!--<aop:around method="aroundPringLog" pointcut="execution(* com.test.service.impl..*.*(..))"></aop:around>-->
</aop:aspect>
</aop:config>
基于注解的方式:
第一步要在配置文件开启组件扫描:
<!--配置包组件扫描-->
<context:component-scan
base-package="com.test"></context:component-scan>
第二步:开启aop注解支持
<!--配置spring开启注解AOP支持-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
配置切面类:
@Component("logger")
@Aspect //声明切面类
public class Logger {
开启事务通知:
@Component("logger")
@Aspect //声明切面类
public class Logger {
@Pointcut("execution(* com.test.service..*.*(..))")
public void myexcute(){
}
/**
* 前置通知
*/
@Before("myexcute()")
public void beforePrintLog() {
//这里开启事务 代码略
}
/**
* 后置通知
*/
@AfterReturning("myexcute()")
public void afterReturningPrintLog() {
这里提交事务 代码略
}
/**
* 异常通知
*/
@AfterThrowing("myexcute()")
public void afterThrowingPrintLog() {
这里回滚事务 代码略
}
/**
* 最终通知
*/
@After("myexcute()")
public void afterPrintLog() {
这里关闭事务 代码略
}