Spring 框架详细入门知识点
Spring 框架是一个非常庞大且强大的开源Java应用框架,其核心目标是简化企业级应用开发。它提供了全方位的基础设施支持,使得开发者可以专注于业务逻辑,而不是繁琐的配置和底层API。
下面我将从核心概念、主要模块、现代Spring(Boot)开发以及最佳实践等多个维度,为你详细梳理Spring框架的知识体系。
一、 Spring 框架的核心理念与优势
控制反转 (IoC) / 依赖注入 (DI)
核心思想:将对象的创建和依赖关系的管理权从应用程序代码中“反转”给Spring容器。
传统方式:
Class A
需要Class B
,则A
内部会new B()
。耦合度高。IoC方式:
A
只需要声明“我需要B
”,Spring容器会主动将创建好的B
实例“注入”给A
。A
和B
的依赖关系由容器来管理,实现了解耦。实现方式:主要通过注解(如
@Autowired
)或XML配置。
面向切面编程 (AOP)
核心思想:将那些横跨多个模块的“横切关注点”(如日志、事务、安全等)从业务逻辑中分离出来。
作用:提高代码的模块化和可维护性。你可以在不修改原有业务代码的情况下,动态地添加功能。
关键概念:
切面 (Aspect):一个横切关注点的模块化,例如日志切面。
连接点 (Joinpoint):程序执行过程中的一个点,如方法调用、异常抛出。
通知 (Advice):切面在特定连接点执行的动作(如
@Before
,@After
,@Around
)。切点 (Pointcut):匹配连接点的表达式,定义了通知何时执行。
优势总结
解耦:DI是核心,降低组件间的耦合度。
声明式编程:通过声明即可实现事务管理、安全等复杂功能,无需编写样板代码。
易于测试:依赖注入使得单元测试非常容易,可以轻松注入Mock对象。
轻量级与非侵入式:你的POJO(Plain Old Java Object)类通常不依赖于Spring特定API。
丰富的生态:Spring拥有庞大的项目家族(Spring Boot, Spring Cloud, Spring Security等),覆盖了现代应用开发的方方面面。
二、 Spring 框架核心模块
Spring框架由许多模块组成,它们可以大致分为核心容器、数据访问/集成、Web、AOP等。
Spring Core Container
Beans: 提供
BeanFactory
,是工厂模式的经典实现,负责创建和管理Bean。Core: 提供框架的基本组成部分,包括IoC和DI功能。
Context: 建立在Core和Beans模块之上,它是访问、配置和管理任何对象的媒介。
ApplicationContext
接口是其核心。SpEL (Spring Expression Language): 强大的表达式语言,用于在运行时查询和操作对象图。
AOP, Aspects, Instrumentation
提供面向切面编程的实现。
spring-aspects
模块集成了AspectJ。
数据访问/集成 (Data Access/Integration)
JDBC: 提供了JDBC抽象层,简化了JDBC的使用,避免了繁琐的异常处理。
ORM: 提供对主流ORM框架(如Hibernate, JPA, MyBatis)的集成支持。
OXM: 对象-XML映射支持(如JAXB, Castor)。
JMS: Java消息服务。
Transactions: 支持编程式和声明式事务管理。
Web
Web Servlet: 包含Spring MVC框架,用于构建Web应用程序。
Web Reactive: 包含Spring WebFlux框架,用于构建响应式Web应用程序。
WebSocket: 提供WebSocket支持。
三、 现代Spring开发:Spring Boot
Spring Boot是Spring框架的“脚手架”,它的诞生是为了解决传统Spring项目配置繁琐、部署复杂的问题。它遵循“约定大于配置”的原则。
核心特性
自动配置 (Auto-configuration):根据项目依赖(如classpath下的jar包),自动配置Spring应用程序。例如,如果classpath下有H2数据库和
spring-boot-starter-data-jpa
,Boot会自动配置一个内存H2数据库和JPA。起步依赖 (Starter Dependencies):一组预定义的依赖描述符,简化了Maven/Gradle配置。例如,引入
spring-boot-starter-web
,就会自动引入Web开发所需的所有依赖(Tomcat, Spring MVC等)。嵌入式容器 (Embedded Container):内嵌了Tomcat, Jetty或Undertow服务器,无需打包成WAR文件部署到外部容器,可以直接打成可执行的JAR包运行。
Actuator:提供生产级功能,如健康检查、指标收集、HTTP追踪等,帮助监控和管理应用。
一个简单的Spring Boot应用结构
// 1. 主应用程序类,启用自动配置和组件扫描
@SpringBootApplication // 等价于 @Configuration + @EnableAutoConfiguration + @ComponentScan
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args); // 启动嵌入的Tomcat和Spring应用}
}// 2. 一个REST控制器
@RestController
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";}
}// 3. 配置文件:application.properties 或 application.yml
// application.yml 示例
server:port: 8081
spring:datasource:url: jdbc:h2:mem:testdbdriver-class-name: org.h2.Driverusername: sa
四、 关键技术与实践
Bean的管理
定义Bean:使用注解
@Component
(通用)、@Service
(业务层)、@Repository
(数据层)、@Controller
/@RestController
(Web层)。依赖注入:使用
@Autowired
(按类型)、@Qualifier
(按名称)、@Resource
(JSR-250标准)。Bean的作用域:
singleton
(默认,单例)、prototype
(每次注入都创建新实例)、request
、session
、global-session
(Web相关)。
Spring MVC (Web层)
DispatcherServlet:前端控制器,是所有请求的入口。
工作流程:请求 ->
DispatcherServlet
-> 查询HandlerMapping
-> 调用对应Controller
-> 返回ModelAndView
-> 由ViewResolver
解析视图 -> 渲染响应。常用注解:
@Controller
,@RequestMapping
,@GetMapping
,@PostMapping
,@RequestParam
,@PathVariable
,@RequestBody
,@ResponseBody
。
数据访问 (Spring Data)
Spring Data JPA:极大简化了JPA(如Hibernate)的使用。
只需编写一个接口继承
JpaRepository<User, Long>
,即可获得基本的CRUD方法。支持根据方法名自动生成查询,如
findByUsername(String username)
。
事务管理:在方法或类上添加
@Transactional
注解即可实现声明式事务。
Spring Security (安全)
提供认证(Authentication)和授权(Authorization)功能。
核心是通过一系列的过滤器链(Filter Chain)来保护Web请求。
可以轻松集成表单登录、OAuth2、JWT等。
配置方式
Java配置(主流):使用
@Configuration
和@Bean
注解替代XML。注解配置(主流):使用
@ComponentScan
,@Autowired
等。XML配置(传统):在XML文件中定义Bean和依赖关系,现在已较少使用。
五、 Spring 生态与高级主题
Spring Cloud:基于Spring Boot,提供了一套完整的微服务架构解决方案。
服务发现与注册:Eureka, Consul, Nacos。
配置中心:Spring Cloud Config。
客户端负载均衡:Ribbon。
服务容错:Hystrix。
API网关:Spring Cloud Gateway。
服务调用:OpenFeign。
Spring Reactive (WebFlux)
用于构建非阻塞、异步、高并发的响应式系统。
核心是基于Project Reactor的响应式流。
适用于高吞吐量、低延迟的IO密集型场景。
六、学习路径建议
第一阶段:基础
掌握Java SE,特别是注解和反射。
理解IoC和DI的核心思想。
学习使用 Spring Boot 快速创建一个RESTful API。
掌握Bean的声明、依赖注入、常用注解。
第二阶段:核心技能
深入学习 Spring MVC 和REST控制器。
学习 Spring Data JPA 进行数据库操作。
掌握 声明式事务(@Transactional)。
了解 AOP 的基本概念和应用场景(如日志、性能监控)。
第三阶段:进阶与生产实践
学习 Spring Security 保护你的应用。
了解 Spring Boot Actuator 进行应用监控。
学习使用 Spring Cloud 组件构建微服务(如果公司技术栈需要)。
理解外部化配置(
application.yml
)、Profile、日志配置等。
Spring框架是一个需要持续学习和实践的生态系统。从Boot开始入门,然后根据项目需求逐步深入各个模块,是最高效的学习路径。希望这份详细的梳理能对你有所帮助!