springBoot自动化配置

SpringBoot 1.5.12.RELEASE 版本
 
已为例JdbcTemplate 为例。
spring-boot-autoconfigure-1.5.12.RELEASE.jar!\org\springframework\boot\autoconfigure\jdbc\JdbcTemplateAutoConfiguration.class
 
地方
 
1.1.1  @Configuration
    表明是一个配置类,和以前编写的配置文件一样。注解引用 @Component给容器中添加组件
 
1.1.2  @ConditionalOnClass({DataSource. class , JdbcTemplate. class })
    DataSource、JdbcTemplate在应用的classpath上时才开启自动配置
部分condition条件
@ConditionalOnBean:
当容器里有指定Bean的条件下
@ConditionalOnClass:
当类路径下有指定类的条件下
@ConditionalOnExpression:
基于SpEL表达式作为判断条件
@ConditionalOnJava:
基于JV版本作为判断条件
@ConditionalOnJndi:
在JNDI存在的条件下差在指定的位置
@ConditionalOnMissingBean:
当容器里没有指定Bean的情况下
@ConditionalOnMissingClass:
当类路径下没有指定类的条件下
@ConditionalOnNotWebApplication:
当前项目不是Web项目的条件下
@ConditionalOnProperty:
指定的属性是否有指定的值
@ConditionalOnResource:
类路径是否有指定的值
@ConditionalOnSingleCandidate:
当指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean
@ConditionalOnWebApplication:
当前项目是Web项目的条件下
 
 
1.1.3  @ConditionalOnSingleCandidate(DataSource. class )
    仅在单数据源bean存在时才生效
 
 
1.1.4 @AutoConfigureAfter({DataSourceAutoConfiguration. class })
    在 DataSourceAutoConfiguration之后再加载
 
 
1.1.4.1 DataSourceAutoConfiguration的自动注入
 
 
1.1.4.2  @EnableConfigurationProperties({DataSourceProperties. class })
  @EnableConfigurationProperties 中引入类EnableConfigurationPropertiesImportSelector
         @Import({EnableConfigurationPropertiesImportSelector. class })
 类DataSourceProperties 为最终获取到配置文件配置信息的类。
    
 
其他配置信息,可以参考  xxxxProperties 类。 路径spring-boot-autoconfigure-1.5.12.RELEASE.jar!\org\springframework\boot\autoconfigure\jdbc\DataSourceProperties.class
 
即大多数自动化配置信息都在 org\springframework\boot\autoconfigure 中。
 
 


 
以HttpEncodingAutoConfiguration 为例
spring-boot-autoconfigure-1.5.12.RELEASE.jar!\org\springframework\boot\autoconfigure\web\HttpEncodingAutoConfiguration.class
 
 
 
 
 
2.1 @EnableConfigurationProperties({HttpEncodingProperties. class})
           使 HttpEncodingProperties中的@ConfigurationProperties生效,注入容器。
           配置类中,配置路径 spring.http.encoding
    
 
2.2 @ConditionalOnWebApplication 当前是web项目
            
 
 
2.3 @ConditionalOnClass({CharacterEncodingFilte r. class}) 
    类CharacterEncodingFilter 继承于 OncePerRequestFilter
            运行OncePerRequestFilter 的 doFilter() 时调用子类的 doFilterInternal()方法
        给请求和响应设置编码
    
判断配置文件  //即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
注解@ConditionalOnProperty 配合看一篇花里胡哨的博文 https://www.cnblogs.com/yaphetsfang/p/11817999.html
@Conditional(OnPropertyCondition.class) 
public @interface ConditionalOnProperty { 
/**
* String数组 该属性与下面的 name 属性不可同时使用,
* 当value所对应配置文件中的值为false时,注入不生效,不为fasle注入生效
* value有多个值时,只要有一个值对应为false,则注入不成功 
*/
String[] value() default {}; 
/**
* 配置文件中key的前缀,可与value 或 name 组合使用 */ 
String prefix() default ""; 
 
/** * 与 value 作用一致 */ 
String[] name() default {};
 
/** * 与value 或 name 组合使用,只有当value 或 name 对应的值与havingValue的值相同时,注入生效 */ 
String havingValue() default ""; 
 
/** * 配置中缺少对应的属性时,是否可以被注入;为true时缺少对应配置可注入 */ 
boolean matchIfMissing() default false;} */ String havingValue() default "";
 
/** *该属性为true时,配置文件中缺少对应的value或name的对应的属性值,也会注入成功 */ 
boolean matchIfMissing() default false;
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值