java吧 关注:1,214,196贴子:12,662,103
  • 11回复贴,共1

自己写的一个spring的bean扫描程序。

只看楼主收藏回复

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);


IP属地:北京1楼2024-08-08 22:27回复
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface C {
    }


    IP属地:北京2楼2024-08-08 22:28
    回复
      骂我可以,但是我还是要注明一下,这是花了20分钟写出来的,没有精修过,可能有bug。就这么多。


      IP属地:北京3楼2024-08-08 22:29
      回复
        把2楼的注解C定义出来,1楼的放进main方法就可以执行了。


        IP属地:北京4楼2024-08-08 22:32
        回复
          再防杠一下,这不是我抄的,这是我看spring视频,视频内教师说他要写一个,我就先暂停视频写一个试试水。


          IP属地:北京5楼2024-08-08 22:34
          回复
            大佬


            IP属地:广东来自Android客户端6楼2024-08-09 07:30
            回复
              大佬


              IP属地:浙江来自Android客户端7楼2024-08-09 13:05
              回复
                没啥问题好像


                IP属地:吉林来自Android客户端8楼2024-08-09 13:21
                回复
                  搞读取xml配置,来创建,代码也差不多。更贴近spring


                  IP属地:江苏来自Android客户端9楼2024-08-09 16:01
                  收起回复
                    不是很多人喜欢骂我吗,还有很多人说我不放代码吗,今天我放出来了,可以来骂我吗?来Java吧,不被攻击,真的有点不适应。


                    IP属地:北京来自Android客户端10楼2024-08-09 16:40
                    回复
                      不要给我一种幻觉,好像Java吧全是谦谦君子。像一句廉价话+这个表情的人,不是挺多的吗?18个小时过去了,我觉得这种评论,怎么也该有一两条么。


                      IP属地:北京来自Android客户端11楼2024-08-09 16:42
                      回复