1.@SpringBootApplication标注的类是是主配置类,在主配置类的所在包下的所有子包的所有组件都会被扫描到Spring容器中,完成自动配置。
其意思就是,若有其他类在配置类所在包之外,则其不会完成自动配置。若运行,则会出错。
代码:
@SpringBootApplication
public class SprintBoot02ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SprintBoot02ConfigApplication.class, args);
}
}
理解:其对主类进行注解,即会对整个项目中(主类所在包下)的组件扫描进spring容器中,完成自动配置。
在这个注解中,依赖了其他注解。其自动导入的注解是:@EnableAutoConfiguration
在 @EnableAutoConfiguration中,有注解@import等等。以后再详细探究。总之它就是这样一层层封装上来的
疑点:Spring容器是什么。组件是什么。
2.配置文件
spring boot中有配置文件:.properties和yml。
其文件下的static文件保存所有的静态资源:js,css,image;templates:保存所有的模板页面(不支持JSP)但可以使用模板引擎
自带的是properties,但可自创yml文件,这两种文件都可以对项目进行配置。
/**
*使用component使组件加入容器中
*/
@Component
/**
* 使用该注解使用配置文件注入值
*/
@ConfigurationProperties(prefix = "person")
public class Person {
/**
* bean将person加入
* <bean class="Person">
* <property name="LastName" value="?"></property>
* </bean>
*
* @value 这个注解也可以进行配置,但必须一个值一个值的配置,且不允许松散语法绑定(严格规格输入要求),但它支持表达式运算,不支持校验
* @configuraProperties 这个注解对值进行批量配置,其参数prefix ="" 为配置文件中的某一项,支持松散语法,不支持表达式运算,且支持校验
* 如果只是在某一个业务中使用其一个配置值,则用@value 否则用@configuraproperties
* 语法 @value("${duixiang}")
*/
除了使用@ConfigurationPropertie自动配置文件之外,还需要使用@Component将组件扫描进Spring容器中
以上注释中有@value和@ConfigurationProperties的区别用途
问题:YAML语法
乱码处理:进入File/Setting/editor/FileEncoding 进行更改
@PropertySource注解和@ImportResource
@ConfigurationProperties注解只能读取全局配置文件(application)【我们并不会将所有配置放在一个文件中】
当使用其他的配置文件时,我们需要@PropertySource注解加载对应配置文件[properties配置文件]。
//@ImportResource导入spring的配置文件(自己写的配置文件)[xml配置文件]
3.@Configuration和@Bean
springboot下使用全注解的方式来实现组件的添加。
@Configuration指明当前类是一个配置类,替代了spring配置文件
@Bean注解:放在方法前,将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名。
4.占位符
5.Profile功能:多环境切换(不同配置文件)
1.多profile文件:在编写主配置文件时,文件名可以带上profile标识
application-{profile}.properties/yml
//例如
application-dev.properties
2.yml作为配置文件:使用多文档的方式激活
使用 --- 将yml文件分成多个文档快:
server:
port:8080//默认
//激活哪一种环境配置
spring:
prfiles:
active:dev
---
server:
port:8081
profiles:dev//设置生效环境
---
server:
prot:8083
profiles:prod//设置生效环境
3.激活
在默认使用的application.properties中激活指定的profile:spring.profiles.active=dev
4优先级关系:由高到低,高可覆盖低的
-file:./config/
-file:./
-classpath:/config
-classpathL./
6.外部配置文件
外部配置加载顺序可查询官方文档。(外部配置优先级大于内部)
1.可在命令行更改配置项。配置项=值
2.使用外部配置文件
7.配置原理
可以看springboot的官方文档,查询配置文件能配置的属性。
**自动配置原理**
之后再补充吧。。
@Conditional派生注解
判断配置是否生效
我们可以通过配置 yml文件:
debug=true 让控制台打印自动配置报告,这样我们就可以知道哪些配置类生效了