google -- 7




概述上一篇日志中,我们介绍了 Retryer 类,及可以用来方便的创建 Retryer 的强大工具类 RetryerBuilderguava 重试工具库 -- RetryerRetryer 创建工具 -- RetryerBuilder 本篇日志中,我们通过面向切面结合 guava 的这个强大的工具类,来实现只需要添加一行注解即可的自动重试机制 注解我们的注解旨在通过简单的参数配置常用的重试策略:@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface TechlogRetryer { long waitMsec() default 0; Class[] retryThrowable() default {}; long maxDelayMsec() default 0; int maxAttempt() default 0; }  切面我们以上面的注解为切点构造一个切面,实现对方法的自动处理@Aspect @Service public class TechlogRetryerAspect { private static final Logger LO
#技术帖    #技术分享    #spring    #aop   
概述上一篇日志中,我们介绍了 guava 的区间结构 -- Range区间结构 -- Range 本文中我们来介绍 Range 的集合 -- RangeSet顾名思义,RangeSet 是若干个 Range 组成的 Set 结构,guava 提供的 RangeSet 是一个接口,他有以下实现:TreeRangeSet -- 通过红黑树实现的排序 RangeSetImmutableRangeSet -- 不可变的 RangeSet 由于 RangeSet 是利用 jdk1.6 提供的 NavigableMap 特性实现的,因此只有在 jdk1.6 及以上版本才能使用此功能 RangeSet 的创建TreeRangeSet、ImmutableRangeSet 都提供了 create 方法,用来创建 RangeSet RangeSet<Long> rangeSet = TreeRangeSet
#读书笔记    #技术帖    #龙潭书斋    #range   
概述在前面的博文中,我们介绍了 guava 的 Multimap 容器Key 可重复的 Map -- MultimapMultimap 是一种键可重复出现的 Map 容器,可以看作是实现了 Map<K, List<V>> 功能的容器在实际的使用中,有时我们还需要 Map<K, Map<T, V>> 这样的结构,例如,我们的一个超市中有多个货架,货架上有水果,我们需要通过货架 ID、对应货架上的水果 ID 获取到某种水果的信息,这样的数据结构如果用 Map<K, Map<T, V>> 这样的容器来存储和表示就显得非常丑陋了Guava 提供的 Table 容器解决了这个问题Guava 的 Table 是一个三元组,每一条记录需要用两个 Key 进行索引,也可以看做是一个 Map<K, Map<T, V>> 结构,每一个 V 的确定都必须提供&nbs
#技术帖    #龙潭书斋    #容器    #java   
概述guava 是一套由 google 开发的十分成熟、易用 java 核心库,包含了集合、缓存、并发库、原生类型支持、通用注解、字符串处理、IO 操作等基础库由于 Guava 的强大与易用,被 java 开发人员广泛接受,jdk 的每次升级都会融入 Guava 中一些已经被广泛验证并且运用的特性,足见 Guava 的先进本篇日志就来介绍一下常见的几个 Guava 基本工具 Optional有过 java 编程经验的很多人都有过和 null 开战的悲惨经历,模棱两可的 null 常常会导致很多令人意想不到的问题java8 中也加入了 Optional 类:java8 新特性Guava 用 Optional 类解决了这个问题,Optional<T> 对 T 类型进行了一层封装,可以看做是 T 类型的一个容器,他 提供了下列方法: Optional 提供的 static 方法Opt
#技术帖    #技术分享    #java    #object   
概述此前我们介绍了 java 中的各种容器:Collection 及其相关实现的容器简介及用法本文我们介绍一下最常用的 Collection 容器 ArrayList 的初始化方法 list.add最常用的方式是创建容器对象,然后将元素一个一个 add 进来:ArrayList<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C");  双大括号初始化与上面 list.add 的方法类似,在创建对象的时候,ArrayList 支持一种类似匿名内部类初始化方法:ArrayList<String> list = new ArrayList<String>() {{ add("A"); add("B"); add("C"); }}  Arrays.asList & Collections.singleto
#技术帖    #技术分享    #array    #容器   



京ICP备2021035038号