这段代码中,ConfigurationBuilder和Reflections怎么理解?

问题一

这里的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"));
            }
阅读 4.5k
1 个回答

问题一

ConfigurationBuilder 是一个 配置构造器,这是一个运用了构造器模式(Builder)的写法。

因为配置有很多可配置项,但是并不是每次都需要配置全部可配置项,那么它会提供默认值,你只需要通过构造器来创建定制化的 配置 实例。

setUrls 就是说这个配置里有个配置项是 url,它是众多可配置项之一,通过构造器你可以通过这个 setUrls 来覆盖默认值。

问题二

Reflections 是一个 Java 反射的增强包,因为原生的反射工具用起来有时候略麻烦。

问题三

根据 includePackage(collectorpackage)ClasspathHelper.forPackage(collectorpackage) 看应该是扫描指定包。

放到 Reflections 的意义就是因为问题二的答案,原生 Java 的反射工具用起来太繁琐,用这个工具来简化操作。

从代码上看是试图找出配置实例挂载的任务类型列表。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题