Spring Framework 常见类速查

发布时间:2026/7/27 7:29:38

Spring Framework 常见类速查 Spring Framework 常见类速查一、先建立心智模型Spring 的核心不是「一堆工具类」而是三件事概念一句话IoC / DI对象由容器创建和管理而不是newBean交给 Spring 管理的对象ApplicationContext容器本体创建、装配、发布事件读代码时先问这个类是 Bean 吗谁注入它它何时被调用SpringBootApplicationApplicationContext扫描 Component / Service / RestController执行 Configuration 里的 BeanBean 互相注入处理 HTTP / 启动 Runner / 业务逻辑二、启动与容器2.1SpringBootApplication组合注解等价于SpringBootConfiguration当前类是配置类EnableAutoConfiguration按 classpath 自动装配如 Web、Redis、JPAComponentScan扫描当前包及子包下的组件典型入口SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DemoApplication.class,args);}}需要关掉某个自动配置时SpringBootApplication(excludeSomeAutoConfiguration.class)2.2SpringApplication启动引导类。run(...)会创建ApplicationContext加载配置application.yml等刷新容器、创建 Bean触发ApplicationRunner/CommandLineRunner2.3ApplicationContext容器接口。日常很少手动拿它但要知道所有 Bean 都住在这里getBean(Xxx.class)可按需取一般不推荐优先构造器注入可发布 / 监听应用事件常用实现AnnotationConfigServletWebServerApplicationContextWeb 应用。三、定义与注入 Bean3.1 刻板组件注解注解典型用途Component通用组件Service业务服务语义标注功能和Component几乎一样Repository数据访问层常配合异常翻译RestControllerREST 控制器 ControllerResponseBodyConfiguration配置类里面的Bean方法会注册到容器3.2Bean在Configuration类中用方法「手工」创建对象并交给 SpringBeanPrimarypublicSomeServicesomeService(SomeRepositoryrepository,Value(${app.feature.enabled:true})booleanenabled){returnnewSomeService(repository,enabled);}方法参数也会被容器注入上面的SomeRepository。3.3Primary/Qualifier同一类型有多个 Bean 时注解作用Primary默认优先注入这个Qualifier(beanName)按名字精确指定publicMyService(ChatModelchatModel,Qualifier(primaryChatModel)ChatModelprimary){// ...}3.4 注入方式推荐顺序构造器注入推荐RequiredArgsConstructorfinal字段Setter / 字段注入能用但测试与依赖关系不如构造器清晰RestControllerRequiredArgsConstructorpublicclassOrderController{privatefinalOrderServiceorderService;// 构造器注入}3.5Value与ConfigurationProperties方式适合场景Value(${key:默认值})单个配置项ConfigurationProperties(prefix ...)一组相关配置类型安全启用属性绑定ConfigurationEnableConfigurationProperties(AppProperties.class)publicclassAppConfig{}或在属性类上加Component/EnableConfigurationProperties。四、Web 层Spring MVC4.1 控制器相关注解注解作用RestController返回值直接写 HTTP Body通常 JSONRequestMapping(/api/orders)类/方法级路径前缀GetMapping/PostMapping/DeleteMappingHTTP 方法 路径RequestBody把 JSON Body 反序列化成对象RequestParam查询参数?namehiPathVariable路径变量/api/orders/{id}示例PostMappingpublicOrderResponsecreate(RequestBodyOrderRequestrequest){...}GetMapping(value/events,producesMediaType.TEXT_EVENT_STREAM_VALUE)publicFluxStringstream(RequestParamStringtopic){...}DeleteMapping(/{id})publicvoiddelete(PathVariableStringid){...}4.2MediaType表示 Content-Type。流式输出常用producesMediaType.TEXT_EVENT_STREAM_VALUE// text/event-stream常见常量APPLICATION_JSON_VALUE、TEXT_PLAIN_VALUE、MULTIPART_FORM_DATA_VALUE。4.3ResponseEntityT需要自定义状态码、Header 时用returnResponseEntity.status(HttpStatus.CREATED).body(result);returnResponseEntity.notFound().build();4.4HttpStatus枚举OK(200)、CREATED(201)、BAD_REQUEST(400)、NOT_FOUND(404)、INTERNAL_SERVER_ERROR(500)等。五、资源与工具类5.1Resource体系统一抽象「读文件 / classpath / URL」类含义Resource接口ClassPathResourceclasspath:config/xxx.ymlFileSystemResource本地磁盘文件UrlResourceHTTP / 文件 URLResourceresourcenewFileSystemResource(path.toFile());ResourceclasspathnewClassPathResource(data/sample.txt);5.2StringUtilsorg.springframework.util注意不是 Apache Commons 的那个。常用方法作用hasText(str)非 null、非空、不全是空白hasLength(str)非 null 且 length 0isEmpty(Object)判空集合 / 数组 / 字符串等if(StringUtils.hasText(userId)){// ...}5.3Assert参数校验失败抛IllegalArgumentExceptionAssert.hasText(id,id must not be empty);Assert.notNull(repository,repository must not be null);5.4DigestUtils算摘要常用于指纹、缓存 keyDigestUtils.md5DigestAsHex(bytes)5.5ObjectMapperJackson常随 Spring Boot 出现JSON ↔ Java 对象。Spring Boot 通常已自动配置一个全局ObjectMapperBean可直接注入。StringjsonobjectMapper.writeValueAsString(payload);MyDtodtoobjectMapper.readValue(json,MyDto.class);六、配置与环境6.1Environment读取所有配置源yml、环境变量、命令行参数environment.getProperty(app.feature.enabled);environment.getActiveProfiles();// 如 dev多数场景用Value/ConfigurationProperties即可不必直接依赖Environment。6.2 Profileapplication-dev.ymlspring.profiles.activedev按环境切换配置。6.3 配置文件加载顺序简化application.ymlapplication-{profile}.yml环境变量 / 命令行参数优先级更高七、启动钩子7.1ApplicationRunner/CommandLineRunner容器启动完成后执行一次。区别接口参数ApplicationRunnerApplicationArguments已解析的选项 / 非选项参数CommandLineRunner原始String... argsComponentRequiredArgsConstructorpublicclassStartupTaskimplementsApplicationRunner{privatefinalAppPropertiesproperties;Overridepublicvoidrun(ApplicationArgumentsargs){if(properties.isWarmUpOnStartup()){warmUp();}}}多个 Runner 可用Order/Ordered控制顺序。八、数据访问相关Redis 示例8.1StringRedisTemplate操作 Rediskey / value 都是 String。常用opsForValue()— 字符串opsForList()— 列表opsForHash()— Hashdelete(key)/hasKey(key)由 Spring Data Redis 自动配置注入即可。8.2RedisConnectionFactory底层连接工厂。一般不用直接操作给StringRedisTemplate用。九、测试9.1SpringBootTest加载完整应用上下文做集成测试SpringBootTestclassDemoApplicationTests{TestvoidcontextLoads(){}}contextLoads能启动成功就说明 Bean 装配基本正确。其他常见WebMvcTest只测 Controller、MockBean替换某个 Bean。十、学习优先级清单优先级类 / 注解用途必会SpringBootApplication、SpringApplication应用启动必会Configuration、Bean、Primary、Qualifier、Value装配与配置必会RestController、*Mapping、RequestBody、RequestParam、PathVariableWeb API必会Service/Component、构造器注入业务 Bean必会ConfigurationProperties、EnableConfigurationProperties成组配置常用StringUtils、Assert、DigestUtils工具与校验常用FileSystemResource、MediaType资源与 Content-Type常用ApplicationRunner启动后任务了解StringRedisTemplate、ObjectMapper缓存 / JSON了解ApplicationContext、Environment、ResponseEntity进阶排查与 API 设计十一、边界说明Spring Framework / Boot 负责容器、配置、Web、资源、启动流程。若包名以org.springframework.ai开头属于 Spring AI 抽象不在本文档范围。十二、快速记忆口诀启动SpringBootApplicationSpringApplication.run造 BeanComponent族 或ConfigurationBean用 Bean构造器注入多个同类用Qualifier/Primary读配置单值Value成组ConfigurationProperties写接口RestController Mapping Body / Param / Path读文件Resource/FileSystemResource启动做事ApplicationRunner判空StringUtils.hasText校验用Assert

相关新闻