启动器
主程序类(入口类)
========================================================================
//来标注一个主程序类,说明这是一个springBoot应用程序
@SpringBootApplication
public class Hello {
public static void main(String[] args)
{
//spring应用启动起来
SpringApplication.run(Hello.class,args);
}
}
下面是@SpringBootApplication个注解的内部信息:
下面解释这里面的组合注解的意思:
注意: springboot的包扫描底层原理
底层的@import注解,会帮我们导入非常多的配置类,例如:实现aop功能的配置类,实现批处理的…
使用Spring Initializer快速创建SpringBoot项目
===================================================================================================
在控制类上可以使用@RestController替换@ResponseBody和@Controller注解
//这个类的所有方法返回的数据直接写给浏览器(如果是对象转为json数据)
/*@ResponseBody
@Controller*/
@RestController//替换上面两个注解
public class helloController {
@RequestMapping(“/hello”)
public String hello()
{
return “大忽悠”;
}
}
配置文件
===================================================================
SpringBoot全局配置文件的名字是固定的application,但是格式可以是properties或者yml(yaml)
yaml配置文件
YAML基本语法
1.基本语法
2.值的写法
字面量: 普通的值(数组,字符串,布尔)
对象,Map(属性和值)(键值对)
数组(List,Set)
YAML配置文件注入组件
yaml:
server:
port: 8081
person:
name: 大忽悠
age: 18
boss: false
birth: 2002/1/2
maps: {k1: v1,k2: 12}
lists:
- 历史
- 语文
- 数学
dog:
name: 小狗
age: 1
将配置文件中配置的每一个属性的值,映射到这个组件中;
@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中的相关的配置进行绑定
prefix = “person”:配置文件中哪个下面的所有属性进行一一映射
只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能
peo类:
/*
- 将配置文件中配置的每一个属性的值,映射到这个组件中
- @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中的相关的配置进行绑定
- prefix = “person”:配置文件中哪个下面的所有属性进行一一映射
- 只有这个组件是容器中的组件,才能使用容器中提供的@ConfigurationProperties功能
- */
@Controller
@ConfigurationProperties(prefix = “person”)
public class peo
{
private String name;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List lists;
private Dog dog;
@Override
public String toString() {
return “peo{” +
“name='” + name + ‘’’ +
“, age=” + age +
“, boss=” + boss +
“, birth=” + birth +
“, maps=” + maps +
“, lists=” + lists +
“, dog=” + dog +
‘}’;
}
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 Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List getLists() {
return lists;
}
public void setLists(List lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
导入配置文件处理器的依赖,这样对应组件和配置文件进行绑定就会有提示,且打包时排除对应的依赖
springboot的注释配置处理器没有在类路径下找到,需要导入配置文件处理器的依赖
org.springframework.boot
spring-boot-configuration-processor
true
org.springframework.boot
spring-boot-maven-plugin
org.springframework.boot
spring-boot-configuration-processor
SpringBoot单元测试刚才的注入结果
如果要完成对应类属性的注入,那么对应的类要提供set方法
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Test
void contextLoads()
{
System.out.println(people);
}
}
properties配置文件编码问题
显示结果:(出现乱码问题)===》原因:idea使用的是UTF-8 而properties文件一般都是ASCALL
#配置person的值
person.name=大忽悠
person.age=18
person.birth=2002/1/2
person.maps.k1=v1
person.maps.k2=14
person.lists=1,2,3
person.dog.name=dog
person.dog.age=2
解决方案如下
结果
IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决
IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决
@Value注解和 @ConfigurationProperties的区别
@Value注解使用演示:
@Controller
public class peo
{
/*
•
• */
@Value(“${person.name}”)
private String name;
@Value(“#{11*2}”)
private Integer age;
@Value(“true”)
private Boolean boss;
配置文件yml还是properties他们都可以获取到值
如果我们只是需要在业务逻辑中获取一下配置文件中的值,可以使用@Value注解
如果说我们编写了一个类和配置文件进行映射,我们就直接使用 @ConfigurationProperties
对于是否支持JSR303校验的演示
SpringBoot @Vaild注解拦截不生效的问题解决
不要单独引入包,可能引入的包不全导致不生效!
直接引入SpringBoot 的starter
org.springframework.boot
spring-boot-starter-validation
RELEASE
compile
注解@ConfigurationProperties 和 @Value 对比,详细篇
注解@ConfigurationProperties 和 @Value 对比
@ConfigurationProperties(prefix = “person”)默认从全局配置文件中获取值,全局配置文件的名字是固定的application
================================================================================================================================================
@PropertySource加载指定配置文件===>加载类路径下peo.properties,并绑定到对象中
@PropertySource(value={“classpath:peo.properties”})
@Controller
@ConfigurationProperties(prefix = “person”)
public class peo
{
private String name;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List lists;
private Dog dog;
要注意Spring Boot配置文件的加载顺序,如果全局配置文件.properties, .yaml和peo.properties中都符合前缀匹配条件,那么先执行全局配置文件
全局配置文件中.properties优先级高于.yaml
全局配置文件都不满足,才会执行peo.properties
@PropertySource 注解的使用详情看下面这两篇文章
@PropertySource 注解的使用
@PropertySource和@ConfigurationProperties
Spring Boot配置文件的加载顺序详情看下面这篇文章
【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)
@ImportResource:导入Spring的配置文件,让配置文件中的内容生效
========================================================================================================
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>
springBoot单元测试:
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Autowired //注入IOC容器
ApplicationContext ioc;
@Test
void contextLoads()
{
//判断容器中是否由pig
boolean ret = ioc.containsBean(“pig”);
System.out.println(ret);
}
}
如果此时不在配置类上导入我们写的spring的配置文件,那么结果为false,即容器中没有保存对应的Bean
如果写了,如下面这样:
@ImportResource(locations = {“classpath:spring.xml”})
@SpringBootApplication
public class SpringBootQuickStartOneApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootQuickStartOneApplication.class, args);
}
}
SpringBoot推荐给容器中添加组件的方式,推荐使用全注解的方式
=================================================================================================
配置类=====Spring配置文件
@Configuration: 指明当前类是一个配置类,替代之前Spring配置文件
@Bean(“此处可以设置id名”):将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名(不是首字母小写)
配置类:
@Configuration//指明当前类是一个配置类,替代之前Spring配置文件
public class MyConfig
{
@Bean(“pig”)//将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名(不是首字母小写)
public pig HelloPig()
{
return new pig();
}
}
单元测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootQuickStartOneApplicationTests {
@Autowired
peo people;
@Autowired //注入IOC容器
ApplicationContext ioc;
@Test
void contextLoads()
{
//判断容器中是否由pig
boolean ret = ioc.containsBean(“HelloPig”);
System.out.println(ret);
}
}
配置文件中的占位符
========================================================================
Propfile多环境支持
============================================================================
多profile文件
在application.properties主配置文件中激活不同环境的配置文件