春のブートアノテーション

スプリングブートアノテーション

1. 概要

Spring Bootは、自動構成機能によりSpringの構成を容易にしました。

このクイックチュートリアルでは、org.springframework.boot.autoconfigureおよびorg.springframework.boot.autoconfigure.conditionパッケージの注釈について説明します。

2. @SpringBootApplication

この注釈をmark the main class of a Spring Boot applicationに使用します。

@SpringBootApplication
class VehicleFactoryApplication {

    public static void main(String[] args) {
        SpringApplication.run(VehicleFactoryApplication.class, args);
    }
}

@SpringBootApplicationは、@Configuration, @EnableAutoConfiguration, and @ComponentScan注釈をデフォルトの属性でカプセル化します。

3. @EnableAutoConfiguration

@EnableAutoConfigurationは、その名前が示すように、自動構成を有効にします。 これは、クラスパス上のSpring Boot looks for auto-configuration beansが、それらを自動的に適用することを意味します。

このアノテーションは@Configurationで使用する必要があることに注意してください。

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

4. 自動構成条件

通常、custom auto-configurationsを作成するときは、Springをuse them conditionallyにします。 このセクションの注釈を使用してこれを実現できます。

このセクションの注釈は、@Configurationクラスまたは@Beanメソッドに配置できます。

次のセクションでは、各条件の背後にある基本的な概念のみを紹介します。 詳細については、this articleにアクセスしてください。

4.1. @ConditionalOnClassおよび@ConditionalOnMissingClass

これらの条件を使用すると、Springは、アノテーションのargument is present/absentのクラスが次の場合にのみ、マークされた自動構成Beanを使用します。

@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
    //...
}

4.2. @ConditionalOnBeanおよび@ConditionalOnMissingBean

presence or absence of a specific beanに基づいて条件を定義する場合は、これらの注釈を使用できます。

@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    // ...
}

4.3. @ConditionalOnProperty

このアノテーションを使用して、values of propertiesに条件を作成できます。

@Bean
@ConditionalOnProperty(
    name = "usemysql",
    havingValue = "local"
)
DataSource dataSource() {
    // ...
}

4.4. @ConditionalOnResource

特定のresource is presentの場合にのみ、Springに定義を使用させることができます。

@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
    // ...
}

4.5. @ConditionalOnWebApplicationおよび@ConditionalOnNotWebApplication

これらのアノテーションを使用して、現在のapplication is or isn’t a web applicationに基づいて条件を作成できます。

@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
    // ...
}

4.6. @ConditionalExpression

このアノテーションは、より複雑な状況で使用できます。 Springは、SpEL expression is evaluated to trueの場合、マークされた定義を使用します。

@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
    // ...
}

4.7. @Conditional

さらに複雑な条件の場合は、custom conditionを評価するクラスを作成できます。 Springにこのカスタム条件を@Conditionalで使用するように指示します。

@Conditional(HibernateCondition.class)
Properties additionalProperties() {
    //...
}

5. 結論

この記事では、自動構成プロセスを微調整し、カスタム自動構成Beanの条件を提供する方法の概要を説明しました。

いつものように、例は利用可能なover on GitHubです。