前言
如果说Java开发是一个厨房,那Spring生态系统就是一套完整的厨具套装,让每个"厨师"都能更高效地烹饪出美味佳肴。
Spring框架 是这套厨具的"基石"。它最厉害的两把刷子是IOC(控制反转) 和AOP(面向切面编程)------听起来很学术,其实道理很简单:IOC就像从"自己买菜做菜"变成"叫外卖或请保姆",你把控制权交出去,专心吃就行;AOP则像给照片加滤镜,不管你拍的是风景还是人像,统一加上"复古风"或"美颜效果",在不改动原图的情况下增强功能。Spring采用模块化设计,就像乐高积木,你需要什么功能就拼什么,不用背整个工具箱。
SpringMVC 则是专门做"网页外卖"的模块。当你访问一个网站时,DispatcherServlet就像餐厅的前台服务员,负责接收你的订单(请求),然后分发给后厨(控制器)、准备食材(模型)、最后摆盘上桌(视图),整个流程井井有条。
再来说说SpringBoot ------这简直是"懒人福音"。以前用Spring搭环境就像手动组装家具,得看一大堆说明书、拧无数螺丝;SpringBoot则像宜家现成的整装家具,开箱即用。它最大的杀手锏是自动配置,能猜到你想要什么并提前准备好,还支持当下流行的微服务架构,让大型应用拆成一个个独立的小模块,开发部署都轻松不少。
文章还深入讲解了IOC容器 这个"大管家"是如何管理对象的,以及AOP切面这把"瑞士军刀"是怎样在不破坏原有代码的情况下,巧妙植入日志、权限检查等通用功能的。
最后对比了Mybatis 和Mybatis-Plus这对"数据库操作双子星":Mybatis像是手动挡汽车,SQL语句要自己写,灵活但费事;Mybatis-Plus则是升级版的自动挡,内置了各种常用操作(CRUD),还自带代码生成器------原本要写几百行的代码,现在一键生成,开发效率直接起飞。
一、Spring
Spring他是一个轻量级的Java开发框架,它的核心是IOC和AOP。
IOC通过依赖注入的方式,管理对象之间的依赖关系;
AOP则提供了面向切面编程的能力,用于处理横切关注点;
Spring提供了丰富的功能模块,包括Core、Context、AOP、ORM、Web等模块,支持灵活组合使用。
二、SpringMVC
SpringMVC则是基于Spring的MVC框架,他实现了Web应用的MVC框架,其中核心组件包括
DispatcheerServlet(前端控制器)
HandlerMapping(处理映射器)
Controller(业务控制器)
ViewResolver(视图解析器)
ModelAndView(模型和视图)
PS:毕业前画的比较潦草,勿喷!!!

SpringMVC提供了很多Web开发功能,是构建Web应用的非常重要的工具。
三、SpringBoot
SpringBoot是基于Spring的快速开发框架,它的核心目标是简化 Spring 应用的初始搭建以及开发过程,让开发者能够更快速地开发、部署和运行 Spring 应用程序。
自动配置: Spring Boot 通过 @SpringBootApplication 注解自动配置 Spring 和相关依赖项,减少了大量的配置工作。例如,只需添加 **spring-boot-starter-web**依赖,Spring Boot 就会自动配置一个嵌入式的 Tomcat 服务器和 Spring MVC。
独立运行: Spring Boot 内嵌了 Tomcat、Jetty 等服务器,无需部署 WAR 文件,直接打包为一个可执行的 JAR 文件,通过**java -jar** 命令即可运行。
无代码生成和 XML 配置:Spring Boot 采用约定大于配置的原则,无需编写大量的 XML 配置文件或代码生成工具。大部分配置可以通过简单的注解或配置文件完成。
**微服务支持:**Spring Boot 与 Spring Cloud 等技术结合,能够快速构建微服务架构,支持服务注册、配置中心、网关等功能。
他通过自动配置 基于条件的智能配置机制减少繁琐的XML配置工作和start依赖 简化Maven或Gradle配置,避免版本冲突问题,内嵌服务器集成了Tomcat、Jetty等容器。支持独立运行JAR包。简化部署流程。在yml中配置端口号、数据源之类的。
四、 IOC 和 AOP
1、IOC
IOC思想就是创建对象的控制权,被反转到了Spring框架上。
项目在启动时,Spring框架会自动为我们初始化好一个IOC容器,首先就是在类上添加一个和@bean相关的注解例如@Service,根据配置文件添加Bean对象,然后将Bean对象添加到依赖池中完成装配,如果要使用这个类,直接在类上加@Autowried或者是@Resource这个注解进行依赖注入,这样就可以直接使用对象内封装的属性方法了,这个效果就称为控制反转。
IOC容器的原理





最终,Spring IOC 容器通过封装对象的创建和生命周期管理,使用依赖注入来解耦对象之间的依赖关系,利用反射和配置元数据来动态地创建和管理对象,同时提供作用域管理功能。这些机制共同构成了SpringIOC 容器的原理,使其成为一个强大而灵活的容器,能够支持各种复杂的应用程序开发需求。
2、AOP(面向切面编程)
AOP它是一种编程思想,在不修改现有业务逻辑代码的情况下,动态地添加或修改程序的执行逻辑。
什么是切面?
Spring AOP 的核心在于"切面",可以说理解了"切面"就理解了 AOP。这里结合两个例子进行说明。
- 权限校验拦截
目前,最常用的一种权限校验方式就是基于token 进行校验,基本思想是:用户登录时给用户返回一个字符串 token,之后针对接口的请求,都需要携带该token,那在需要权限校验的所有控制器中,执行对token 的校验操作。这样一来,校验 token 的代码逻辑需要在很多Controller 中编写一次,解决方案当然有,其中一种就是 AOP。注意表述:把所有的 Controller标记为一个切人点,在切人点之前创建一个切面,切面中实现 token 校验逻辑。
- 动态切换数据源
假设有一个需求,项目中想要动态的支持多数据源,要如何做呢?一种思路是,可以在Controller 对应的方法上,添加自定义注解 @DS,指定不同的数据库。在这个例子中,注意表述:可以将 @DS 注解标识的方法定义为"切人点";另外,再定义一个切面类,在这个切面类中,编写多数据源业务逻辑,如此一来,框架启动时,就会将切面织人到原有业务逻辑。客户端请求在触发调用Controller 时,就会自动去切换数据源了。
有了上面的理解之后,此时,再去尝试理解面向切面编程:(1)标记切人点(2)创建切面,编写公共代码。实际上,往往我们编写公共逻辑代码的那个类,就是切面。
下面是一个关于AOP使用的记录日志的例子
java
Slf4j
@Aspect // 声明这是一个切面
@Component
public class LogAspect {
private final ObjectMapper objectMapper = new ObjectMapper();
// 需要过滤的敏感字段
private static final List<String> SENSITIVE_FIELDS = Arrays.asList(
"password", "pwd", "token", "secret", "key"
);
@Pointcut("execution(* com.project.platform.controller.*.*(..))") // 定义切点,匹配所有控制器方法
public void controllerPointcut() {}
@Around("controllerPointcut()") // 环绕通知,在切点方法执行前后都会触发
public Object around(ProceedingJoinPoint point) throws Throwable {
// AOP实现的方法体...
}
// 辅助方法...
}
五、Mybatis
Mybatis是一个半自动化的ORM持久层框架,他底层是封装了JDBC,支持自定义的SQL。
优点:
1、它的SQL和代码是分离的,不像JDBC还在在代码片段中编写SQL语句,这样使得代码更加简洁、清晰、容易维护。
2、它可以自动帮我们完成数据库字段和Java对象属性关系的映射,不像JDBC那样还得操作ResultSet来手动完成关系映射
3、动态的支持SQL,比如if/where/trim/foreach等,可以大大减少代码的开发成本。
4、支持多种分页查询,例如手动使用limit关键字进行分页,还可以使用Mybatis中默认的RowBounds作为参数进行分页。
缺点:
1、数据库的移植能力较差。这就是半自动 ORM 框架的弊端,因为 SQL 都需要自己编写,所以数据库的移植能力就比较差,需要根据每套数据库方言定制一套单独的 SQL。
2、代码量偏大。这同样是半自动 ORM 框架的不足之处,全自动的 ORM 可以根据映射关系自动帮我们生成一套 CRUD 操作的接口,使用这些接口直接操作数据库可以大大的减少我们的代码量。当然了,MvBatis 官方也考虑到这一点,由他们提供的generator 项目也同样可以完成类似的功能。
六、MYbatis-Plus
优点:
1、强大的 CRUD 操作。MyBatis-Plus 内置了通用的 Mapper 和通用的 Service,我们仅需要简单的配置即可成单表大部分的CRUD 操作,而且 MvBatis-Plus 还提供了强大的条件构造器,除了复杂的业务场景外,我们几乎无须在手动编写 SQL 语句。

2、支持 Lambda 表达式方式调用。通过使用 Lambda 表达式调用的方式,可以很方便的编写各类的查询条件,无须在担心字段拼写
错误的问题。
3、内置了代码生成器。使用 MyBatis-Plus,我们可以采用代码或者 Maven 插件的方式快速生成 Mapper、Model、Service、Controller 层代码,并且支持模板引擎,大大的减少了我们"重复代码"的开发量。
4、内置了分页插件。MvBatis-Plus 内置的分页是一种物理分页,有了它,我们的分页功能真的变得超级简单!还记得 MyBatis 框架中我们使用的 PageHelper 分页插件吗?它们的原理如出一撤。
5.内置了性能分析插件。通过该插件,我们可以输出执行的 SQL 语句及其执行的时间,在开发测试环境开启此功能,可以帮助我们快速定位慢查询的问题,不得不说,确实是很强大!