System.out.println("=============================== 模拟spring自读取器 ===============================");
String packageName = "org.example";
Properties properties = System.getProperties();
// Set<Map.Entry<Object, Object>> entries = properties.entrySet();
// for (Map.Entry entry : entries) {
// System.out.println(entry.getKey() + "----->" + entry.getValue());
// }
String systemPath = (String) properties.get("java.class.path");
String prefixPath = systemPath.split(";")[0];
String path = prefixPath + "\\" + packageName.replace(".", "\\");
File file = new File(path);
List<File> parentPackageFiles = new ArrayList<>();
parentPackageFiles.add(file);
List<File> packageFiles = new ArrayList<>();
Map<String, Object> beans = new HashMap<>();
while (true) {
for (int o = 0; o < parentPackageFiles.size(); o++) {
File parentPackageFile = parentPackageFiles.get(o);
File[] files = parentPackageFile.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
packageFiles.add(files[i]);
} else if (files[i].isFile() && files[i].getName().endsWith(".class")) {
String name = files[i].getAbsolutePath();
String fullClass = name.replace(prefixPath + "\\", "");
fullClass = fullClass.substring(0, fullClass.indexOf(".class")).replace("\\", ".");
Class<?> aClass = Class.forName(fullClass);
if (aClass.isAnnotationPresent(C.class)) {
beans.put(fullClass, aClass.newInstance());
}
}
}
}
if (packageFiles.size() == 0) {
break;
} else {
parentPackageFiles.clear();
parentPackageFiles.addAll(packageFiles);
packageFiles.clear();
}
}
System.out.println(beans);
String packageName = "org.example";
Properties properties = System.getProperties();
// Set<Map.Entry<Object, Object>> entries = properties.entrySet();
// for (Map.Entry entry : entries) {
// System.out.println(entry.getKey() + "----->" + entry.getValue());
// }
String systemPath = (String) properties.get("java.class.path");
String prefixPath = systemPath.split(";")[0];
String path = prefixPath + "\\" + packageName.replace(".", "\\");
File file = new File(path);
List<File> parentPackageFiles = new ArrayList<>();
parentPackageFiles.add(file);
List<File> packageFiles = new ArrayList<>();
Map<String, Object> beans = new HashMap<>();
while (true) {
for (int o = 0; o < parentPackageFiles.size(); o++) {
File parentPackageFile = parentPackageFiles.get(o);
File[] files = parentPackageFile.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
packageFiles.add(files[i]);
} else if (files[i].isFile() && files[i].getName().endsWith(".class")) {
String name = files[i].getAbsolutePath();
String fullClass = name.replace(prefixPath + "\\", "");
fullClass = fullClass.substring(0, fullClass.indexOf(".class")).replace("\\", ".");
Class<?> aClass = Class.forName(fullClass);
if (aClass.isAnnotationPresent(C.class)) {
beans.put(fullClass, aClass.newInstance());
}
}
}
}
if (packageFiles.size() == 0) {
break;
} else {
parentPackageFiles.clear();
parentPackageFiles.addAll(packageFiles);
packageFiles.clear();
}
}
System.out.println(beans);