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 的微服务开发框架,它提供了一系列工具和组件,帮助开发人员快速构建分布式系统。
一、主要特点

