什么是自动配置?
pring Boot根据我们的开发行为自动猜测并准备使用的bean,只要开发者导入相关的类,Spring Boot就能自动加载可能需要用到的bean,无需开发者手动配置,从而简化了开发流程。
自动配置的意义就是加速开发效率,将开发者使用某种技术时需要使用的bean根据情况提前加载好,实现自动配置的效果。当然,开发者有可能需要提供必要的参数,比如你要用mysql技术,导入了mysql的坐标,springboot就知道了你要做数据库操作,一系列的数据库操作相关的bean都给你提前声明好,但是你要告诉springboot你到底用哪一个数据库,像什么IP地址啊,端口啊,你不告诉spirngboot,springboot就无法帮你把自动配置相关的工作做完。
具体:如何实现如果我在配置文件中配置了就使用配置文件里的内容,如果没有则加载默认的。简单的来看是以下demo代码演示的
整体demo模拟效果为如果我在配置文件中配置了cat的名字跟年龄则用配置文件内的,否则默认的名字为jerry,年龄为18.
先通过yml配置文件,设置bean运行需要使用的配置信息。
cat:
name: tom
age: 16
然后定义一个封装属性的专用类,加载配置属性,读取对应前缀相关的属性值。
@Data
@ConfigurationProperties(prefix = "cat")
public class CatAutoProperties {
private String name;
private Integer age;
}
注意写到这里的时候会报错,因为 @ConfigurationProperties只能加载由spring容器管理的bean,在这里我并没有添加@Component注解交给容器管理。
定义我们要使用bean如下:
@Data
@EnableConfigurationProperties(CatAutoProperties.class)
public class Cat {
private String name;
private Integer age;
public Cat(CatAutoProperties catAutoProperties) {
if (catAutoProperties!=null&&catAutoProperties.getAge()!=null){
age=catAutoProperties.getAge();
}else {
age=88;
}
if (catAutoProperties!=null&&catAutoProperties.getName()!=null){
name=catAutoProperties.getName();
}else {
name="jerry";
}
}
}
@EnableConfigurationProperties(CatAutoProperties.class)这个意思是将CatAutoProperties加载为bean。@ConfigurationProperties读取配置文件只能是bean自动读取 (解决前面的报错误)
测试主程序为:
@SpringBootApplication
@Import(Cat.class)
public class SsmpApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(SsmpApplication.class, args);
Cat bean = applicationContext.getBean(Cat.class);
System.out.println(bean);
}
}
修改配置文件为如下:
cat:
name: tom
# age: 16
再次运行结果如下:
总结:
阶段一:准备阶段
阶段二:加载阶段
spring.factories文件是Spring Boot自动配置的核心文件之一,它的作用是将各种自动配置类与对应的配置类集中在一起,方便Spring Boot自动装配。在Spring Boot启动时,它会扫描classpath下所有的spring.factories文件,加载其中的自动配置类,并将它们注入到Spring ApplicationContext中,使得项目能够自动运行。该文件的格式为键值对,键是自动配置类的全限定名,值是该自动配置类所对应的配置类的全限定名。
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.itheima.bean.CartoonCatAndMouse
这个文件就做了一件事,通过这种配置的方式加载了指定的类。转了一圈,就是个普通的bean的加载,和最初使用xml格式加载bean几乎没有区别
总结:
自动配置是指Spring Boot根据开发者的行为和导入的类,自动推断和准备需要使用的bean。开发者只需导入相关的类,Spring Boot就能自动加载可能需要用到的bean,无需手动配置,从而简化了开发流程。
自动配置的意义在于加速开发效率,它能够根据开发者的行为提前加载好所需的bean,从而避免了繁琐的手动配置过程。当开发者需要提供特定的参数时,比如使用特定的数据库技术,导入了相应的数据库坐标,Spring Boot会预先声明一系列与数据库操作相关的bean。但是开发者仍需要告知Spring Boot具体使用的是哪种数据库,比如IP地址、端口等信息,如果开发者没有提供这些信息,Spring Boot就无法完全自动完成相关的配置工作。
在实现自动配置中,通常会涉及配置文件与默认配置的处理。开发者可以在配置文件中设置特定的参数,如果配置文件中存在相关设置,则使用配置文件中的内容;否则加载默认的设置。这样做可以实现灵活的配置管理,既能满足一般情况下的需求,又能够方便地根据具体情况进行定制化配置。
总的来说,自动配置的核心思想是通过提前收集开发者的习惯和常用技术,以及相应的参数设置,然后在Spring Boot启动时根据这些信息自动加载和配置所需的bean,从而简化开发流程,提高开发效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。