springboot

spring-boot中的auto-configuration和

2016-10-11  本文已影响3431人  LOC_Thomas

spring-boot提倡通过annotation来进行bean的配置,现在spring-boot里面常用的两种创建bean的方式有auto-configuration和configuration两种方式。

先说说configuration方式,就是使用@configuration注解和@bean注解来初始化想要的bean对象

@Configuration
@Slf4j
public class SecondBeanConfiguration {  
  @Bean  
  @ConditionalOnMissingBean  
  public SecondBean secondBean() { 
    log.info("log second bean");    
    return new SecondBean("secondBean", 2);  
  }
}

然后在启动的时候@ComponentScan注解会扫描包(路径可以指定,默认的情况下就是这个目录所在的包开始扫描),这个注解扫到@configuration注解以后,就会初始化这个类下面所有加了@bean的方法,并初始化这个bean

再来说说auto-configuration,spring-boot有一个@EnableAutoConfiguration注解,他通过读取spring.factories文件里面的EnableAutoConfiguration下面指定的类,来初始化指定类下面的所有加了@bean的方法,并初始化这个bean

spring.factories文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.dragon.study.spring.boot.configuration.auto.config.AutoFirstBeanConfiguration,\
com.dragon.study.spring.boot.configuration.auto.config.AutoSecondBeanConfiguration

具体的代码

@Slf4j
@Configuration
public class AutoFirstBeanConfiguration {  
  @Bean  
  @ConditionalOnMissingBean  
  public AutoFirstBean autoFirstBean() {
     log.info("log auto first bean");   
     return new AutoFirstBean("autoFirstBean", 1);  
  }
}

那么这两种方式有什么不同呢?

所以需要提供bean给其他jar包进行使用的时候,最好使用 auto-configuration 方式(spring-boot-starters里面的都是通过这种方式来进行提供的,他的所有初始化的过程全部在spring-boot-autoconfigure项目中),因为能更好的控制类文件的加载顺序。有助于维护更佳复杂的项目。

另外需要注意一点的就是,如果auto-configuration提供的类名称在扫描的路径之中,spring-boot会把这些类作为configuration先进行初始化了,然后@AutoConfigureAfter @AutoConfigureBefore@AutoConfigureOrder 这类指定顺序的注解都会失效。

上一篇 下一篇

猜你喜欢

热点阅读