Spring框架的基本认识
Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发
Spring框架的基本特性
控制反转IOC和依赖注入DI
Spring通过控制反转实现了对象的创建和对象间的依赖关系管理。开发者只需要定义好Bean及其依赖关系,Spring容器负责创建和组装这些对象。实现了通过配置文件或注解来管理对象之间的依赖关系,降低了耦合度,提高了代码的可维护性和可测试性。
而依赖注入则是控制反转的实现方式
面向切面编程AOP
面向切面编程,允许开发者定义横切关注点,例如事务管理、安全控制等,独立于业务逻辑的代码。将那些与核心业务逻辑无关,但是对多个对象产生影响的公共行为封装起来,如日志记录、性能统计、事务等。通过AOP,可以将这些关注点模块化,提高代码的可维护性和可重用性。
事务管理
Spring提供了一致的事务管理接口,支持声明式和编程式事务。开发者可以轻松地进行事务管理,而无需关心具体的事务API。
Spring框架的模块架构
Spring 框架是分模块存在,除了最核心的 Spring Core Container 是必要模块之外,其他模块都是可选的

核心模块 Core Container
- Spring Core:提供了依赖注入(Dependency Injection, DI)和控制反转(Inversion of Control, IoC)的实现,所有其他Spring模块的基础,别的模块都会依赖此模块。
- Spring Beans:负责管理Bean的定义和生命周期。通过IoC容器完成Bean的创建、依赖注入、初始化、销毁等操作。
- Spring Context:基于Core和Beans的高级容器,提供了类似JNDI的上下文功能,还包含了国际化、事件传播、资源访问等功能。
- Spring Expression Language(SpEL):一个强大的表达式语言,用于在运行时查询和操作对象的值。
面向切面编程模块 AOP
- Spring AOP:提供面向切面编程的功能,可以在方法执行前后或抛出异常时动态插入额外的逻辑,比如日志记录、权限验证、事务管理等。
- spring-aspects:该模块为与 AspectJ 的集成提供支持。
- spring-instrument:提供了为 JVM 添加代理(agent)的功能。 具体来讲,它为 Tomcat 提供了一个织入代理,能够为 Tomcat 传递类文件,就像这些文件是被类加载器加载的一样。
数据访问/集成模块
- Spring JDBC:简化了原生JDBC的操作,提供模板方法来管理连接、资源的释放和异常处理。
- Spring ORM:支持与主流ORM框架(如Hibernate、JPA、MyBatis等)集成,简化持久层开发。
- Spring Transaction(事务管理):提供声明式和编程式的事务管理机制,与数据库操作密切结合。
Web模块
- Spring Web:提供基础的Web开发支持,包括Servlet API的集成,适用于构建MVC架构。
- Spring MVC:实现了Model-View-Controller(MVC)模式的框架,用于构建基于HTTP请求的Web应用。它是一个常用的模块,支持注解驱动的Web开发。
- Spring WebFlux:提供基于Reactive Streams的响应式编程模型,专为高并发的异步非阻塞请求设计。
提示
Spring,SpringBoot,SpringMVC的关系和区别
- Spring 是基础框架,用来管理Bean对象,提供核心功能,如 IOC、AOP、事务管理等,同时方便整合各种框架。
- Spring MVC 是 Spring 的 Web 组件,是spring对web框架的解决方案,主要用于构建基于 MVC 模式的 Web 应用。
- Spring Boot 进一步简化了 Spring 和 Spring MVC 的使用,提供自动配置、嵌入式服务器、简化依赖管理,适用于快速开发 Web 和微服务应用。
Spring的常用注解
Web开发
-
@Controller:用于标注控制层组件。@RestController:是@Controller和@ResponseBody的结合体,返回 JSON 数据时使用。
-
@RequestMapping:用于映射请求 URL 到具体的方法上,还可以细分为:-
@GetMapping:只能用于处理 GET 请求 -
@PostMapping:只能用于处理 POST 请求 -
@DeleteMapping:只能用于处理 DELETE 请求
-
-
@ResponseBody:直接将返回的数据放入 HTTP 响应正文中,一般用于返回 JSON 数据。 -
@RequestBody:表示一个方法参数应该绑定到 Web 请求体。 -
@PathVariable:用于接收路径参数,比如@RequestMapping(“/hello/{name}”),这里的 name 就是路径参数。 -
@RequestParam:用于接收请求参数。比如@RequestParam(name = "key") String key,这里的 key 就是请求参数。
容器类
@Component:标识一个类为 Spring 组件,使其能够被 Spring 容器自动扫描和管理。@Service:标识一个业务逻辑组件(服务层)。比如@Service("userService"),这里的 userService 就是 Bean 的名称。@Repository:标识一个数据访问组件(持久层)。@Autowired:按类型自动注入依赖。@Configuration:用于定义配置类,可替换 XML 配置文件。@Value:用于将 Spring Boot 中 application.properties 配置的属性值赋值给变量。
AOP
@Aspect用于声明一个切面,可以配合其他注解一起使用,比如:@After:在方法执行之后执行。@Before:在方法执行之前执行。@Around:方法前后均执行。@PointCut:定义切点,指定需要拦截的方法。
Spring中的设计模式
工厂模式
Spring 使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。
BeanFactory:延迟注入(使用到某个 bean 的时候才会注入),相比于ApplicationContext来说会占用更少的内存,程序启动速度更快。ApplicationContext:容器启动的时候,一次性创建所有 bean 。BeanFactory仅提供了最基本的依赖注入支持,ApplicationContext扩展了BeanFactory,除了有BeanFactory的功能还有额外更多功能,所以一般开发人员使用ApplicationContext会更多。
ApplicationContext 的三个实现类:
ClassPathXmlApplication:把上下文文件当成类路径资源。FileSystemXmlApplication:从文件系统中的 XML 文件载入上下文定义信息。XmlWebApplicationContext:从 Web 系统中的 XML 文件载入上下文定义信息。
|
|
单例模式
在Bean对象的创建中使用了单例模式。Spring 中 bean 的默认作用域就是 singleton(单例)的
Spring中实现单例模式的核心代码
|
|
Spring中的单例模式属于 “注册式单例” ,广泛用于 Spring 容器的单例 Bean 管理。它的优势是:
- 线程安全
- 支持懒加载
- 支持多个单例对象的管理
代理模式
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy 去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理
适配器模式
在 Spring MVC 中,DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。解析到对应的 Handler(也就是 Controller 控制器)后,开始由HandlerAdapter 适配器处理。HandlerAdapter 作为期望接口,具体的适配器实现类用于对目标类进行适配,Controller 作为需要适配的类。
Spring中的基本概念
Bean对象
定义
任何通过 Spring 容器实例化、组装和管理的 Java 对象都是 Bean对象 。Bean 可以在 Spring 容器中被定义并且通过依赖注入来与其他 Bean 进行互相依赖。
生命周期
- 实例化:当 Spring 容器启动时,根据配置文件或注解,Spring 会首先实例化 Bean。
- 依赖注入:在实例化之后,Spring 容器会通过构造器、setter 方法或注解将其他 Bean 的依赖注入进来。
- 初始化:如果 Bean 实现了
InitializingBean接口或者使用了@PostConstruct注解,Spring 会在依赖注入完成后调用相应的初始化方法。 - 销毁:如果 Bean 实现了
DisposableBean接口或使用了@PreDestroy注解,Spring 会在容器关闭时调用销毁方法。
IOC容器
定义
IOC(Inversion of Control,控制反转) 容器是 Spring 框架的核心,用于管理 Java 对象(Bean)的创建、初始化、配置、依赖注入和生命周期管理。
IOC 容器是 Spring 提供的一个工厂,专门负责创建和管理对象(Bean),并自动将它们的依赖关系组装起来。开发者无需手动创建对象,而是由 Spring 容器自动注入所需的对象。