springboot配置⽂件、注解、⾃动配置原理学习笔记(⼀)⼀、springboot的简单运⾏原理
⾸先,springboot⼀定有⽗项⽬,就是maven中的pom⽂件中引⼊的
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
toread是什么意思英语
</parent>
点开该⽗⽂件启动器,它主要是有很多依赖构成的
vba快速教程<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring‐boot‐dependencies</relativePath>
</parent>
他来真正管理Spring Boot应⽤⾥⾯的所有依赖版本;
它也叫做Spring Boot的版本仲裁中⼼,⾥边定义着很多该springboot⽗⽂件引⼊的依赖包的版本-properties;
以后我们导⼊依赖默认是不需要写版本;(没有在dependencies⾥⾯管理的依赖⾃然需要声明版本号)
很多springboot依赖的jar包根据应⽤的场合和功能被打包成了很多启动器,如web启动器,下边引⼊web启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器;帮我们导⼊了web模块正常运⾏所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成⼀个个的starters(启动器),只需要在项⽬⾥⾯引⼊这些starter
相关场景的所有依赖都会导⼊进来。要⽤什么功能就导⼊什么场景的启动器
主启动类
/**
*  @SpringBootApplication 来标注⼀个主程序类,说明这是⼀个Spring Boot应⽤
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应⽤启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
小程序购物车代码
}
properties是什么文件@SpringBootApplication: Spring Boot应⽤标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot
就应该运⾏这个类的main⽅法来启动SpringBoot应⽤;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@SpringBootConfiguration:Spring Boot的配置类;
标注在某个类上,表⽰这是⼀个Spring Boot的配置类;
@Configuration:配置类上来标注这个注解;
配置类 ----- 配置⽂件;配置类也是容器中的⼀个组件;@Component
@EnableAutoConfiguration:开启⾃动配置功能;
以前我们需要配置的东西,Spring Boot帮我们⾃动配置;@EnableAutoConfiguration告诉SpringBoot开启⾃
动配置功能;这样⾃动配置才能⽣效;
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:⾃动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导⼊⼀个组件;导⼊的组件由
有了⾃动配置类,免去了我们⼿动编写配置注⼊功能组件等的⼯作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为⾃动配置类导⼊到容器中,⾃动配置类就⽣效,帮我们进⾏⾃动配置⼯作;以前我们需要⾃⼰配置的东
西,⾃动配置类都帮我们;
J2EE的整体整合解决⽅案和⾃动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;
AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下⾯所有⼦包⾥⾯的所有组件扫描到Spring容器;
@Import(EnableAutoConfigurationImportSelector.class);
给容器中导⼊组件?
EnableAutoConfigurationImportSelector:导⼊哪些组件的选择器;
将所有需要导⼊的组件以全类名的⽅式返回;这些组件就会被添加到容器中;
会给容器中导⼊⾮常多的⾃动配置类(xxxAutoConfiguration);就是给容器中导⼊这个场景需要的所有组件,
并配置好这些组件;
⼆、springboot的配置⽂件
SpringBoot使⽤⼀个全局的配置⽂件,配置⽂件名是固定的;
·application.properties
·l
配置⽂件的作⽤:修改SpringBoot⾃动配置的默认值;SpringBoot在底层都给我们⾃动配置好;
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是⼀个标记语⾔
YAML isn't Markup Language:不是⼀个标记语⾔;
标记语⾔:
以前的配置⽂件;⼤多都使⽤的是 l⽂件;
YAML:以数据为中⼼,⽐json、xml等更适合做配置⽂件;
YAML:配置例⼦
server:
port: 8081 #不要使⽤tab键缩进,冒号后边加空格,属性和值⼤⼩写敏感
2、值的写法
字⾯量:普通的值(数字,字符串,布尔)
k: v:字⾯直接来写;
字符串默认不⽤加上单引号或者双引号;
"":双引号;不会转义字符串⾥⾯的特殊字符;特殊字符会作为本⾝想表⽰的意思
name: "zhangsan \n lisi":输出;zhangsan 换⾏ lisi
'':单引号;会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
对象、Map(属性和值)(键值对):
k: v:在下⼀⾏来写对象的属性和值的关系;注意缩进
对象还是k: v的⽅式
friends:
php全栈开发是什么意思lastName: zhangsan
age: 20
keypress事件怎么写
⾏内写法
friends: {lastName: zhangsan,age: 18}
数组(List、Set):
⽤- 值表⽰数组中的⼀个元素
pets:
‐ cat
‐ dog
‐ pig
⾏内写法
pets: [cat,dog,pig]
三、springboot配置⽂件的注⼊
person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
‐ lisi
‐ zhaoliu
dog:
name: ⼩狗
age: 12
javaBean:
/**
* 将配置⽂件中配置的每⼀个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置⽂件中相关的配置进⾏绑定; *      prefix = "person":配置⽂件中哪个下⾯的所有属性进⾏⼀⼀映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
我们可以导⼊配置⽂件处理器,以后编写配置就有提⽰了
<!‐‐导⼊配置⽂件处理器,配置⽂件进⾏绑定就会有提⽰‐‐>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐configuration‐processor</artifactId>
<optional>true</optional>
</dependency>
1、properties配置⽂件在idea中默认utf-8可能会乱码
调整
2、@Value获取值和@ConfigurationProperties获取值⽐较
配置⽂件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取⼀下配置⽂件中的某项值,使⽤@Value;
如果说,我们专门编写了⼀个javaBean来和配置⽂件进⾏映射,我们就直接使⽤@ConfigurationProperties;
3、配置⽂件注⼊值数据校验

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。