1、Spring是如何简化Java开发的
为了降低Java开发的复杂性,Spring采用了以下4种关键策略:
1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;
2、通过IOC,依赖注入(DI)和面向接口实现松耦合;
3、基于切面(AOP)和惯例进行声明式编程;
4、通过切面和模版减少样式代码,RedisTemplate,xxxTemplate;
2、什么是SpringBoot
1、就是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置, you can “just run”,能迅速的开发web应用,几行代码开发一个http接口
2、同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用
3、Spring Boot 基于 Spring 开发,SSM打包方式是war包,SpringBoot打包方式是jar包,集了Tomcat在里面,方便微服务开发。
简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。
Spring Boot的主要优点:
为所有Spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求
3、yaml基础语法
说明:语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
字面量:普通的值 [ 数字,布尔值,字符串 ]
字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
k: v
1
注意:
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: Mario \n Kim" 输出 :Mario 换行 Kim
‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘Mario \n Kim’ 输出 :Mario \n Kim
//这个注解是将application.yaml中的person属性与Person类进行绑定 @ConfigurationProperties(prefix = "person")
加载指定的配置文件
**@PropertySource :**加载指定的配置文件;
@configurationProperties:默认从全局配置文件中获取值;
1、我们去在resources目录下新建一个person.properties文件
name=Mario
2、然后在我们的代码中指定加载person.properties文件
4、JSR303数据校验
导pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
写注解
JSR303数据校验–常用的注解如下:
@NotNull(message="名字不能为空") private String userName; @Max(value=120,message="年龄最大不能查过120") private int age; @Email(message="邮箱格式错误") private String email; 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Boolean 对象是否为 false 长度检查 @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 @Length(min=, max=) string is between min and max included. 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式的规则
5、多环境切换
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境;
properties 文件的多环境切换
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;
例如:
application-test.properties 代表测试环境配置
application-dev.properties 代表开发环境配置
但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;
我们需要通过一个配置来选择需要激活的环境:
#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试; #我们启动SpringBoot,就可以看到已经切换到dev下的配置了; spring.profiles.active=dev
yaml文件的多环境切换
server: port: 8081 #选择要激活那个环境块 spring: profiles: active: prod --- server: port: 8083 spring: profiles: dev #配置环境的名称 --- server: port: 8084 spring: profiles: prod #配置环境的名称
注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的
6、修改Spring Boot启动的banner和网页icon
修改banner
在resources目录下新建一个banner.txt
在https://www.bootschool.net/ascii这个网站上找个图案,贴在banner.txt文件中
banner.txt
──────────────███████──███████ ──────────████▓▓▓▓▓▓████░░░░░██ ────────██▓▓▓▓▓▓▓▓▓▓▓▓██░░░░░░██ ──────██▓▓▓▓▓▓████████████░░░░██ ────██▓▓▓▓▓▓████████████████░██ ────██▓▓████░░░░░░░░░░░░██████ ──████████░░░░░░██░░██░░██▓▓▓▓██ ──██░░████░░░░░░██░░██░░██▓▓▓▓██ ██░░░░██████░░░░░░░░░░░░░░██▓▓██ ██░░░░░░██░░░░██░░░░░░░░░░██▓▓██ ──██░░░░░░░░░███████░░░░██████ ────████░░░░░░░███████████▓▓██ ──────██████░░░░░░░░░░██▓▓▓▓██ ────██▓▓▓▓██████████████▓▓██ ──██▓▓▓▓▓▓▓▓████░░░░░░████ ████▓▓▓▓▓▓▓▓██░░░░░░░░░░██ ████▓▓▓▓▓▓▓▓██░░░░░░░░░░██ ██████▓▓▓▓▓▓▓▓██░░░░░░████████ ──██████▓▓▓▓▓▓████████████████ ────██████████████████████▓▓▓▓██ ──██▓▓▓▓████████████████▓▓▓▓▓▓██ ████▓▓██████████████████▓▓▓▓▓▓██ ██▓▓▓▓██████████████████▓▓▓▓▓▓██ ██▓▓▓▓██████████ ██▓▓▓▓████ ██▓▓▓▓████ ██████
修改网页icon
设置步骤:
将选好的图片改为 .ioc 为后缀,一般命名 favicon.ico,并将其放在 resources 文件夹下的 static 文件夹下(如果没有可以自己创建)。
在首页 index.html 中设置
<link rel="icon" href="/favicon.ico">
注:测试时Ctrl + F5 强制清理一下浏览器的缓存记录
<!--thymeleaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
//在 templates 目录下的所有页面,只能通过controller来访问,因为templates目录是受保护的,但是在static目录下就可以直接访问 //需要引入pom依赖的 Thymeleaf模板引擎 @Controller public class IndexController { @RequestMapping("/index") public String index(){ return "index"; } }
访问http://localhost:8080/index就可以看到icon
7、常用注解的说明
@Select
==> @Select注解的目的是为了取代xml中的select标签,只作用于方法上面。
(1)@Select注解只能修饰方法
(2)@Select注解的值是字符数组。
@ResponseBody
返回 ==> 字符串+结果
注解 @ResponseBody,使用在控制层(controller)的方法上。
当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。
作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。
@RequestBody
主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),所以只能发送POST请求
GET方式无请求体,所以使用**@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交**
在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam
@RestController
@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping、@RequestMapping
@GetMapping
@GetMapping(“users”) 等价于@RequestMapping(value=“/users”,method=RequestMethod.GET)
@PutMapping: 和PostMapping作用等同,都是用来向服务器提交信息。
如果是添加信息,倾向于用@PostMapping,
如果是更新信息,倾向于用@PutMapping。两者差别不是很明显。
8、代码托管
https://gitee.com/jinyang-jy/shiro.git
–end–