package com.geccocrawler.gecco.downloader; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.reflections.Reflections; import com.geccocrawler.gecco.annotation.GeccoClass; public class DownloaderAOPFactory { private Map<String, BeforeDownload> beforeDownloads; private Map<String, AfterDownload> afterDownloads; public DownloaderAOPFactory(Reflections reflections) { this.beforeDownloads = new HashMap<String, BeforeDownload>(); this.afterDownloads = new HashMap<String, AfterDownload>(); Set<Class<?>> classes = reflections.getTypesAnnotatedWith(GeccoClass.class); for(Class<?> aopClass : classes) { GeccoClass geccoClass = (GeccoClass)aopClass.getAnnotation(GeccoClass.class); try { Class<?>[] geccoClasses = geccoClass.value(); for(Class<?> c : geccoClasses) { String name = c.getName(); Object o = aopClass.newInstance(); if(o instanceof BeforeDownload) { beforeDownloads.put(name, (BeforeDownload)o); } else if(o instanceof AfterDownload) { afterDownloads.put(name, (AfterDownload)o); } } } catch(Exception ex) { ex.printStackTrace(); } } } public BeforeDownload getBefore(String spiderName) { return beforeDownloads.get(spiderName); } public AfterDownload getAfter(String spiderName) { return afterDownloads.get(spiderName); } }