2022-09-20Java00
请注意,本文编写于 192 天前,最后修改于 192 天前,其中某些信息可能已经过时。

springboot自动配置:

理解3个问题:

1.达到什么条件 2.创建什么bean 3.创建的bean配置是什么

以EmbeddedWebServerFactoryCustomizerAutoConfiguration为例子

@Configuration(proxyBeanMethods = false)  
@ConditionalOnWebApplication    				//此处满足条件1  达到什么条件
@EnableConfigurationProperties(ServerProperties.class)   // 此处满足条件3 创建bean的配置是什么
public class EmbeddedWebServerFactoryCustomizerAutoConfiguration {

	/**
	 * Nested configuration if Tomcat is being used.
	 */
	@Configuration(proxyBeanMethods = false)	//此处满足条件2 创建什么bean 
	@ConditionalOnClass({ Tomcat.class, UpgradeProtocol.class })//此处满足条件1  达到什么条件
	public static class TomcatWebServerFactoryCustomizerConfiguration {

		@Bean
		public TomcatWebServerFactoryCustomizer tomcatWebServerFactoryCustomizer(Environment environment,
				ServerProperties serverProperties) {
			return new TomcatWebServerFactoryCustomizer(environment, serverProperties);
		}

	}

简单的例子 无条件创建一个bean 只要满足问题2和3

2.创建什么bean 3.创建的bean配置是什么

@Configuration  //创建什么bean 
public class DemoConfiguration {

    @Bean  //创建的bean的配置是什么
    public void object() {
        return new Obejct();
    }

}

如此得出结论

1 @ConditionOnClass注解的类要满足条件才会创建bean ,可以解决需要什么条件的问题, 当然也可以不设置条件 2 @Configuration 注解的类,可以解决创建什么bean的问题

那最后一个问题呢 其实在serverProperties中, 看代码:

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {

	/**
	 * Server HTTP port.
	 */
	private Integer port;

	/**
	 * Network address to which the server should bind.
	 */
	private InetAddress address;
  
  //..........省略

3 @ConfigurationProperties 注解的类,可以解决**创建的 Bean 的属性?**问题

目前:

我们已经比较清晰的理解 Spring Boot 是怎么解决我们上面提出的三个问题,但是这样还是无法实现自动配置。例如说,我们引入的 spring-boot-starter-web 等依赖,Spring Boot 是怎么知道要扫码哪些配置类的。

本文作者:

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!