SpringBoot2.0


尚硅谷视频地址: https://www.bilibili.com/video/BV19K4y1L7MT
尚硅谷笔记地址: https://www.yuque.com/atguigu/springboot

容器功能

组件添加

@Configuration

1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
2、配置类本身也是组件,会被添加到容器中
3、proxyBeanMethods:代理bean的方法

  • Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
  • Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】

4、最佳实战:

  • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
  • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

@Bean、@Component、@Controller、@Service、@Repository(略)

@Import

给容器中自动根据类型创建的组件、默认组件的名字就是全类名

@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

@ImportResource

原生xml配置文件引入,例如:@ImportResource("classpath:beans.xml")

@ConfigurationProperties

java bean的属性和配置文件的属性绑定,例如:@ConfigurationProperties(prefix = "mycar")
注意:只有把组件放在容器中才有意义!有以下两种方法:

  • 给类添加@Component等注解,将类添加到容器中
  • 使用@EnableConfigurationProperties明确指定要开启哪个类和配置文件的绑定功能

@EnableConfigurationProperties

例如:@EnableConfigurationProperties(Car.class)主要有以下功能:

  • 开启Car配置绑定功能
  • 把这个Car这个组件自动注册到容器中

@SpringBootApplication

该注解是组合注解,由以下三个注解组成:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

1、@SpringBootConfiguration:是@Configuration
2、@ComponentScan:指定扫描哪些
3、@EnableAutoConfiguration:包含两个注解:

  • @AutoConfigurationPackage,该注解包含一个注解:
    • @Import(AutoConfigurationPackages.Registrar.class),批量注册组件,指定了默认的包规则
  • @Import(AutoConfigurationImportSelector.class):默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件对应的组件,然后按需加载

开发技巧

lombok

1、引入依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2、安装idea插件:lombok
3、使用:

  • 简化JavaBean开发:@NoArgsConstructor、@AllArgsConstructor、@Data、@ToString、@EqualsAndHashCode
  • 简化日志开发:@Slf4j

dev-tools

1、pom:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

2、项目或者页面修改以后:Ctrl+F9;

Spring Initailize(略)

项目初始化向导

spring-boot-configuration-processor

自定义的类和配置文件绑定一般没有提示,引入该依赖,就有提示了

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

不把它打包在最终的jar包中,它只是一个协助开发的

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

核心功能

yaml

  • YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

  • 非常适合用来做以数据为中心的配置文件

基本使用:
1、字面量:单个的、不可再分的值。date、boolean、string、number、null

k: v

2、对象:键值对的集合。map、hash、set、object

#行内写法:  
k: {k1:v1,k2:v2,k3:v3}

#或
k: 
  k1: v1
  k2: v2
  k3: v3

3、数组:一组按次序排列的值。array、list、queue

#行内写法:  
k: [v1,v2,v3]

#或者
k:
 - v1
 - v2
 - v3

web开发

静态资源

只要静态资源放在类路径下:

  • /static
  • /public
  • /resources
  • /META-INF/resources

访问 : 当前项目根路径/ + 静态资源名
原理: 静态映射/**。

请求进来,先去找Controller看能不能处理(能处理,就会直接处理)。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

改变默认的静态资源路径

spring:
  mvc:
    static-path-pattern: /res/** #静态资源访问的前缀
  resources:
    static-locations: [classpath:/haha/] #指定静态资源目录,一旦指定,默认的将失效
欢迎页

静态资源路径下 index.html

  • 可以配置静态资源路径
  • 如果配置静态资源访问前缀,将导致 index.html不能被默认访问
自定义 Favicon

favicon.ico 放在静态资源目录下即可。

rest使用与原理

@xxxMapping;

Rest风格支持(使用HTTP请求方式动词来表示对资源的操作),同样是/user请求,通过设置请求方法 来映射不同的controller处理,例如:

  • GET-获取用户
  • DELETE-删除用户
  • PUT-修改用户
  • POST-保存用户

默认只能get、post,想要发送其他请求方式?

  • 核心Filter:HiddenHttpMethodFilter
  • 用法: 表单method=post,隐藏域 _method=put
  • SpringBoot中需手动开启(不同版本有差异),例如我的matchIfMissing = false在这里插入图片描述
注解
@PathVariable

获取路径变量 ,例如,id是路径变量@GetMapping(“/{id}”)

  • 单独获取参数,@PathVariable(“id”) Integer id
  • 获取所有路径变量,@PathVariable Map<String,String> pv
@RequestHeader

获取请求头信息

  • 单个:@RequestHeader(“User-Agent”) String userAgent
  • 所有:@RequestHeader Map<String,String> header
@RequestParam

请求参数

  • 单个:
    • @RequestParam(“age”) Integer age
    • @RequestParam(“inters”) List inters
  • 所有:@RequestParam Map<String,String> params
@CookieValue

获取cookie

  • 只获取cookie的值:@CookieValue(“_ga”) String _ga,
  • 获取完整信息:@CookieValue(“_ga”) Cookie cookie
@RequestBody

用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)

@RequestAttribute

取出请求域中的属性,类似request.getAttribute();

@MatrixVariable

原理:

  • 在org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#configurePathMatch配置了在这里插入图片描述
  • 观察到默认直接删除分号及之后的内容 在这里插入图片描述

配置:

  • 只需自己配置一个,不忽略分号即可使用矩阵变量,配置如下:
    UrlPathHelper urlPathHelper = new UrlPathHelper();
    urlPathHelper.setRemoveSemicolonContent(false);//分号截断设置为false
    configurer.setUrlPathHelper(urlPathHelper);
    
  • 并加入到容器,例如:
    在这里插入图片描述

使用:

  • pathVar指定是哪个路径变量下的矩阵变量,可不写
  • value指定矩阵变量的名字,变量名和矩阵变量名一致可不写
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值