问题一
这里的setUrls(ClasspathHelper.forPackage(collectorpackage))是什么意思,我怎么理解这个ConfigurationBuilder
ConfigurationBuilder()
.filterInputsBy(new FilterBuilder().includePackage(collectorpackage))
.setUrls(ClasspathHelper.forPackage(collectorpackage))
.setScanners(new TypeAnnotationsScanner(), new MethodAnnotationsScanner(), new SubTypesScanner(false));
问题二
这里的Reflections是什么意思?
Reflections reflections = new Reflections(configBuilder);
package com.graduation.project.dataCollector.service;
import java.util.Set;
import org.reflections.Reflections;
import org.reflections.scanners.MethodAnnotationsScanner;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.scanners.TypeAnnotationsScanner;
import org.reflections.util.ClasspathHelper;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import com.graduation.project.commons.utils.CommonUtils;
import com.graduation.project.dataCollector.service.scheduler.CollectorJob;
import com.graduation.project.dataCollector.service.scheduler.PeopleNetScheduler;
import com.typesafe.config.Config;
import lombok.extern.slf4j.Slf4j;
String collectorpackage = "com.graduation.project.dataCollector.service.collector";
ConfigurationBuilder configBuilder = new ConfigurationBuilder()
.filterInputsBy(new FilterBuilder().includePackage(collectorpackage))
.setUrls(ClasspathHelper.forPackage(collectorpackage))
.setScanners(new TypeAnnotationsScanner(), new MethodAnnotationsScanner(), new SubTypesScanner(false));
Reflections reflections = new Reflections(configBuilder);
Set<Class<? extends CollectorJob>> clazzs = reflections.getSubTypesOf(CollectorJob.class);
for(Class<? extends CollectorJob> clazz:clazzs){
System.out.println("采集数据时间间隔 == " + conf.getInt("collector.interval"));
scheduler.startCollectorJob(clazz, conf.getInt("collector.interval"));
}
问题补充 10点35
这里的collectorpackage怎么理解?扫描这个包中类?
把configBuilder放到Reflections的意义是什么?
这是剩下的代码
Reflections reflections = new Reflections(configBuilder);
Set<Class<? extends CollectorJob>> clazzs = reflections.getSubTypesOf(CollectorJob.class);
for(Class<? extends CollectorJob> clazz:clazzs){
System.out.println("采集数据时间间隔 == " + conf.getInt("collector.interval"));
scheduler.startCollectorJob(clazz, conf.getInt("collector.interval"));
}
问题一
ConfigurationBuilder
是一个 配置构造器,这是一个运用了构造器模式(Builder
)的写法。因为配置有很多可配置项,但是并不是每次都需要配置全部可配置项,那么它会提供默认值,你只需要通过构造器来创建定制化的 配置 实例。
setUrls
就是说这个配置里有个配置项是url
,它是众多可配置项之一,通过构造器你可以通过这个setUrls
来覆盖默认值。问题二
Reflections
是一个Java
反射的增强包,因为原生的反射工具用起来有时候略麻烦。问题三
根据
includePackage(collectorpackage)
和ClasspathHelper.forPackage(collectorpackage)
看应该是扫描指定包。放到
Reflections
的意义就是因为问题二的答案,原生Java
的反射工具用起来太繁琐,用这个工具来简化操作。从代码上看是试图找出配置实例挂载的任务类型列表。