web-dev-qa-db-fra.com

Pourquoi la classe d'application Spring Boot doit-elle avoir une annotation @Configuration?

J'apprends à connaître Spring Framework mais je ne comprends pas ce qu'est exactement le @Configuration annotation signifie quelles classes doivent être annotées de la sorte. Dans les documents Spring Boot, il est dit que la classe Application doit être @Configuration classe.

Spring Boot favorise la configuration basée sur Java. Bien qu'il soit possible d'appeler SpringApplication.run () avec une source XML, nous vous recommandons généralement que votre source principale soit une classe @Configuration.

Essayer d'apprendre sur @Configuration Je trouve que l'annotation d'une classe avec le @Configuration indique que la classe peut être utilisée par le conteneur Spring IoC en tant que source de définitions de bean.

Si tel est le cas, en quoi cette classe d'applications est-elle une source de définitions de bean?

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class App 
{
    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);    
    }
}

J'ai à peu près compris la plupart des autres concepts de base concernant Spring, mais je ne comprends pas le but de @Configuration ou quelles classes devraient être @Configuration Des classes? Puis-je avoir une aide s'il vous plait. Merci !!

32
varunkr

Vous avez bien compris.

@Configuration

@Configuration Est un analogue pour le fichier xml. Ces classes sont des sources de définitions de beans en définissant des méthodes avec l'annotation @Bean.

@Configuration Est:

  • non requis , si vous transmettez déjà la classe annotée dans le paramètre sources lors de l'appel de la méthode SpringApplication.run();
  • requis , lorsque vous ne transmettez pas explicitement la classe annotée, mais que cela se trouve dans le package spécifié dans l'annotation @ComponentScan de votre classe principale. classe de configuration.

Pour des raisons de lisibilité, les classes même explicitement passées sous la forme sources peuvent néanmoins être annotées avec @Configuration - pour montrer plus clairement les intentions.

Votre classe actuelle n'est pas vraiment une source de définitions de beans, car elle n'en a pas, mais si vous aviez des méthodes annotées @Bean, Spring les verrait.

@EnableAutoConfiguration

Peut être utilisé avec ou sans @Configuration. Cela indique à Spring de configurer une infrastructure de base à en juger par ce que vous avez dans le classpath. Cela se fait en appelant une soi-disant classe d'importation dérivée de la valeur de l'annotation @Import Que @EnableAutoConfiguration Comprend. Une seule classe doit être annotée avec @EnableAutoConfiguration, Sa duplication ne fait rien.

Cette réponse peut également être utile pour comprendre le processus d’initialisation de Spring Boot: Quel morceau de code dans Spring Boot enregistre réellement le servlet de répartiteur pour SpringMVC?

31
Artem Novikov

Je pense que la raison principale pour laquelle @SpringBootApplication l'annotation s'applique automatiquement @Configuration est de permettre d'ajouter des définitions de beans dans la même classe. L'un des principaux objectifs de Spring Boot est de vous permettre de créer une application rapidement et sans mouvements supplémentaires. Ainsi, en vous permettant d'ajouter des définitions de beans directement dans la classe de l'application, vous n'avez pas besoin de créer de classes supplémentaires pour conserver votre configuration. Vous avez juste 1 classe et c'est tout.

9
Nikem