2-2 Springboot自动配置Bean原理和配置自动配置的Bean

认识Springboot

    SpringBoot不是什么

    不是应用服务器

    不是JavaEE之类的规范

    不是代码生成器

    不是Spring Framework的升级版(帮助大家更好地使用Spring Framework)

 

SpringBoot的特性

    方便地创建可独立运行的Spring应用程序

    直接内嵌了Tomcat、Jetty、Undertow

    简化了项目的构建配置

    为Spring及第三方库提供自动配置

    提供生产级特性

    无需生成代码或进行xml配置

 

SpringBoot的四大核心部分

    自动配置 - Auto Configuration

    起步依赖 - Starter Dependency

    命令行界面 - Spring Boot CLI

    Actuator

 

了解自动配置

自动配置

    基于添加了Jar依赖自动对SpringBoot应用程序进行配置

    spring-boot-autoconfiguration

开启自动配置

    @EnableAutoConfiguration

        exclude = Class<?>[](参考自动配置类的信息)

    @SpringBootApplication

 

自动配置的实现原理

@EnableAutoConfiguration

    AutoConfigurationImportSelector(package org.springframework.boot.autoconfigure;)

    META-INF/spring.factories(org\springframework\boot\spring-boot-autoconfigure\2.1.5.RELEASE\spring-boot-autoconfigure-2.1.5.RELEASE.jar!\META-INF\spring.factories)

        org.springframework.boot.autoconfigure.EnableAutoConfiguration

 

自动配置的实现原理

条件注解

    @Conditional

    @ConditionalOnClass //当条件出现什么类的时候生效

    @ConditionalOnBean //当容器里存在某个bean的时候生效

    @ConfitionalOnMissingBean //当容器里不存在某个bean时生效

    @ConditionalOnProperty //当配置了特定属性的时候  

    例:@ConditionOnProperty(name="xxx.enable",havingValue="true",matchIfMissing="false") 

bean条件

    @ConditionalOnBean

    @ConditionalOnMissingBean

    @ConditionalOnSingleCandidate

资源条件

    @ConditionOnResource

Web应用条件

    @ConditionalOnWebApplication

    @ConditionalOnNotWebApplication

其他条件

    @ConditionalOnExpression

    @ConditionalOnJava

    @ConditionalOnJndi

执行顺序

    @AutoConfigureBefore

    @AutoConfigureAfter

    @AutoConfigureOrder

参考org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration
package org.springframework.boot.autoconfigure.jdbc;


/**
 * {@link EnableAutoConfiguration Auto-configuration} for {@link DataSource}.
 *
 * @author Dave Syer
 * @author Phillip Webb
 * @author Stephane Nicoll
 * @author Kazuki Shimizu
 */
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) //当存在这两类的时候
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class,
		DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {

	@Configuration
	@Conditional(EmbeddedDatabaseCondition.class) //当存在这个类的时候
	@ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) //当不存在这两个Bean的时候
	@Import(EmbeddedDataSourceConfiguration.class)
	protected static class EmbeddedDatabaseConfiguration {

	}

}

了解自动配置的情况

命令行添加 --debug

由ConditionEvaluationReportLoggingListeners输出

    Positive matches 匹配那些

    Negative matches 没有匹配到那些

    Exclusions 排除那些

    Unconditional classes 无条件配置

 

-- 摘自极客时间玩转spring全家桶

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值