【框架】Spring、SpringBoot和SpringCloud区别

Spring

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)

IoC(Inversion of Control,控制反转)是一种设计思想,它主要用于降低软件系统中不同模块之间的耦合度,提高代码的可维护性和可扩展性。

一、传统开发与 IoC 开发的对比

在传统的软件设计中,对象的创建和依赖关系的管理通常由对象自身负责。例如,一个对象 A 需要依赖对象 B 来完成某些功能,那么对象 A 就会在自己的代码中显式地创建对象 B。这样的方式会导致对象之间的耦合度较高,当对象 B 的实现发生变化时,可能需要修改对象 A 的代码。

而在 IoC 的设计模式下,对象的创建和依赖关系的注入由一个外部的容器(通常称为 IoC 容器)来负责。对象只需要声明自己所需要的依赖,而不需要关心这些依赖是如何创建和管理的。当对象需要使用依赖时,IoC 容器会自动将依赖注入到对象中。

二、IoC 的实现方式

  • 依赖注入(Dependency Injection,DI):这是实现 IoC 的主要方式之一。依赖注入是指在对象创建的时候,由 IoC 容器将对象所需要的依赖传递给它。依赖注入可以通过构造函数注入、Setter 方法注入和接口注入等方式实现。
  • 构造函数注入:在对象创建时,通过构造函数将依赖传递给对象。这种方式可以确保对象在创建时就拥有所需的依赖,并且可以保证依赖的不可变性。
  • Setter 方法注入:在对象创建后,通过 Setter 方法将依赖传递给对象。这种方式比较灵活,可以在对象创建后动态地设置依赖。

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,它通过在不修改原有业务逻辑代码的情况下,对业务逻辑的各个部分进行增强或补充,从而实现横切关注点的分离。

一、AOP 的核心概念

  • 切面(Aspect):切面是对横切关注点的模块化封装,它包含了对业务逻辑的增强或补充的代码。例如,日志记录、事务管理、安全检查等都可以作为切面。
  • 连接点(Join Point):连接点是程序执行过程中的一个特定点,例如方法调用、方法执行、异常抛出等。在 AOP 中,连接点是切面可以插入的地方。
  • 切入点(Pointcut):切入点是对连接点的筛选条件,它定义了哪些连接点可以被切面增强。通过定义切入点,可以精确地控制切面的作用范围。
  • 通知(Advice):通知是在切入点处执行的代码,它可以在连接点之前、之后或周围执行。通知分为前置通知(Before Advice)、后置通知(After Advice)、环绕通知(Around Advice)等类型。

SpringBoot

SpringBoot是为了简化Spring开发的框架(具体体现就是说Spring创建一个代码需要配置对应的Bean和MVC(xml文件)但是SpringBoot无需配置)主要的一个特点就是约定大于配置(就我们上面说的Spring需要配置一些信息,但是SpringBoot就不需要)

自动配置

  • Spring Boot 在启动时会自动扫描类路径下的依赖和配置,并根据这些信息进行自动配置。

  • 自动配置的原理 :自动配置主要是归功于@SpringBootApplication这个注解,由@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan

    这三个注解组成的,其中 @EnableAutoConfiguration 是实现自动化配置的核心注解。该注解主要是通过 @Import 注解导入对应的配置选择器。关键是内部读取该项目和 该项目引入的Jar包 里的classpath路径下的** META-INF/spring.factories **文件中的所配置类的全类名。这些配置类中所定义的Bean还会根据对应的条件注解 @CoditionalOnClass 这个注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

约定大于配置

SpringBoot是为了简化Spring开发的框架(具体体现就是说Spring创建一个代码需要配置对应的Bean和MVC(xml文件)但是SpringBoot无需配置)主要的一个特点就是约定大于配置(就我们上面说的Spring需要配置一些信息,但是SpringBoot就不需要)

代码示例:

SpringBoot实现

复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

Spring代码实现:

复制代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloWorldController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello, Spring!";
    }

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

同时,你需要创建一个名为 applicationContext.xml 的配置文件,内容如下:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="你的包名"/>

    <mvc:annotation-driven/>
</beans>

SpringCloud

Spring Cloud 是一个基于 Spring Boot 的微服务开发框架,它提供了一系列工具和组件,帮助开发人员快速构建分布式系统。

一、主要特点

相关推荐
m0_748250939 分钟前
Spring Boot 2.7.x 至 2.7.18 及更旧的版本,漏洞说明
java·spring boot·后端
计算机-秋大田6 小时前
基于Spring Boot的乡村养老服务管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·课程设计
没有十八岁7 小时前
云创智城YunCharge 新能源二轮、四轮充电解决方案(云快充、万马爱充、中电联、OCPP1.6J等多个私有单车、汽车充电协议)之新能源充电行业系统说明书
java·数据库·spring·汽车
小萌新上大分8 小时前
Minio搭建并在SpringBoot中使用完成用户头像的上传
java·spring boot·后端·minio·minio搭建·头像上传·minio入门
B站计算机毕业设计超人8 小时前
计算机毕业设计SpringBoot+Vue.js校园失物招领系统(源码+文档+PPT+讲解)
java·vue.js·spring boot·后端·毕业设计·课程设计·毕设
计算机-秋大田8 小时前
基于SpringBoot的环保网站的设计与实现(源码+SQL脚本+LW+部署讲解等)
java·vue.js·spring boot·后端·课程设计
汤姆yu8 小时前
基于springboot的高校物品捐赠系统
java·spring boot·后端·高校物品捐赠
岁岁岁平安8 小时前
spring注解开发(Spring整合JUnit+MyBatis)(7)
java·spring·junit·log4j·mybatis
大地爱9 小时前
如何使用Spring Boot框架整合Redis:超详细案例教程
spring boot·redis·后端