SpringBoot笔记

SpringBoot是什么?

  • Spring为应对互联网应用的要求(高可靠,高并发,负载均衡),推出了SpringBoot和微服务框架QSpringCloud,虽然SpringBoot为微服务而生,但多用于单体应用,SpringCloud完全建立在SpringBoot之上
  • SpringBoot是基于Spring的框架,目的是快速搭建Spring环境
  • SpringBoot让我们的框架更加便捷化,自动化,简单化
  • SpringMVC,Spring,MyBatis都可以集成到SpringBoot中
  • SpringBoot是主要基于注解和编程式配置的实现,在SpringBoot中推荐使用properties或yml文件作为他的配置文件SpringBoot的开发理念是习惯优于配置,SpringBoot默认不支持JSP,推荐使用HTML或模板引擎技术
  • SpringBoot中内置Web服务器,不需要搭建外部Web服务器,在SpringBoot开发中更加推荐搭建jar项目而非war项目
  • SpringBoot推出 Starter组件(启动器,每个Starter即为一个应用,它将相关配置、开发包都集成在Starter中),开发人员在应用中只要引入相关的Starter即可完成配置,从而让开发人员从复杂而繁琐的配置中解脱出来,实现项目的快速搭建

优点:

  • 开箱即用,提供各种默认配置来简化项目配置
  • 嵌入式容器简化web项目
  • 没有冗余代码生成和xml配置的要求

什么是微服务架构?

三层架构service架构

微服务架构概念

最核心的部分:自动装配

SpringBoot的使用

  1. 新建一个maven项目
  2. 在pom中引入SpringBoot相关配置
    • 引入springBoot父项目
   <!--引入springBoot父项目
       springboot对spring相关版本进行规定
	   也对spring基础配置进行了约定
     -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
    </parent>

添加spring-boot-starter-web依赖

引入后springboot支持web开发

里面包含了 Tomcat web服务器和Spring Boot本身等依赖

   <!--引入spring-boot-starter-web依赖 --> 
   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

编写SpringBoot的核心配置类(启动类)

spring启动类,核心配置类,必须在项目的跟包下,springBoot组件扫描器会自动扫描当前类所在包的以及其中的子包中的类

@SpringBootApplication:SpringBoot启动类注解,加入该注解后,运行该类的main函数,spring项目启动。

该注解包含三个注解

  • @EnanleAutoConfiguration:启动Spring Boot的自动配置机制
  • @ComponentScan:启动@Component扫描应用程序所在的软件包
  • @SpringBootConfiguration:配置类注解相当于spring的@Configuration注解
/**
 * spring启动类,核心配置类,必须在项目的根包下,Springboot组件扫描器会自动扫描当前类所在的包及其子包中的类
 * @SpringBootApplication:SpringBoot启动类注解,加入该注解后,运行该类的main函数,Spring项目启动
 */
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        //启动springboot环境
        SpringApplication.run(Application.class,args);
    }
}	
  1. 检测是否成功
F:\java17\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Intellij IDEA\lib\idea_rt.jar=58274:D:\Intellij IDEA\bin" -Dfile.encoding=UTF-8 -classpath F:\springBoot\target\classes;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.7.2\spring-boot-starter-web-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter\2.7.2\spring-boot-starter-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot\2.7.2\spring-boot-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.2\spring-boot-autoconfigure-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.7.2\spring-boot-starter-logging-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\HUAWEI\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\HUAWEI\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\HUAWEI\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\HUAWEI\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\HUAWEI\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\HUAWEI\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.7.2\spring-boot-starter-json-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.2\spring-boot-starter-tomcat-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.65\tomcat-embed-core-9.0.65.jar;C:\Users\HUAWEI\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.65\tomcat-embed-el-9.0.65.jar;C:\Users\HUAWEI\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.65\tomcat-embed-websocket-9.0.65.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-web\5.3.22\spring-web-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-webmvc\5.3.22\spring-webmvc-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar com.mk.controller.Application

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.2)

2023-04-05 14:48:01.746  INFO 16416 --- [           main] com.mk.controller.Application            : Starting Application using Java 17.0.4.1 on 马凯 with PID 16416 (F:\springBoot\target\classes started by HUAWEI in F:\springBoot)
2023-04-05 14:48:01.749  INFO 16416 --- [           main] com.mk.controller.Application            : No active profile set, falling back to 1 default profile: "default"
2023-04-05 14:48:02.798  INFO 16416 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-04-05 14:48:02.811  INFO 16416 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-04-05 14:48:02.811  INFO 16416 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
2023-04-05 14:48:02.923  INFO 16416 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-04-05 14:48:02.923  INFO 16416 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1107 ms
2023-04-05 14:48:03.341  INFO 16416 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-04-05 14:48:03.353  INFO 16416 --- [           main] com.mk.controller.Application            : Started Application in 2.04 seconds (JVM running for 2.832)
  1. 添加控制器类检测是否配置成功
@RestController
@RequestMapping("/demo01")
public class DemoControl {

    @RequestMapping("/demo01")
    public String Demo01(){
        return "index";
    }
}
  1. yml和properties配置文件添加SpringBoot项目配置
  • application.yml
# 服务端配置
server:
  port: 80 # 设置服务器端口号
  servlet:
    context-path: /springboot-project # 设置项目上下文路径(访问根路径)
# 配置日志
logging:
  level:
    root: info
    web:  trace
  • 或application.properties
# 设置服务器端口号
server.port=80
# 设置项目上下文路径(访问根路径)
server.servlet.context-path=/springboot-project
#配置日志
logging.level.root=info
logging.level.web=trace
  1. 编写网页静态网页

    位置,在resources文件夹下新建一个static文件夹,项目中的静态内容都添加到该文件夹下

yaml语法讲解:

person:
  name: heizi
  age: 3
  happy: false
  birth: 2002/07/03
  dog:
    name: xiaohei
    age: 3

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 112233
    driver-class-name: com.mysql.cj.jdbc.Driver

导入依赖在springboot.properties配置文件中可以提示属性等等

<dependency>
	<grouId>org.springframework.boot</grouId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
SpringBoot底层注解

@Conditional

条件装配满足Conditional指定的条件,则尽心组件注入

@ImportResource(“classpath:bean.xml”)

原生配置文件引入

配置绑定

@ConfigurationProperties(prefix = “属性名称”)

@EnableAutoConfiguration

@ConditionalOnBean(MultipartResolver.class) 文件上传解析器

​ 文件上传解析器 MultipartResolver

给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找寻

注:SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的配置优先

总结:SpringBoot先来加载所有的配置类

dev-tools工具

修改配置 ctrl+F9 更新静态页面,热更新部署重新启动

静态资源导入探究

1、在springboot,我们可以使用以下方式处理静态资源

  • webjars localhost:8080/webjars/
  • public, static, /**, resources localhost:8080/

2、优先级:resources > static (默认) > public

Thymeleaf模板引擎
  • 将html放到我们的templates目录下
public static final String DEFAULT_PAEFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";

SpringSecurity(安全)

SpringSecurity简介:

Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以卖现强大的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理!

  • WebSecurityConfigurerAdapter:自定义Security策略
  • AuthenticationManagerBuilder:自定义认证策略
  • EnableWebSecurity:开启WebSecurity模式
SpringSecurity两大核心功能
  1. 认证(Authentication):是建立一个主体的过程(“主体”一般指用户,设备或可以在应用程序中执行动作的其他系统),简单说是使用者通过账户名和密码登录的过程称为认证。
  2. 授权(Authenrization):是指一个主体是否允许在应用程序中执行某个动作的过程,简单说就是给某个用户指定某个功能的访问权限。
  • SpringSecurity通过过滤器实现请求拦截。实现认证,授权等操作。

Spring Security的两个主要目标是“认证”和"授权"(访问控制)。

SpringSecurity的基本使用
  1. 引入SpringBoot和SpringSecurity相关依赖
   <parent>
        <groupId>org.springframework.boot</groupId>
        <version>2.7.9</version>
        <artifactId>spring-boot-starter-parent</artifactId>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、创建springBoot启动类

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}
静态资源访问
  1. 配置类只有一个有参构造器
  2. 有参构造器所有参数都会从容器中获取

获取springMVC绑定的所有对象的值

资源处理的默认规则

resources:

​ add-mappings: false 禁用所有的静态资源规则

请求参数处理:

@xxxMapping

  • Rest风格支持(使用http请求方式动词来获取表示对资源的操作)
  • 以前: /user GET-获取用户 /deleteUser-删除用户 /updateUser更新用户 /saveUser保存用户
  • 现在: /user GET-获取用户 delete-删除用户 put-修改用户 POST-保存用户

核心Filter: HiddenHttpMethodFilter

  • 用法:表单method=post, 隐藏域_method=put

Rest原理(表单提交带上Rest参数请求)

  • 表单提交会带上_method=put

  • 请求过来会被HiddenHttpMethodFilter拦截

复杂参数:
  • Map、Model(Map、model里面的数据会被封装在request中的请求域中 request.setAttribute)Errors/BindingResult、RedirectAttributes(重定向携带数据),ServletResponse(response)、SessionStatus、UriComponmentsBuilder、ServletUriComponentsBuilder
Map<String,Object> map, Model model,HttpServletRequest request 都是可以给request域中存放数据
request.getAttribute();
错误处理机制
1、默认规则
  • 默认情况下,Spring Boot提供/error处理所有错误的映射
  • 对于机器客户端,它将生成JSON响应,其中包含错误;HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“whitelabel”错误视图,以HTML格式呈现相同的数据
  • 要对其进行自定义,添加view解析为error
  • 要完全替换默认行为,可以实现 Errorcontroller并注册该类型的Bean定义,或添加ErrorAttributes类型的组件以使用现有机制但替换其内容。
2、定制错误处理逻辑
  • 自定义错误页
  • error/404.html error /5xx.html
  • @ControllerAdvice+@ExceptionHandler处理异常
  • 实现HandlerExceptionResolver处理异常
Web原生组件注入(Servlet、Filter、Litener)
1、使用Servlet、Filter、Litener

使用两个注解进行配合

@ServletComponentScan(basePackages = "com.mk.admin"):指定原生Servlet组件都放在哪里
@WebSerlvet(urlPatterns = "/my");   效果:直接相应,没有Spring的拦截器

@WebListener

@WebFilter(urlPatterns = {"/css/*","images/*"})

@WebFilter

@WebFilter(urlPatterns = {"/css/*","images/*"})

类似 与ServletComponentScan搭配使用

2、使用RegistrationBean
    @Bean
    public ServletRegistrationBean myServlet(){
        MyServlet myServlet = new MyServlet();
        return new ServletRegistrationBean(myServlet,"/my");
    }

数据访问

1、SQL
2、数据源自动配置
  1. 自动配置的类
  • DataSourceAutoConfiguration:数据源的自动配置
  • DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置
  • JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以对数据库进行CRUD
  • XADataSourceAutoConfiguration:分布式事务相关的自动配置
整合Mybatis-Plus 完成CRUD
1、什么是Mybatis-Plus

Mybatis-Plus(简称MP) 是一个Mybatis的增强工具,在Mybatis中基础上只做增强,不做改变,为简化开发,提高效率而生。

2、整合Mybatis-Plus插件
3、在项目中导入依赖
<dependency>
    <groupId>com.mk</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>
4、自动配置
  • MybatisPlusAutoConfiguration配置类,MybatisPlusProperties配置项绑定。

  • SqlSessionFactory自动配置好。底层默认数据源

  • mapperLocations自动配置好。有默认值。classpath:/mapper/**/.xml;任何包路径都是配置文件

    任意路径下的所有xml都是sql映射文件,可以将sql映射文件放在mapper下

优点:
  • 只需要我们的Mapper继承BaseMapper就可以拥有CRUD的能力,存在的所有属性都应该在

  • Mapper可以继承BaseMapper()

  • mybatisPlus分页拦截器插件

  • mybatisPlus拦截

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值