Springboot 2.5
因 springboot 在2.4 以后将 .RELEASE 后缀就移除了,所以后续都是用2.5.0版本
2.3.x.RELEASE 2.4.x 数字命令
Spring Boot是由`Pivotal团队提供的全新框架`,其设计目的是用来`简化Spring应用的 初始搭建以及开发过程`。该框架使用了`特定的方式来进行配置`,从而使开发人员不 再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。
Spring Boot 全新框架 作用: 简化spring应用初始搭建和开发过程
如何简化: 开发人员使用springboot只要基于特定方式进行配置 简化spring使用
SpringBoot 微框架: 5分钟 完成之前ssm中环境
springboot(微框架) = springmvc(控制器) + spring core(项目管理)
springboot 优势
创建完整的独立的Spring应用程序
spring springmvc 只有一个容器`- 嵌入的Tomcat,无需部署WAR文件` springboot 内嵌tomcat 应用跑在内嵌服务器上;
简化Maven配置,自动配置Spring Springmvc,没有XML配置
几个依赖- 用来springboot spring应用在无xml
springboot 默认约定
- springboot 项目中必须在src/main/resources 中放入 application.yml(.properties)核心配置文件 名字必须为:application
- springboot 项目中必须在src/main/java中所有子包之外构建全局入口类型,xxApplication,入口类一个springboot项目只能有一个
环境搭建
环境要求
1. system Requirements
jdk 1.8 +
maven 3.2 +
spring framework 5.x +
2. servletcontainers
tomcat 9.0 +
3. 开发工具
idea 2018 +
所需jar包依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置文件
项目中 src/main/resources/application.yml
编写启动入口类
@SpringBootApplication
public class SpringbootDay1Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootDay1Application.class, args);
}
}
修改内嵌服务器端口以及访问路径
server:
servlet:
context-path: /dev
port: 8081
相关注解
# 入口类 SpringApplication
- SpringBootApplication: 全局入口类 有且只能有一个
- mian 函数参数可以在启动时指定jvm参数覆盖默认配置
# @SpringBootApplication 注解等价于:
- @SpringBootConfiguration 标识这是一个springboot的配置类,默认自定配置Spring环境
- @EnableAutoConfiguration 自动与项目中集成的第三方技术进行集成
- @ComponentScan 扫描入口类所在子包以及子包后代包中注解
配置文件
配置文件可以区分两种;
一种是在一个 yml里面区分多个环境,所有的配置都写到一起,最终使用一个默认的配置指定是哪个环节;
再一种就是分为多个配置文件 ,不同配置写到不同的文件中
合并起来yml
spring:
profiles:
active: dev # 默认激活开发环境配置
# 默认配置
server:
port: 8080
# 开发环境配置
---
spring:
profiles: dev
server:
port: 8081
# 生产环境配置
---
spring:
profiles: prod
server:
port: 80
分开编写
以 application开头-xx.yml
- application-dev.yml
- application-prd.yml
- application.yml 这个文件不可缺,然后再该文件指定激活哪个配置,使用 spring.profiles.active = dev springboot 会自动将前缀 application-和 .yml后缀拼接起来
- 有时候我们想在启动的时候才指定怎么办
- –spring.profiles.active=prd
- jar 启动方式 java -jar spring.jar --spring.profiles.active=prd 即可
当然还有一种方式利用maven功能
在配置文件build中定义一个参数,然后打包的时候,激活的地方填写 @build的参数@即可
工厂创建对象
我们一般直接创建单个对象或者多个bean对象,单个对象利用 @Service 或者 @Component 等,多个的话使用 @Bean方式
创建单个对象
在springboot中可以管理单个对象可以直接使用spring框架中注解形式创建。
- @Component 创建对象
- @Controller 用来创建控制器对象,对应的请求url方法
- @Service 用来创建业务层对象
- @Repository 用来创建dao对象,一般用的少,我们都是使用mybatis 生成对应的代理类
- 以上注解都有value属性,value属性用来指定工厂中对象名称
@Service
public class DemoServiceImpl implements UserService{
//doing....
}
创建多个对象
如何在springboot中像spring框架一样通过xml创建多个对象,在SpringBoot中也提供了相同注解如**
@Configuration + @Bean
**注解进行创建
- @Configuration 代表这是一个spring的配置类相当于Spring.xml配置文件
- @Bean 用来在工厂中创建这个 @Bean 注解标识的对象
- 默认使用@Bean创建对象在工厂中唯一标识为方法名称
- 修改在工厂中对象标识可以在使用**@Bean(“工厂中名字”)指定一个名字**
@Configuration
public class Beans {
@Bean
public Calendar calendar(){
return Calendar.getInstance();
}
}
# 注意:
1.@Configuration 用来在工厂中一次性创建多个对象
2.@Component 用来创建单个对象
属性注入
- @Value 属性注入
- @ConfigurationProperties 对象注入
基本属性注入 @Value
name: 小王
age: 33
price: 10.11
sex: true
birthday: 2021/12/12
arrs: 123,234,456
lists: xiaowang,xiaoli,zhangsan,lisi
maps2: "{'aa':'123','bb':'456'}"
// 基本类型+ string 类型 + 日期
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@Value("${sex}")
private Boolean sex;
@Value("${price}")
private Double price;
@Value("${birthday}")
private Date birthday;
// 数组
@Value("${arrs}")
private String[] arrs;
// list数据
@Value("${lists}")
private List<String> lists;
// map json 格式
@Value("#{${maps2}}")
private Map<String,String> maps2;
@RequestMapping("/valueInjection")
public String valueInjection() {
System.out.println("name="+name);
System.out.println("age="+age);
System.out.println("sex="+sex);
System.out.println("price="+price);
System.out.println("birthday="+birthday);
System.out.println("arrs="+arrs);
System.out.println("lists="+lists);
System.out.println("maps2="+maps2);
return "读取成功!";
}
对象注入
注意: 这种方式必须提供SET方法
如果直接使用会提示这个 ,这个时候我们需要导入一个依赖,就会消失,并且在yml 中编写也有提示了;
1. 引入依赖注入元数据
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
**2. 编写配置文件 **
user:
name: 隔壁老王
age: 45
birthday: 1975/11/11
bobbys:
- 足球
- java
- python
address:
company: 上海市 浦东新区
family: 湖北省 武汉市 xx 区
**3. 实体类编写,记得一定要有set方法 **
@ConfigurationProperties(prefix = “user”) prefix = “前缀” 跟配置文件前缀对应
@Component
@ConfigurationProperties(prefix = "user")
public class UserPropertiesBean {
private String name;
private Integer age;
private Date birthday;
private Set<String> bobbys;
private Map<String,String> address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Set<String> getBobbys() {
return bobbys;
}
public void setBobbys(Set<String> bobbys) {
this.bobbys = bobbys;
}
public Map<String, String> getAddress() {
return address;
}
public void setAddress(Map<String, String> address) {
this.address = address;
}
}
**4. 测试controller **
@Autowired
private UserPropertiesBean userPropertiesBean;
/**
* 属性注入
* @return
*/
@RequestMapping("/propertiesInjection")
public UserPropertiesBean propertiesInjection() {
return userPropertiesBean;
}
–效果–