Comprendre @Bean vs @Autowired dans Spring : Guide Complet

Aouassar AsmaeAouassar Asmae
2 min read

Introduction

Dans Spring, la gestion des dépendances est au cœur du framework. Deux annotations clés, @Bean et @Autowired, jouent des rôles distincts mais complémentaires. Cet article explique leurs différences, leurs cas d’usage et comment les utiliser efficacement.

Qu’est ce que @Bean ?

Définition

@Bean est une annotation utilisée dans une classe de configuration (@Configuration) pour déclarer manuellement un objet et l’ajouter au contexte Spring.

Cas d’usage

  • Quand vous avez besoin de configurer un objet ( ex : un filtre personnalisé, un composant externe).

  • Quand vous voulez personnaliser l’instanciation ( ex: passage de paramètres, initialisation complexe )

Exemple

@Configuration
public class AppConfig {

    @Bean
    public JwtUtil jwtUtil() {
        return new JwtUtil("ma-clé-secrète"); // Configuration manuelle
    }

    @Bean
    public JwtAuthenticationFilter jwtAuthFilter(JwtUtil jwtUtil) {
        return new JwtAuthenticationFilter(jwtUtil); // Injection de dépendance
    }
}

Avantage

Contrôle total sur la création de l’objet.

Qu’est ce que @Autowired ?

Définition

@Autowired permet à Spring d’injecter automatiquement une dépendance déjà disponible dans le contexte (créé via @Bean, @Component …)

Cas d’usage

  • Quand on a besoin d’utiliser un composant existant ( ex: un service, un repository)

  • Pour éviter l’instanciation manuelle (new)

Exemple

@Service
public class AuthService {

    @Autowired
    private JwtUtil jwtUtil; // Injection automatique

    public String generateToken(User user) {
        return jwtUtil.generateToken(user.getEmail());
    }
}

Avantage

Evite la duplication de code et suit le principe IoC (Inversion of Control)

Différences Clés

@Bean

  • Rôle : Créer un objet dans le contexte Spring.

  • Utilisation : Dans les classes @Configuration

  • Contrôle : Personnalisation possible.

  • Dépendances : Peut prendre des paramètres

@Autowired

  • Rôle : Injecter un objet existant

  • Utilisation : Dans les composants Spring (@Service, @Controller …)

  • Contrôle : Injection automatique

  • Dépendances : Nécessite un objet déjà disponible.

0
Subscribe to my newsletter

Read articles from Aouassar Asmae directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Aouassar Asmae
Aouassar Asmae