专业的编程技术博客社区

网站首页 > 博客文章 正文

一起发现高科技-Spring Cloud Hystrix (二)

baijin 2024-08-28 11:23:59 博客文章 3 ℃ 0 评论

说明

一起发现高科技系列,旨在通过阅读主流的框架源码,发掘开源框架中的好的设计模式,设计理念,涉及的内容不再局限于初级使用。

常量映射MAP

源码:谷歌的guava包下的ImmutableMap

特性

  1. 线程安全
  2. 支持链式编程
  3. 不可变

解析

  1. 由于ImmutableMap是抽象类,只能通过其Builder类创建并初始化其实例
  2. 当初始化后将不能再进行put,remove, clear等操作,仅仅只能使用get操作

使用建议

高可用框架,可以存储类型较多的常量键值对,避免程序复杂的分支判断

举例



本框架中的使用

框架的核心拦截类HystrixCommandAspect用于拦截切入点的存储



延伸

  1. 可以参照下该包下的ImmutableList,ImmutableSortedSet,ImmutableEnumMap

软件缺陷检测注解

源码:谷歌的findbug + jsr305包



特性

这里重点描述几个与线程安全相关的

  • @Immutable

表示类是不可变得的,即为final的, 线程安全的

  • @ThreadSafe

表示类是线程安全的

  • @NotThreadSafe

类不是线程安全的

  • @GuardedBy(lock)

表示只有在持有了某个特定的锁时才能访问这个域或方法.解析

lock的可能取值:

@GuardedBy(“this”)

表示在包含对象上的内置锁(被标注的方法或域是该对象的成员)

@GuardedBy(“fieldName”)

表示与filedName引用的对象相关联的锁,可以是一个隐式锁(对于不引用一个Lock的域),也可以是一个显式锁(对于引用了一个Lock的域)

@GuardedBy(“ClassName.fieldName”)

类似于@GuardedBy(“fieldName”),不过所引用的锁对象是存储在另一个类(或本类)中的静态域

@GuardedBy(“methodName()”)

指通过调用命名方法返回的锁对象

@GuardedBy(“ClassName.class”)

指命名类的类字面量对象

使用建议

高可用框架,用于如非空验证等基于jsr305的验证

举例


延伸

1.什么是JSR及JSR305

JSRs: Java Specification Requests Java 规范请求

JSR 305: Annotations for Software Defect Detection 软件缺陷检测注解

官网地址:The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 305

2.使用Guava Preconditions替代方案,推荐

简单工厂模式的使用

源码:HystrixCommandFactory

该工厂类主要用于根据不同的入口,创建不同的common

特性

  1. 可以通过入参动态返回不同的类的实例

代码


AOP的使用

源码:HystrixCommandAspect

特性

  1. 使用注解@Aspect可以声明开启aop
  2. 使用注解@Pointcut可以声明切入点
  3. 使用注解@Around可以设置方法环绕
  4. 被环绕的方法中可以正常系 异常系均处理

代码





延伸

  1. aspectj除了,例子中提到的注解外,还支持以下注解一览,此处就不一一赘述,大家可以按需查看使用

2.其他aop的实现,此处不再赘述,请移步

Spring AOP四种实现方式Demo详解与相关知识探究_Leeon的博客-CSDN博客_spring实现aop的几种方式

断言工具类

源码 HystrixCommandAspect,org.apache.commons.lang3.Validate

特征

1.抽象了业务逻辑验证的相关方法,如null,空串等处理

2.可以自定义业务运行时异常,统一同样业务场景下的业务异常处理

3.框架于控制层做Global异常处理,针对定义的业务运行时做统一的异常系统返参处理

使用建议

高可用框架

举例

1.定义断言判断工具类,定义统一的业务异常抛出处理

2.业务判断



3.异常捕获

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表