赞
踩
目录
3.4 @RestController 和 @RequestMapping 注解使用
3.5 Maven在Spring boot的作用(SpringBoot项目启动)
# 只想着把笔记放到上面,供以后参考。
Java后端导航:
本文章参考:
官网:https://docs.spring.io/spring-boot/docs/current/reference/html/
中文网:https://springdoc.cn/spring-boot/
学习SpringBoot之前我们先了解一下什么是微服务架构:
首先Spring Boot是一个用于构建独立的、基于Spring的应用程序的框架。它可以帮助开发者快速构建单体应用。然而,当需要构建大规模、分布式的应用程序时,可以使用Spring Cloud来构建微服务架构。
服务器架构介绍:
微服务架构是一种软件架构风格,将一个大型应用程序拆分为一组小型、相互独立的服务,每个服务都可以独立开发、部署和扩展。每个服务都围绕着特定的业务功能构建,可以通过轻量级的通信机制(如HTTP或消息队列)进行通信。微服务架构的核心原则是将应用程序拆分为一组小而自治的服务,每个服务都可以有自己的数据库,并通过API进行通信。
微服务架构的优势包括:
- 独立开发和部署:每个服务可以独立开发、测试和部署,这样可以提高开发团队的效率。
- 弹性和可伸缩性:由于每个服务都是自治的,可以根据需求独立扩展和缩减服务,提高系统的弹性和可伸缩性。
- 技术多样性:每个服务可以使用不同的技术栈和编程语言,以最适合特定需求的方式实现功能。
- 容错性:由于每个服务都是独立的,一个服务的故障不会影响整个系统的运行,提高了系统的容错性。
- 独立团队和自治性:每个服务可以由一个独立的团队负责开发和维护,团队可以根据需要进行决策,提高了团队的自治性和效率。
然而,微服务架构也带来了一些挑战,如服务间通信的复杂性、服务拆分和边界的定义、分布式事务的管理等。因此,在采用微服务架构时需要权衡利弊,并根据具体情况进行设计和实施。
Spring Boot是由Pivotal团队提供的全新框架。
Spring Boot基于Spring开发,Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来代替Spring的解决方案,而是和Spring框架紧凑结合用于提升Spring开发者体验的工具。
Spring Boot以约定大于配置的核心思想,默认帮我们进行了很多设置,多数Spring Boot应用只需要很少的Spring配置,同时它集成了大量常用的第三方库配置(例如:Redis、MongoDB、Jpa、RabbitMQ、Quartz等等...),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用。
简单的说就是Spring Boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring Boot整合了所有的框架。
而Spring Boot还是出生名门,从一开始就站在一个比较高的起点,又经过这几年的发展,生态足够完善,Spring Boot已经当之无愧成为Java领域最热门的技术。
在IDEA中创建一个spring initializr,并导入spring-boot-starter-web依赖,这样做会生成一个新的项目结构。
默认生成的Spring boot项目结构有:主启动类+配置文件。
Starter依赖参考:https://springdoc.cn/spring-boot/using.html#using.build-systems.starters
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- </dependency>
以上依赖也称为启动器:
Starter解释:
Starter可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成spring及其他技术,而不需要到处找示例代码和依赖包。如果你想使用Spring JPA访问数据库,只要加入spring-boot-data-jpa启动器依赖就可以直接使用。
Spring Boot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型。
除Spring Boot以外的第三方的启动器不能以spring-boot开头命名,它们都被spring boot官方保留。
启动器作用:
starter
,导入对应的依赖即可。在说明@SpringBootApplication注解的时候,让我们先来了解一下它包含的其他注解吧:
首先@SpringBootApplication注解的自动装配还是众人皆知的,而@SpringBootApplication是一个元注解也可以说是一个组合注解。
它是由Spring Framework提供的一个注解,用于简化配置和启动Spring Boot应用程序。元注解是指可以应用于其他注解上的注解。
@SpringBootApplication这个组合注解,它整合了多个其他注解,包括@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。这些注解的作用如下:
@ComponentScan
注解,也不需要定义它任何参数, 你的所有应用组件(@Component
、@Service
、@Repository
、@Controller
和其他)都会自动注册为Spring Bean.通过使用@SpringBootApplication注解,可以简化Spring Boot应用程序的配置,减少开发人员的工作量。只需要在主类上添加@SpringBootApplication注解,就可以自动配置Spring Boot应用程序,并扫描指定包中的组件。
需要注意的是,@SpringBootApplication注解通常应用于Spring Boot应用程序的主类上,以标识应用程序的入口点。
自动装配(Spring Boot的自动装配是依靠@SpringBootApilication内部的注解来完成自动装配的,而这些注解又与spring boot的Starter启动器紧密相关)
自动配置是Spring Boot框架的一大特点,它通过分析项目的依赖和配置来自动配置Spring应用程序的各个组件,简化了开发者的配置工作。例如,如果项目引入了Spring Data JPA依赖,Spring Boot会自动配置JPA相关的Bean,无需手动配置。这样,开发者只需要关注业务逻辑的实现,而不需要关心底层框架的配置,这就是自动装配。
注解代码介绍:
- // 该注解是Spring Boot框架中的核心注解之一。它的作用是将一个类标记为Spring Boot应用程序的主类。
- @SpringBootApplication
-
- // 该注解是一个特定于Spring Boot的配置类注解,用于标记一个类为Spring Boot的配置类,并启用自动装配和组件扫描功能,以及定义和配置其他的应用程序配置项。
- @SpringBootConfiguration
- @Configuration // spring配置类注解
- @Component // spring的注解
-
- // 启用自动配置机制,根据项目的依赖和配置,自动配置Spring应用程序所需的Bean和配置。
- @EnableAutoConfiguration
- @AutoConfigurationPackage // 自动配置包
- @Import(AutoConfigurationPackages.Registrar.class) // 自动配置"包注册"
- @Import(AutoConfigurationImportSelector.class) // 自动配置导入选择
Spring Boot所有的自动配置都是在启动时扫描并加载。
所有的自动装配类都在这个里面被扫描,但是不一定都生效,要判断条件是否成立。我们要导入对应的start,就有了对应的启动器,有了启动器,我们的自动装配才会生效,才能成功。
装配步骤:
spring.factories
获取指定的值。5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会添加到容器。
6.容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些给容器中导入了这个场景需要的所有组件,并自动配置。
7.有了自动配置类,免去了我们手动编写配置文件的工作。
源代码图注解展示:
(获取所有的配置)方法查看:
运行SpringbootApplication主类就可以启动整个spring boot项目了。(运行完后访问localhost:8080端口测试)
重点是@SpringBootApplication
该注解继承了自动配置包,自动装配等等...功能。
- // @SpringBootApplication 这个类是springboot的应用 启动类下的所有资源被导入
- @SpringBootApplication
- public class SpringbootApplication {
-
- // 将springboot应用启动
- public static void main(String[] args) {
- SpringApplication.run(SpringbootApplication.class, args);
- }
-
- }
@RestController 和 @RequestMapping 注解是Spring MVC注解(它们不是Spring Boot特有的)。
这里将它们与Spring Boot项目一起使用,@RestController将返回的结果字符串直接响应给客户端,@SpringBootApplication是spring boot的主要启动类注解,@RequestMapping("/") 这个注解提供了"routing"(路由)信息。它告诉spring。任何带有/路径的HTTP请求都应该被映射到home方法中去。
- @RestController // 将返回的结果字符串直接响应给客户端
- @SpringBootApplication // spring boot的主要启动类注解
- public class SpringbootApplication {
-
- @RequestMapping("/") // 该注解提供了"routing"(路由)信息。它告诉spring。任何带有/路径的HTTP请求都应该被映射到home方法中去。
- String home() {
- return "Hello World!";
- }
-
- public static void main(String[] args) {
- SpringApplication.run(SpringbootApplication .class, args);
- }
- }
在启动了SpringBootApplication主要类后,由于配置了spring-boot-starter-parent的pom.xml依赖,这个依赖里面配置了一些maven以及gradle的命令也可以通过命令来启动。
所以在IDEA中直接启动Spring Boot默认生成的xxxApplication主类的main方法,再去访问localhost:8080地址,就会打印MyApplication下的home方法了。
注意:这个8080端口号是当前默认生成配置文件中配置的。application.properties
小结第一个Spring Boot项目步骤:
首先我们要实现一个视图解析器的接口,把它注册到bean中。
- @Configuration
- public class MyMvcConfig implements WebMvcConfigurer {
-
- // ViewResolver实现了视图解析器接口的类,我们就可以把它看作视图解析器
- @Bean
- public ViewResolver myViewResolver() {
- return new MyViewResolver();
- }
-
- // 自定义了一个自己的视图解析器MyViewResolver
- public static class MyViewResolver implements ViewResolver {
- @Override
- public View resolveViewName(String viewName, Locale locale) throws Exception {
- return null;
- }
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
设置视图跳转,把所有访问lei路径的请求都跳转到test页面:
- // 视图跳转
- @Override
- public void addViewControllers(ViewControllerRegistry registry) {
- registry.addViewController("/lei").setViewName("test");
- }
Spring Boot中@Configuration注解,这个注解代表着这是将MyMcvConfig类中的配置都注册到spring中去,代表这是一个Spring的配置类。
@EnableWebMvc注解开启SpringMVC代码实例。
Spring mvc的重点是开启mvc。
- @Configuration // mvc配置
- @EnableWebMvc // 开启springmvc
- public class MyMvcConfig implements WebMvcConfigurer {
-
- }
常用Spring Boot项目类的介绍:
参考官网:
我们通常建议你将你启动类放在一个根package中,高于其他的类,@SpringBootApplication 注解一般都是注解在启动类上的。它默认会扫描当前类下的所有子包。例如,如果你正在编写一个JPA应用程序,你的
@Entity
类只有定义在启动类的子包下才能被扫描加载到。这样的好处也显而易见,@SpringBootApplication
默认只会扫描加载你项目工程中的组件。
Configuration类(通常在开发中我们都会自定义其它Configuration配置类来满足需求)
SpringApplication
,但还是建议你通过 @Configuration
类来进行配置。 通常,可以把启动类是作为主要的 @Configuration
类。自动装配:
HSQLDB
依赖,而且你没有手动配置任何DataSource Bean,那么Spring Boot就会自动配置内存数据库。@EnableAutoConfiguration
或 @SpringBootApplication
注解添加到你的 @Configuration
类中,从而开启自动配置功能。SpingBean和依赖注入@Autowired 注解:
@Autowired
注解来告诉Spring该用哪个构造函数进行注入。参考教程:https://blog.csdn.net/qq_44932835/article/details/109783836
导入配置文件绑定的依赖:
- <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-configuration-processor</artifactId>
- <optional>true</optional>
- </dependency>
直接上图按照步骤走:
基本在运行过程中不会遇到问题,如果在Spring Boot项目启动成功后,再配置yml配置文件的读取,自动装配到类期间出现了问题,那么就参考上面的教程,或者在评论区给某编评论。
与以上的yml配置文件读取对象的不同点:没有了@ConfigurationProperties(prefix = "product")注解。
而是多了@Value("${product.name}")注解(配置完直接运行项目)。
三种读取的方式:(@Value不支持复杂类型(List是支持的)如下演示)
如果在使用配置文件注入的时候产生了乱码问题:
解决办法: 在idea的设置中设置字符编码集为UTF-8。
在Spring Boot框架中,"application.yml"和"application.properties"是默认的配置文件名。它们用于配置应用程序的属性和设置。
这两个文件的作用是相同的,都用于配置应用程序的属性和设置,只是格式不同。
使用"application.yml"或"application.properties"文件,都可以指定应用程序的一些配置,如数据库连接信息、日志级别、服务器端口等。这些配置会被Spring Boot框架读取并应用到应用程序中。
使用"application.yml"或"application.properties"配置文件的好处是,可以集中管理应用程序的配置,而不需要硬编码到代码中。这样可以更方便地修改和调整应用程序的行为,而不需要重新编译和部署应用程序。
详细参考:YAML 入门教程 | 菜鸟教程 (runoob.com)
注意:yaml对空格的要求特别高。
- 第一优先级:项目下创建config/application.yaml
- 第二优先级:项目下的application.yaml
- 第三优先级:resources下的config/application.yaml
- 第四优先级:resources下的application.yaml
@Configuration是用来配置Spring的配置信息的,它在配置类里面配置的信息只要加上@Bean注解那么这个配置就会出现在Spring的Bean容器当中。
JSR-303校验是Java标准化的一种校验框架,用于对Java对象进行数据校验。它可以帮助开发者在编写代码时,对数据进行合法性校验,从而减少错误和异常情况的发生,提高代码的健壮性和可靠性。
具体的案例包括:
- 表单数据校验:在Web开发中,用户提交的表单数据需要进行校验,以确保数据的合法性。JSR-303校验可以用于验证表单输入的数据,例如验证邮箱格式、密码复杂度、手机号码格式等。
- 实体对象校验:在业务逻辑处理中,需要对实体对象的属性进行校验,以确保满足业务规则。例如,在用户注册时,需要校验用户名是否已存在、密码是否符合要求等。
- 接口参数校验:在接口开发中,往往需要对传入的参数进行校验,以避免无效的参数导致的错误。JSR-303校验可以用于对接口参数进行校验,例如校验参数的非空性、长度范围、格式等。
- 数据库实体校验:在数据存储过程中,需要对数据库实体进行校验,以确保数据的完整性和一致性。JSR-303校验可以用于对数据库实体属性进行校验,例如校验字符串长度、数值范围、日期格式等。
1.创建一个Spring Boot项目,选择web支持
2.写一个service层方法
- @Service
- public class AsyncService {
- // 告诉spring这是个异步方法
- @Async
- public void hello(){
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("数据正在处理...");
- }
- }
3.写一个controller层测试调用service层的方法
- @RestController
- public class AsyncController {
-
- @Autowired
- AsyncService service;
-
- @RequestMapping("/hello")
- public String hello(){
- service.hello(); // 停留3秒--转圈等待3秒
- return "ok";
- }
- }
4.使用@Async注解 让这个方法变成异步方法。使用@EnableAsync注解在核心类中开启异步功能。
- @Service // 在service层操作
- public class ScheduledService {
-
- /**
- * cron 表达式
- * 秒 分 时 日 月 周几
- * (cron = "0 45 21 * * ?")每天的21 点 45 分 0 秒执行一次
- * 30 0/5 10 18 * * ? 每天的10和18点,每个5分钟执行一次
- * 0 15 10 ? 1-6 每个月的周一到周六的10.15分执行
- *
- * */
- @Scheduled(cron = "0 45 21 * * ?") // 加上注解
- public void hello(){
- System.out.println("hello,被执行了!");
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
"这篇博客记录了我的学习中的一些笔记,仅仅只是一个开始,还有更多的内容等待着我们去探索和分享。"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。