Spring Boot-Anmerkungen

Spring Boot-Anmerkungen

1. Überblick

Spring Boot hat die Konfiguration von Spring durch die automatische Konfigurationsfunktion vereinfacht.

In diesem kurzen Tutorial werden wir die Anmerkungen aus den Paketenorg.springframework.boot.autoconfigure undorg.springframework.boot.autoconfigure.condition untersuchen.

2. @SpringBootApplication

Wir verwenden diese Annotation zumark the main class of a Spring Boot application:

@SpringBootApplication
class VehicleFactoryApplication {

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

@SpringBootApplication kapselt@Configuration, @EnableAutoConfiguration, and @ComponentScan Annotationen mit ihren Standardattributen.

3. @EnableAutoConfiguration

@EnableAutoConfiguration aktiviert, wie der Name schon sagt, die automatische Konfiguration. Dies bedeutet, dassSpring Boot looks for auto-configuration beans auf seinem Klassenpfad liegt und diese automatisch anwendet.

Beachten Sie, dass wir diese Annotation mit@Configuration verwenden müssen:

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

4. Bedingungen für die automatische Konfiguration

Wenn wir unserecustom auto-configurations schreiben, wollen wir normalerweise Spring aufuse them conditionally. Dies können wir mit den Anmerkungen in diesem Abschnitt erreichen.

Wir können die Anmerkungen in diesem Abschnitt auf die Klassen von@Configurationoder die Methoden von@Beanetzen.

In den nächsten Abschnitten werden wir nur das Grundkonzept für jede Bedingung vorstellen. Weitere Informationen finden Sie unterthis article.

4.1. @ConditionalOnClass und@ConditionalOnMissingClass

Unter diesen Bedingungen verwendet Spring die markierte Bean für die automatische Konfiguration nur, wenn die Klasse inargument is present/absentder Annotation:

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

4.2. @ConditionalOnBean und@ConditionalOnMissingBean

Wir können diese Annotationen verwenden, wenn wir Bedingungen basierend aufpresence or absence of a specific bean definieren möchten:

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

4.3. @ConditionalOnProperty

Mit dieser Annotation können wir Bedingungen fürvalues of properties festlegen:

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

4.4. @ConditionalOnResource

Wir können Spring dazu bringen, eine Definition nur dann zu verwenden, wenn ein bestimmtesresource is present:

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

4.5. @ConditionalOnWebApplication und@ConditionalOnNotWebApplication

Mit diesen Anmerkungen können wir Bedingungen erstellen, die darauf basieren, ob die aktuellenapplication is or isn’t a web application:

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

4.6. @ConditionalExpression

Wir können diese Annotation in komplexeren Situationen verwenden. Spring verwendet die markierte Definition, wennSpEL expression is evaluated to true:

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

4.7. @Conditional

Für noch komplexere Bedingungen können wir eine Klasse erstellen, die diecustom condition bewertet. Wir weisen Spring an, diese benutzerdefinierte Bedingung mit@Conditional zu verwenden:

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

5. Fazit

In diesem Artikel haben wir einen Überblick darüber erhalten, wie wir den automatischen Konfigurationsprozess optimieren und Bedingungen für benutzerdefinierte Beans für die automatische Konfiguration bereitstellen können.

Wie üblich sind die Beispiele inover on GitHub verfügbar.