SpringBoot系列(五)SpringBoot 之Spring 事务管理 和 切面 AOP
2017-12-30 19:30
761 查看
本系列博客将学习开发SpringBoot,快速开发项目
SpringBoot 之切面 AOP
实现方法:
SpringBoot系列 (五):SpringBoot 之Spring 事务管理 和 切面 AOP
文档结构
SpringBoot 之事务管理@TransactionalSpringBoot 之切面 AOP
一、 SpringBoot 之事务管理@Transactional
通过在service方法中加上@Transactional注解实现事务管理。package com.tofree.service; /** * 账户Service接口 * @author tofree * */ public interface AccountService { /** * 从A用户转账b用户钱 * @param fromUser * @param toUser * @param account */ public void transferAccounts(int fromUser,int toUser,float account); }
实现方法:
package com.tofree.service.impl; import javax.annotation.Resource; import javax.transaction.Transactional; import org.springframework.stereotype.Service; import com.tofree.dao.AccountDao; import com.tofree.entity.Account; import com.tofree.service.AccountService; /** * 帐号Service实现类 * @author tofree * */ @Service("accountService") public class AccountServiceImpl implements AccountService{ @Resource private AccountDao accountDao; @Transactional public void transferAccounts(int fromUser, int toUser, float account) { Account fromAccount=accountDao.getOne(fromUser); fromAccount.setBalance(fromAccount.getBalance()-account); accountDao.save(fromAccount); Account toAccount=accountDao.getOne(toUser); toAccount.setBalance(toAccount.getBalance()+account); int zero=1/0; accountDao.save(toAccount); } }
二、 SpringBoot 之切面 AOP
package com.tofree.aspect; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.tofree.entity.Student; @Aspect @Component public class RequestAspect { private Logger logger=Logger.getLogger(RequestAspect.class); @Pointcut("execution(public * com.tofree.controller.*.*(..))") public void log(){ } @Before("log()") public void doBefore(JoinPoint joinPoint){ logger.info("方法执行前..."); ServletRequestAttributes sra=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request=sra.getRequest(); logger.info("url:"+request.getRequestURI()); logger.info("ip:"+request.getRemoteHost()); logger.info("method:"+request.getMethod()); logger.info("class_method:"+joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()); logger.info("args:"+joinPoint.getArgs()); Student student=(Student) joinPoint.getArgs()[0]; System.out.println(student); } @After("log()") public void doAfter(JoinPoint joinPoint){ logger.info("方法执行后..."); } @AfterReturning(returning="result",pointcut="log()") public void doAfterReturning(Object result){ logger.info("方法返回值:"+result); } }
相关文章推荐
- 最全面的 Spring事务管理和AOP切面日志的注入 —aop:pointcut expression解析
- 【SpringBoot系列3】SpringBoot使用事务和AOP
- 借助 Spring AOP 进行事务管理之一
- Spring Boot 事务管理(四)
- [Spring Boot实战系列] - No.2 Spring boot 整合Spring Security用户管理和用户权限管理
- Spring -- spring结合aop 进行 tx&aspectj事务管理配置方法
- Spring Boot中的事务管理
- SpringBoot 的事务管理
- Spring事务管理—aop:pointcut expression解析
- Springboot项目使用aop切面保存详细日志到ELK日志平台
- Spring Cloud Spring Boot mybatis分布式微服务云架构(三十二)事务管理(2)
- Spring事务管理—aop:pointcut expression解析
- Spring Boot中的事务管理
- Spring的AOP事务管理默认针对unchecked异常回滚
- Spring基于AOP的事务管理
- Springboot+atomikos+jta实现分布式事务统一管理
- 【spring-boot】spring aop 面向切面编程初接触
- spring应用系列之事务管理
- spring aop事务通知(切面异常处理)
- 两种Spring事务管理方式:编程式、声明式 跟spring aop管理事务有什么不同?