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

郑州怎么做外贸公司网站怎么优化推广自己的网站

郑州怎么做外贸公司网站,怎么优化推广自己的网站,惠安网站建设,赣州做网站公司哪家好文章目录 一、日志处理二、事务控制三、参数校验四、自定义注解五、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.zhongyajixie.com/news/18479.html

相关文章:

  • 网页建站软件网店推广渠道有哪些
  • 链家网站开发付费推广外包
  • 企业做网站的凭证怎么做如何开通网站
  • 镇江网站设计多少钱一个新手怎么做推广
  • 中国建设手机银行网站seo推荐
  • 延庆网站建设优化seo个人网站模板
  • 网站上传的流程图广州seo排名外包
  • 做网站要那些设备手机制作网站的软件
  • 建设银行 安徽 社会招聘网站成都百度推广公司电话
  • 微网站建设及微信推广方案电商seo优化是什么意思
  • 做设计找参考的设计网站有那些最好的网络营销软件
  • 工信部清理未备案网站谷歌外贸网站推广
  • 画册设计步骤sem 优化价格
  • 网站美化软件网络媒体
  • 母婴类网站 网站建设方案书 备案企业网站营销的优缺点及案例
  • 360ssp网站代做优化大师电脑版官方免费下载
  • 石家庄做网站建设的公司排名松原市新闻
  • 相亲网站绑定微信怎么做发帖推广百度首页
  • 网站弹窗设计网络营销推广的渠道有哪些
  • 做旅游项目用哪家网站好淘宝运营
  • 西安正规网站建设报价搜索引擎优化的含义和目标
  • 城乡企业建设部网站seo工具优化软件
  • 有什么做vi设计的网站中国新闻今日头条
  • 适合做设计公司的名字seo排名赚能赚钱吗
  • 榆林 网站建设搜索关键词排名推广
  • 做网站 需要了解什么网店推广方法有哪些
  • 渭南微信小程序网站建设市场营销案例150例
  • 杨行网站建设河南网站优化公司
  • logo智能设计一键生成器优化防控举措
  • 三网一体网站建设如何进行网络推广和宣传