今天看到KafkaProperties.java中对参数的设置使用了PropertyMapper,很好奇.就来看一看PropertyMapper的源码.
备注: 大多数说明都写在了注释里.
- 首先通过PropertyMapper.get()方法获取PropertyMapper中的静态实例变量(两个构造参数都为null).
private static final PropertyMapper INSTANCE = new PropertyMapper((PropertyMapper)null, (PropertyMapper.SourceOperator)null);
public static PropertyMapper get() {
return INSTANCE;
}
- 然后使用alwaysApplyingWhenNonNull()方法创建一个新的PropertyMapper(以INSTANCE为parent,whenNonNull方法为SourceOperator),SourceOperator的作用是在from生成Source时追加处理返回的Source,后面会讲到.
public PropertyMapper alwaysApplyingWhenNonNull() {
//把whenNonNull方法当成SourceOperator并作为参数调用alwaysApplying(SourceOperator operator)方法
return alwaysApplying(this::whenNonNull);
}
// 对source执行whenNonNull()方法并返回,可用来当做SourceOperator接口作为上面方法的参数
private <T> Source<T> whenNonNull(Source<T> source) {
return source.whenNonNull();
}
// 返回一个新的PropertyMapper实例,使用了给定 SourceOperator
public PropertyMapper alwaysApplying(SourceOperator operator) {
Assert.notNull(operator, "Operator must not be null");
return new PropertyMapper(this, operator);
}
public static final class Source<T> {
private final Supplier<T> supplier;
private final Predicate<T> predicate;
private Source(Supplier<T><