Sobes.tech
Junior

Για ποιο λόγο χρησιμοποιείται η σημείωση @Bean στο Spring Framework;

sobes.tech AI

Απάντηση από AI

Η σημείωση @Bean χρησιμοποιείται στο Spring για να δηλώσει μεθόδους που παράγουν beans (αντικείμενα που διαχειρίζεται το κοντέινερ IoC του Spring). Η μέθοδος που σημειώνεται με @Bean εκτελείται από το Spring και η τιμή που επιστρέφει καταγράφεται ως bean στο πλαίσιο της εφαρμογής.

Κύριες περιπτώσεις χρήσης:

  • Ρύθμιση εξωτερικών βιβλιοθηκών: Όταν δεν είναι δυνατή η εφαρμογή annotations Spring (@Component, @Service κ.λπ.) σε κλάσεις εξωτερικών βιβλιοθηκών.
  • Λεπτομερής ρύθμιση δημιουργίας bean: Όταν απαιτείται πολύπλοκη λογική αρχικοποίησης αντικειμένου, δύσκολη ή αδύνατη να υλοποιηθεί με annotations.
  • Συνθήκη δημιουργίας bean: Μαζί με τις annotations @Conditional για δημιουργία bean ανάλογα με ορισμένες συνθήκες.

Παράδειγμα δημιουργίας bean με @Bean:

// Σε μια κλάση με @Configuration
@Configuration
public class AppConfig {

    @Bean
    public DataSource dataSource() {
        // Πολύπλοκη λογική δημιουργίας DataSource
        return new com.zaxxer.hikari.HikariDataSource(); // Παράδειγμα
    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        // Ρύθμιση RestTemplate
        return builder.setConnectTimeout(Duration.ofSeconds(5))
                      .setReadTimeout(Duration.ofSeconds(5))
                      .build();
    }
}

Τα beans που δηλώνονται με @Bean είναι διαθέσιμα για εξάρτηση (dependency injection) σε άλλα components του Spring. Από προεπιλογή, το όνομα του bean ταιριάζει με το όνομα της μεθόδου, αλλά μπορεί να οριστεί ρητά με τα attributes name ή value.

// Ορισμός ρητού ονόματος bean
@Bean(name = "myCustomRestTemplate")
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    // ...
    return builder.build();
}