文章目录
- 容器功能
- 组件添加
- @Configuration
- @Bean、@Component、@Controller、@Service、@Repository(略)
- @Import
- @Conditional
- @ImportResource
- @ConfigurationProperties
- @EnableConfigurationProperties
- @SpringBootApplication
- 开发技巧
- lombok
- dev-tools
- Spring Initailize(略)
- spring-boot-configuration-processor
- 核心功能
- yaml
- web开发
- 静态资源
- 欢迎页
- 自定义 Favicon
- rest使用与原理
- 注解
- @PathVariable
- @RequestHeader
- @RequestParam
- @CookieValue
- @RequestBody
- @RequestAttribute
- @MatrixVariable
容器功能
组件添加
@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指定矩阵变量的名字,变量名和矩阵变量名一致可不写