搜索 K
Appearance
Appearance
forge-ddl 是 forge 的子模块,作为独立 jar 提供,业务模块只需在 pom.xml 引入即可生效。
整条链路只触发一次,发生在 Spring Boot 启动尾声:
自动装配生效:classpath 上的 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 前置知识 列出 DdlAutoConfiguration,被 Spring Boot 读入并作为 @Configuration 注册。
Spring Boot 2.7+ 引入的自动装配清单,每行一个 @AutoConfiguration 类的全限定名。是对老的 META-INF/spring.factories 中 EnableAutoConfiguration 项的替代品。Spring Boot 3.x 已彻底切换到该文件。 → 完整说明
组件扫描:DdlAutoConfiguration 上的 @ComponentScan(basePackageClasses = DdlAutoConfiguration.class) 前置知识 把 cn.cvking.forge.ddl 包下所有 @Component(ClazzScanner / ModelRegistry / DdlInitializer)注册为 Bean。
basePackageClasses 通过类引用定位包,重构改名时不会失效;而 basePackages = "cn.cvking.forge.ddl" 写死字符串,重命名包后悄无声息地扫不到东西。Spring 官方推荐前者。
运行时触发扫描:所有 Bean 装配完毕后,Spring Boot 调用所有 ApplicationRunner 的 run(...),DdlInitializer 在此时启动扫描。详见 扫描机制。
forge-ddl 的 pom.xml 只声明 4 个依赖:
| GroupId | ArtifactId | 用途 |
|---|---|---|
org.springframework.boot | spring-boot-autoconfigure | @AutoConfiguration / ApplicationRunner |
org.springframework | spring-context | ClassPathScanningCandidateComponentProvider / AnnotationTypeFilter |
org.slf4j | slf4j-api | 日志门面,配合 Lombok @Slf4j |
org.projectlombok | lombok | @Data / @Builder / @Slf4j(编译期生效) |
框架本身不依赖任何 ORM(MyBatis / JPA / Hibernate),保证可独立演化。
| 选项 | 选择 | 理由 |
|---|---|---|
| 注解粒度 | 「外层 + 嵌套子注解」 | 既能区分语义又避免单注解参数膨胀,详见 注解模型设计 |
| 扫描根 | AutoConfigurationPackages.get(beanFactory) | 复用 Spring Boot 已记录的“用户基础包”,业务方零配置 |
| 注册中心 | 内存 ConcurrentHashMap | 阶段①只读多写少,零外部依赖;后续如需要持久化可在外层加缓存 |
| 类型推导 | 「子注解优先 + Java 类型兜底」 | 兼顾“显式控制”与“零配置”,详见 扫描机制 · 类型推导 |