最近在写一个依赖注入的小demo,碰到这么样的一个问题:
要把本项目下所有被@Component修饰的所有类注入到容器当中。
思路很简单,通过文件枚举的方式扫描出本项目的所有类文件,再对文件名进行一些小处理,就能得到本项目的所有类。public static void scanAllClasses() {
String url = getClassPath();
List classes = getClassesList(url);
// 遍历classes,如果发现@Component就注入到容器中
scanComponent2Container(classes);
}
其中,getClassPath这个方法的实现如下:private static String getClassPath() {
String url = URLDecoder.decode(Context.class.getResource("/").getPath(), Charset.defaultCharset());
if (url.startsWith("/")) {
url = url.replaceFirst("/", "");
}
url = url.replaceAll("/", "\\\\");
return url;
}
就是通过类来取出这个类所在文件的绝对路径,并进行一些文本处理。
而getClassesList则是根据传入的类路径,通过递归进行文件枚举:p