最近在练习写一个 Mini Java Web 框架,目前实现了简单的 ioc,模仿 Spring 指定一个启动类,然后扫描这个类所在包及其子包,找到所有标记 @Component 的类并处理依赖,过程还算顺利。然后问题来了,如何扫描到由外部引入的依赖中的 Bean ?如果扫描不到的话,外部依赖中的 bean 无法用框架来自动管理,扩展性就下降了很多。
查找一番,只找到了这么一段话
利用 starter 实现自动化配置只需要两个条件——maven 依赖、配置文件。引入 maven 实质上就是导入 jar 包,spring-boot 启动的时候会找到 starter jar 包中的 resources/META-INF/spring.factories 文件,根据 spring.factories 文件中的配置,找到需要自动配置的类。
如果在外部依赖的配置文件中写好了哪些包需要被扫描,然后 spring-boot 读这个配置文件就行了。但 Spring 是怎么知道有哪些依赖并且去这些依赖的 classpath 下查找的?感觉像是在 maven 插件里对依赖进行了扫描,但又不知道自己的判断是否正确。或者有没有可以在运行时就可以扫描到全部依赖的办法(仅通过 maven 引入,在工程中没有 import 依赖也可以扫描到的那种)
PS:目前使用的是 classgraph 来扫描指定包下的类
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.