当前位置: 首页 > news >正文

淘宝优惠的网站怎么做百度网盘人工客服电话多少

淘宝优惠的网站怎么做,百度网盘人工客服电话多少,旅游做攻略的网站有哪些,成品网站1688网页文章目录 一、日志处理二、事务控制三、参数校验四、自定义注解五、AOP 方法失效问题1. ApplicationContext2. AopContext3. 注入自身 六、附录1. 示例代码 AOP 提供了一种面向切面操作的扩展机制,通常这些操作是与业务无关的,在实际应用中,可…

文章目录

    • 一、日志处理
    • 二、事务控制
    • 三、参数校验
    • 四、自定义注解
    • 五、AOP 方法失效问题
      • 1. ApplicationContext
      • 2. AopContext
      • 3. 注入自身
    • 六、附录
      • 1. 示例代码

AOP 提供了一种面向切面操作的扩展机制,通常这些操作是与业务无关的,在实际应用中,可以实现:日志处理、事务控制、参数校验和自定义注解等功能。

Spring AOP 的原理参阅:《Spring中的AOP和动态代理》

一、日志处理

在调试程序时,如果需要在执行方法前打印方法参数,或者在执行方法后打印方法返回结果,可以使用切面来实现。

@Slf4j
@Aspect
@Component
public class LoggerAspect {@Around("execution(* cn.codeartist.spring.aop.sample.*.*(..))")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {// 方法执行前日志log.info("Method args: {}", joinPoint.getArgs());Object proceed = joinPoint.proceed();// 方法执行后日志log.info("Method result: {}", proceed);return proceed;}
}

二、事务控制

Spring 提供的声明式事务也是基于 AOP 来实现的,在需要添加事务的方法上面使用 @Transactional 注解。

@Service
public class DemoService {@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 带事务控制的业务操作}
}

三、参数校验

如果需要在方法执行前对方法参数进行校验时,可以使用前置通知来获取切入点方法的参数,然后进行校验。

@Slf4j
@Aspect
@Component
public class ValidatorAspect {@Before("execution(* cn.codeartist.spring.aop.sample.*.*(..))")public void doBefore(JoinPoint joinPoint) {// 方法执行前校验参数Object[] args = joinPoint.getArgs();}
}

四、自定义注解

因为 AOP 可以拦截到切入点方法,Spring 也支持通过注解的方式来定义切点表达式,所以可以通过 AOP 来实现自定义注解的功能。

例如,自定义一个注解来实现声明式缓存,把方法的返回值进行缓存。

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Cacheable {/*** 缓的Key*/String key();/*** 缓存过期时间*/long timeout() default 0L;/*** 缓存过期时间单位(默认:毫秒)*/TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
}

然后定义一个切片来实现常规的缓存操作,先读缓存,缓存不存在时执行方法,然后把方法的返回结果进行缓存。

@Aspect
@Component
public class AnnotationAspect {@Around("@annotation(cacheable)")public Object doAround(ProceedingJoinPoint joinPoint, Cacheable cacheable) throws Throwable {// 自定义缓存逻辑return joinPoint.proceed();}
}

五、AOP 方法失效问题

Spring AOP 的原理是在原有方法外面增加一层代理,所以在当前类调用 AOP 方法时,因为 this 指向的是当前对象,而不是代理对象,所以 AOP 会失效。

@Service
public class DemoService {public void insert() {// 该方法事务会失效insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 带事务控制的业务操作}
}

解决这个问题的常用方法有下面三种:

1. ApplicationContext

使用 ApplicationContext 来手动获取 Bean 对象,来调用 AOP 方法:

@Service
public class DemoService {@Autowiredprivate ApplicationContext applicationContext;public void insert() {DemoService demoService = applicationContext.getBean(DemoService.class);demoService.insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 带事务控制的业务操作}
}

2. AopContext

使用 AopContext 工具类来获取当前对象的代理对象。

@Service
public class DemoService {public void insert() {((DemoService) AopContext.currentProxy()).insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 带事务控制的业务操作}
}

3. 注入自身

使用 Spring 注入自身来调用 AOP 方法:

@Service
public class DemoService {@Autowiredprivate DemoService that;public void insert() {that.insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 带事务控制的业务操作}
}

六、附录

1. 示例代码

Gitee 仓库:https://gitee.com/code_artist/spring

在这里插入图片描述

http://www.shuangfujiaoyu.com/news/61707.html

相关文章:

  • 无锡网站备案排名优化公司哪家好
  • 网站建设目标是seo自动优化软件
  • 怎么自己做歌曲网站百度极速版下载安装最新版
  • 滨州做网站建设的公司免费观看行情软件网站下载
  • 网站开发 顺德建站系统哪个好
  • mac无法更新wordpressseo排名赚挂机
  • 药品在哪些网站做推广免费下载百度
  • 不锈钢公司网站源码 网站建设 产品3级分类asp源码爱站工具
  • 网站设置快捷方式网站推广关键词工具
  • 北京公司模板网站好百度seo关键词排名
  • 网站建设排名优化济南网站建设哪家好
  • 东莞网站建设图表全网媒体发布平台
  • 无锡知名网站推广长春网络科技公司排名
  • 有帮忙做幻灯片的网站么关键词挖掘工具爱站网
  • 手机网站申请线上营销推广方案有哪些
  • 帮别的公司做网站违法吗如何建立个人网站的步骤
  • 360海南地方网站同城推广引流平台
  • 公司网站开发软文生成器
  • 做代理去哪个网站找培训学校招生方案
  • 高邑网站建设seo引擎优化是什么
  • 贸易型企业网站建设中国十大电商平台
  • 房产怎么创建网站长沙关键词优化方法
  • 石家庄做网站最好的公司有哪些湖南网络推广公司大全
  • 北京食药局网站年检怎么做知名网页设计公司
  • 黑色网站后台外贸网络推广营销
  • 网站开发具体工作有那些seo教程视频
  • 博物馆网站做的最好的软文广告300字范文
  • 玩具网站建设策划书产品设计
  • 好的h5制作网站模板下载品牌广告策划方案
  • 网站建设企业的未来发展计划营销网