Spring Boot 是一个用于简化 Spring 应用程序开发的框架,它提供了大量的注解来简化配置和开发。
SpringFramework没有解决了什么问题?
为什么有了SpringFramework还会诞生SpringBoot?简单而言,因为虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。
一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。
除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器 2.Spring不支持分布式,这也是EJB仍然在用的原因之一。
SringBoot的概述
- SpringBoot解决上述Spring的缺点
SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。 - SpringBoot的特点
1、为基于Spring的开发提供更快的入门体验
2、开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
3、提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式 - SpringBoot的核心功能
- 起步依赖:起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
- 自动配置:Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的
- 为什么添加一个starter-web模块,一个简单的web程序便完成了呢?
SpringBoot最强大的地方在于约定大于配置,只要你引入某个模块的xx-start包,它将自动注入配置,提供了这个模块的功能;
比如这里我们在POM中添加了如下的包它内嵌了Tomcat并且提供了默认的配置,比如默认端口是8080;可以在application.properties或者application.yml中修改配置。1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
SpringBoot 注解
@SpringBootApplication
:该注解用于标记主应用程序类,通常位于项目的顶层包中。定义在main方法入口类处,用于启动sping boot应用项目。
它包含了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
注解,用于自动配置和组件扫描。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public SpringBootApplication {
/**
* Exclude specific auto-configuration classes such that they will never be applied.
* @return the classes to exclude
*/
Class<?>[] exclude() default {};
}@EnableAutoConfiguration
:让spring boot根据类路径中的jar包依赖当前项目进行自动配置,在src/main/resources的META-INF/spring.factories@ImportResource
:加载xml配置,一般是放在启动main类上@ConfigurationProperties(prefix="person")
:可以新建一个properties文件,ConfigurationProperties的属性prefix指定properties的配置的前缀,通过location指定properties文件的位置@PostConstruct
:spring容器初始化时,要执行该方法@ComponentScan
:注解会告知Spring扫描指定的包来初始化Spring@RestController
:用于标记一个类,表示它是一个控制器类,处理 HTTP 请求并返回 JSON 或 XML 等数据。@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
:这些注解分别用于将 HTTP GET、POST、PUT 和 DELETE 请求映射到相应的处理方法上。@RequestMapping
:用于将 HTTP 请求映射到控制器方法上,指定请求的 URL 路径和请求方法(GET、POST、PUT、DELETE 等)1
@RequestParam
:用于从请求参数中获取值,并将其传递给控制器方法的参数。1
2
3
4
5public List<CopperVO> getOpList(HttpServletRequest request,
Integer pageIndex,
{ Integer pageSize)
}@PathVariable
:用于从 URL 路径中获取值,并将其传递给控制器方法的参数。@RequestBody
:用于将请求体中的数据绑定到控制器方法的参数上,通常用于接收 JSON 或 XML 数据。@ResponseBody
: 表示方法返回的对象应该直接写入HTTP响应体,而不是通过视图解析器进行渲染。@Autowired
是 Spring 框架自带的注解用于进行依赖注入,将 Spring 托管的 bean 注入到需要它们的类中。@Resource
是 Java EE 提供的注解,用于实现依赖注入。它可以用于字段、setter 方法、构造函数等地方,用于告诉容器注入指定名称或类型的 bean。@Bean
: 用于定义Spring Bean,通常在 @Configuration 类中使用。@Component
是 Spring 框架中用于声明一个类为 Spring 管理的组件(Bean)的注解。@Service
、@Repository
、@Controller
:这些注解分别用于标记服务类、仓库类和控制器类,以便 Spring Boot 可以自动扫描并创建这些组件。都属于 @Component 的衍生注解,用于更明确地表示类的职责。@Configuration
:用于定义配置类,通常与 @Bean 注解一起使用,用于配置第三方库或复杂的 bean。@Override
是Java中的一个注解(Annotation),用于标识方法是否是一个覆盖(重写)了父类或接口中的方法。它提供了编译时的检查,确保您正确地重写了父类或接口中的方法,以防止由于拼写错误或方法签名不匹配而导致的错误。@Value
:用于注入属性值,从配置文件中获取属性值。@Profile
:用于定义不同环境下的配置文件,可以根据不同的配置文件加载不同的配置。@Conditional
:用于根据条件决定是否创建某个 bean。@Param
:给参数变量起别名。如果只有一个参数,并且在mapper对应的xml文件中里使用,则必须加别名。 @Async
是 Spring 框架中用于实现异步方法调用的注解。通过在方法上添加 @Async 注解,Spring Boot 就会在调用该方法时使用另一个线程来执行,而不是阻塞当前线程等待方法执行完成。@Order
:如 @Order(1),值越小优先级超高,越先运行