说明
一起发现高科技系列,旨在通过阅读主流的框架源码,发掘开源框架中的好的设计模式,设计理念,涉及的内容不再局限于初级使用。
常量映射MAP
源码:谷歌的guava包下的ImmutableMap
特性
- 线程安全
- 支持链式编程
- 不可变
解析
- 由于ImmutableMap是抽象类,只能通过其Builder类创建并初始化其实例
- 当初始化后将不能再进行put,remove, clear等操作,仅仅只能使用get操作
使用建议
高可用框架,可以存储类型较多的常量键值对,避免程序复杂的分支判断
举例
本框架中的使用
框架的核心拦截类HystrixCommandAspect用于拦截切入点的存储
延伸
- 可以参照下该包下的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
特性
- 可以通过入参动态返回不同的类的实例
代码
AOP的使用
源码:HystrixCommandAspect
特性
- 使用注解@Aspect可以声明开启aop
- 使用注解@Pointcut可以声明切入点
- 使用注解@Around可以设置方法环绕
- 被环绕的方法中可以正常系 异常系均处理
代码
延伸
- aspectj除了,例子中提到的注解外,还支持以下注解一览,此处就不一一赘述,大家可以按需查看使用
2.其他aop的实现,此处不再赘述,请移步
Spring AOP四种实现方式Demo详解与相关知识探究_Leeon的博客-CSDN博客_spring实现aop的几种方式
断言工具类
源码 HystrixCommandAspect,org.apache.commons.lang3.Validate
特征
1.抽象了业务逻辑验证的相关方法,如null,空串等处理
2.可以自定义业务运行时异常,统一同样业务场景下的业务异常处理
3.框架于控制层做Global异常处理,针对定义的业务运行时做统一的异常系统返参处理
使用建议
高可用框架
举例
1.定义断言判断工具类,定义统一的业务异常抛出处理
2.业务判断
3.异常捕获
本文暂时没有评论,来添加一个吧(●'◡'●)