Spring-bootにおけるauto-configurationとconfigurationの違い
2603 ワード
Spring-bootはannotationによるbeanの構成を提唱しており、現在spring-bootでよく使われている2つのbeanの作成方法にはauto-configurationとconfigurationの2つの方法がある.
まずconfiguration方式として,
その後、起動時に
さらにauto-configuration、spring-bootには
spring.factoriesファイル:
具体的なコード
では、この2つの方法にはどんな違いがありますか?は初期化のタイミングconfiguration初期化の方式であり、常にauto-configuration初期化方式の前に である. configuration初期化の順序はスキャンのプロセスに関連しており、有効に指定することはできず、ファイルロードの順序 を特定するのに不便である. auto-configurationは、 を指定することができる. configuration初期化
したがって、beanを他のjarパッケージに提供して使用する必要がある場合は、auto-configuration方式(
また、auto-configurationが提供するクラス名がスキャンのパスの中にある場合、spring-bootはこれらのクラスを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);
}
}
では、この2つの方法にはどんな違いがありますか?
@AutoConfigureAfter
@AutoConfigureBefore
および@AutoConfigureOrder
によってクラスのロード順序@Configuration
ファイルにスキャンされた@PostConstruct
注記をすべて初期化してからこれらのファイルの@Bean
注記を初期化しますが、auto-configurationはファイルに基づいて初期化されるので、1つのファイルの@PostConstruct
注記を初期化してからこのファイルの@Bean
注記を初期化します.その後、別のファイルを処理します.したがって、beanを他のjarパッケージに提供して使用する必要がある場合は、auto-configuration方式(
spring-boot-starters
の中のものはすべてこのような方式で提供され、彼のすべての初期化プロセスはspring-boot-autoconfigure
プロジェクトにある)を使用することが望ましい.クラスファイルのロード順序をよりよく制御することができるからである.より複雑なプロジェクトのメンテナンスに役立つ.また、auto-configurationが提供するクラス名がスキャンのパスの中にある場合、spring-bootはこれらのクラスをconfigurationとして先に初期化し、
@AutoConfigureAfter
@AutoConfigureBefore
と@AutoConfigureOrder
のような指定された順序の注釈は失効することに注意してください.