一、SpringBoot简介
1.定义
Spring Boot 是一种基于 Spring 框架的轻量级开发框架,它简化了 Spring 应用的开发过程,提供了一套预设的开发规范和约束,并且内置了大量常用的第三方库,可以减少开发人员在搭建和集成各种开发框架和工具上花费的时间和精力。Spring Boot 的核心思想是“约定大于配置”,它通过封装和自动配置的方式,让开发者可以快速构建一个独立运行的、生产级别的 Spring 应用。同时,Spring Boot 还提供了丰富的生态和插件,例如 Actuator 可以帮助我们监控应用的性能和运行状况,以及许多第三方库可以让我们更加便捷地开发各种应用程序。
2.优点
Spring Boot 提供了自动化的配置方式,大部分的配置都可以通过约定来实现,不再需要繁琐的配置文件。可以创建独立的、内嵌的应用程序,无需外部的应用服务器,例如Tomcat或Jetty,从而简化了部署过程。集成了“starter”概念,通过简单地引入相关的 starter 模块,可以方便地管理项目所需的依赖。提供了丰富的端点(Actuator Endpoints)来帮助监控应用程序的运行状态,包括健康状况、度量信息、审计日志等。对微服务的开发提供了良好的支持,例如集成了Spring Cloud,可以方便地构建分布式系统。遵循“约定优于配置”的原则,同时也提供了很强的扩展能力,可以根据实际需求进行个性化配置和定制。
3.弊端
Spring Boot 的自动化配置虽然方便,但有时候也可能受到默认配置的限制,当项目需要定制化的配置时,可能会遇到一些困难。虽然自动化配置可以提高开发效率,但有时候也可能导致开发者对系统内部发生的事情不够清楚,当出现问题时可能需要花费更多的精力去理解和调试。尽管内嵌服务器提供了便利,但在某些情况下可能会受到性能方面的限制,特别是在需要处理大量并发请求或高负载情况下可能表现不佳。
二、基础知识
1.环境配置
1.1配置Java开发环境
- 1.下载JDK
- 2.运行安装程序:双击下载的JDK安装包,并按照安装向导的指示进行操作。根据操作系统的要求,可能需要管理员权限。
-
3.设置安装路径:选择JDK的安装路径。默认情况下,它会被安装在操作系统的默认目录中。你可以选择接受默认路径,或自定义一个路径。
-
4.配置环境变量:
-
找到计算机右击在列下面招到属性点击打开
-
点击“高级系统设置”链接,打开“系统属性”窗口。
-
在“系统属性”窗口中,点击“环境变量”按钮。
-
在“环境变量”窗口中,找到“系统变量”部分,点击“新建”按钮。
-
输入变量名为
JAVA_HOME
,变量值为JDK的安装路径(例如:C:\Program Files\Java\jdk1.8.0_271
)。 -
找到“系统变量”中的“Path”变量,点击“编辑”按钮。
-
在“编辑环境变量”窗口中,点击“新建”按钮。
-
输入变量值为
%JAVA_HOME%\bin
。 -
最后点击确认。
-
-
5.window+r输入cmd打开控制台输入java -version是否出现版本号:
1.2配置Maven环境变量
- 1.下载Maven
- 2.解压到一个稳定的位置
-
3.配置环境变量:
-
找到计算机右击在列下面招到属性点击打开
-
点击“高级系统设置”链接,打开“系统属性”窗口。
-
在“系统属性”窗口中,点击“环境变量”按钮。
-
在“环境变量”窗口中,找到“系统变量”部分,点击“新建”按钮。
-
输入变量名为
MAVEN_HOME
,变量值为Maven解压所在的绝对路径(例如:C:\apache-maven-3.8.8
)。 -
找到“系统变量”中的“Path”变量,点击“编辑”按钮。
-
在“编辑环境变量”窗口中,点击“新建”按钮。
-
输入变量值为
%MAVEN_HOME%\bin
。 -
最后点击确认。
-
-
4.window+r输入cmd打开控制台输入mvn -version是否出现版本号:
2.项目结构
Spring Boot 项目通常遵循标准的 Maven 或 Gradle 项目结构,其中包含了主要的代码、配置文件和资源文件。下面是一个典型的 Spring Boot 项目结构示例:
my-spring-boot-app
├── src
| ├── main
| | ├── java
| | | └── com
| | | └── example
| | | └── myapplication
| | | ├── MyApplication.java
| | | ├── controller
| | | ├── service
| | | ├── repository
| | | └── model
| | └── resources
| | ├── application.properties (或 application.yml)
| | ├── static
| | └── templates
└── pom.xml (或 build.gradle)
让我来解释一下这个结构:
-
src/main/java
:这是你的 Java 代码的根目录。com/example/myapplication
:这里存放着你的应用程序的源代码。MyApplication.java
:这是 Spring Boot 应用程序的入口类,通常带有@SpringBootApplication
注解。controller
:这是存放控制器(Controller)类的目录,处理 HTTP 请求和构建 HTTP 响应。service
:这是存放服务(Service)类的目录,负责业务逻辑的处理。repository
:这是存放数据访问层的目录,包括与数据库交互的代码。model
:这是存放实体类(Entity)或数据传输对象(DTO)的目录。
-
src/main/resources
:这是你的资源文件的根目录。application.properties
(或application.yml
):这是 Spring Boot 应用程序的配置文件,包含应用程序的各种配置信息。static
:这是存放静态资源文件(如 CSS、JavaScript 文件)的目录。templates
:这是存放模板文件(如 Thymeleaf 模板)的目录。
-
pom.xml
(或build.gradle
):这是 Maven 或 Gradle 的构建文件,定义了项目的依赖和构建配置。
三、Spring Boot中的注解
Spring Boot 中有许多重要的注解,它们用于标记和配置类、方法以及各种组件。以下是一些常用的 Spring Boot 注解:
-
@SpringBootApplication:
这个注解用于标记 Spring Boot 应用的主启动类,通常与 main 方法所在的类一起使用。它包含了以下三个注解的功能:@Configuration、@EnableAutoConfiguration 和 @ComponentScan。 -
@Controller:
标记一个类作为 Spring MVC 控制器。 -
@RestController:
这个注解与@Controller类似,但其方法都返回 JSON 或 XML 响应,适合构建 RESTful 服务。 -
@Service:
用于标记服务层组件,通常用于定义业务逻辑。 -
@Repository:
标记数据访问组件,通常用于数据库访问相关的类。 -
@Component:
通用的组件注解,用于标记任意的 Spring 组件。 -
@Autowired:
用于自动装配 bean,可以标记在字段、构造器或方法上实现依赖注入。 -
@RequestMapping:
用于映射 HTTP 请求路径到控制器的处理方法。 -
@RequestParam:
用于将请求参数绑定到方法参数。 -
@Configuration:
用于定义配置类,通常搭配@Bean注解一起使用。 -
@Bean:
在@Configuration类中使用,用于声明一个 bean 对象,Spring 会将其加入到容器中管理。
这些注解是 Spring Boot 中常用的一部分,当然还有更多其他的注解用于处理事务、AOP、数据校验等。掌握这些注解对于理解和开发 Spring Boot 应用程序至关重要。
四、SpringBoot中的配置文件
在 Spring Boot 中,我们通常会使用一些特定的配置文件来配置应用程序的属性、数据源、日志等信息。以下是 Spring Boot 中常用的配置文件:
-
这是 Spring Boot 应用程序的主要配置文件,用于配置应用程序的一般性属性。你可以在其中设置服务器端口、数据库连接信息、日志级别、国际化等。application.properties
或application.yml
: -
application-{profile}.properties
或application-{profile}.yml
:{profile}
部分可以是开发环境(dev)、测试环境(test)或生产环境(prod)等不同的环境标识。这些文件可以包含特定环境下的配置信息,Spring Boot 会根据当前的激活的 profile 加载对应的配置文件。 -
这些文件用于外部配置,它们的优先级比bootstrap.properties
或bootstrap.yml
:application.properties
或application.yml
更高,通常用于配置服务发现、远程配置等功能。 -
可以针对不同的profile(如开发、测试、生产)创建不同的配置文件,以满足各个环境的需求。application-{profile}.properties
或application-{profile}.yml
:
这些配置文件可以包含各种属性,例如:
# application.properties 示例
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
logging.level.com.example=DEBUG
# application.yml 示例
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
logging:
level:
com.example: DEBUG
除了以上列出的配置文件之外,还可以使用额外的配置文件来配置安全信息、日志框架、缓存等。Spring Boot 通过这些配置文件能够灵活地适应不同的部署环境和需求,从而加快了应用程序的开发和部署过程。
五、Wed项目开发
-
自动配置:
Spring Boot 提供了大量的自动配置,包括但不限于嵌入式 Servlet 容器(如 Tomcat、Jetty)、MVC 框架、静态资源处理等,大大减少了开发人员的配置工作。 -
控制器(Controller):
使用@Controller、@RestController等注解来定义控制器,接收 HTTP 请求并返回相应结果。通过@RequestMapping、@GetMapping、@PostMapping等注解可以定义请求映射。 -
视图解析:
Spring Boot 支持多种模板引擎,如Thymeleaf、FreeMarker、Velocity等,开发者可以选择适合自己的模板引擎进行页面开发。 -
RESTful 风格:
Spring Boot 很好地支持 RESTful 风格的 Web 开发,通过@ResponseBody注解将结果直接以 JSON 或 XML 格式返回给客户端。 -
数据校验:
Spring Boot 提供了数据校验的支持,可以使用@Valid、@Validated等注解对请求参数进行校验,并返回相应的错误信息。 -
拦截器(Interceptor):
可以通过编写拦截器来对请求进行预处理和后处理,在不同阶段执行一些操作,如身份验证、日志记录等。 -
文件上传:
Spring Boot 提供了对文件上传的支持,可以通过@RequestParam注解来接收上传的文件,并进行相应的处理。 -
全局异常处理:
可以通过@ControllerAdvice、@ExceptionHandler等注解来统一处理异常,返回统一格式的错误信息。 -
静态资源处理:
Spring Boot 默认配置了静态资源目录,可以将静态资源放置在指定目录,Spring Boot 会自动处理这些静态资源的访问。
六、Spring Boot的安全管理
-
Spring Security:
Spring Boot 默认集成了 Spring Security,Spring Security 是针对 Java 应用程序的安全框架,提供了诸如认证、授权、攻击防护等功能。通过简单的配置,可以为应用程序添加基本的安全防护。 -
认证(Authentication):
Spring Security 支持多种认证方式,包括基于内存、数据库、LDAP 等的用户认证。开发者可以根据项目需求选择合适的认证方式,并进行相应的配置。 -
授权(Authorization):
通过配置角色、权限等信息,可以实现基于角色的访问控制,确保用户只能访问其被授权的资源。 -
表单登录:
Spring Security 提供了表单登录的支持,可以通过简单的配置实现登录页面、登录验证等功能。 -
OAuth2 集成:
Spring Boot 提供了集成 OAuth2 的支持,可以快速实现 OAuth2 授权服务器或资源服务器,用于实现第三方登录、API 访问控制等功能。 -
CSRF 防护:
Spring Security 提供了 CSRF(跨站请求伪造)防护功能,可以有效地防止 CSRF 攻击。 -
Session 管理:
可以通过配置 Spring Security 来管理用户的会话,包括会话超时时间、会话并发控制等。 -
安全事件监听:
可以监听安全相关的事件,如用户登录、注销等,实现自定义的安全行为。