在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  C/ 這段代碼中,ConfigurationBuilder和Reflections怎么

這段代碼中,ConfigurationBuilder和Reflections怎么理解?

問題一

這里的setUrls(ClasspathHelper.forPackage(collectorpackage))是什么意思,我怎么理解這個(gè)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("采集數(shù)據(jù)時(shí)間間隔 == " + conf.getInt("collector.interval"));
                scheduler.startCollectorJob(clazz, conf.getInt("collector.interval"));
            }

問題補(bǔ)充 10點(diǎn)35

這里的collectorpackage怎么理解?掃描這個(gè)包中類?

把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("采集數(shù)據(jù)時(shí)間間隔 == " + conf.getInt("collector.interval"));
                scheduler.startCollectorJob(clazz, conf.getInt("collector.interval"));
            }
回答
編輯回答
懶豬

問題一

ConfigurationBuilder 是一個(gè) 配置構(gòu)造器,這是一個(gè)運(yùn)用了構(gòu)造器模式(Builder)的寫法。

因?yàn)榕渲糜泻芏嗫膳渲庙?xiàng),但是并不是每次都需要配置全部可配置項(xiàng),那么它會(huì)提供默認(rèn)值,你只需要通過構(gòu)造器來(lái)創(chuàng)建定制化的 配置 實(shí)例。

setUrls 就是說這個(gè)配置里有個(gè)配置項(xiàng)是 url,它是眾多可配置項(xiàng)之一,通過構(gòu)造器你可以通過這個(gè) setUrls 來(lái)覆蓋默認(rèn)值。

問題二

Reflections 是一個(gè) Java 反射的增強(qiáng)包,因?yàn)樵姆瓷涔ぞ哂闷饋?lái)有時(shí)候略麻煩。

問題三

根據(jù) includePackage(collectorpackage)ClasspathHelper.forPackage(collectorpackage) 看應(yīng)該是掃描指定包。

放到 Reflections 的意義就是因?yàn)閱栴}二的答案,原生 Java 的反射工具用起來(lái)太繁瑣,用這個(gè)工具來(lái)簡(jiǎn)化操作。

從代碼上看是試圖找出配置實(shí)例掛載的任務(wù)類型列表。

2018年7月16日 14:03