Sobes.tech
Middle
160

Τι συμβαίνει αν προσπαθήσετε να πάρετε το ίδιο bean στο ApplicationContext;

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

sobes.tech AI

Το ApplicationContext θα επιστρέψει κατά προεπιλογή μια αναφορά στο ίδιο bean, καθώς η περιοχή ορατότητας των beans κατά προεπιλογή στο Spring είναι singleton.

Σε περίπτωση που το bean διαμορφωθεί με άλλη περιοχή ορατότητας, π.χ. prototype, τότε κάθε φορά που γίνεται αίτημα, το ApplicationContext θα δημιουργεί και θα επιστρέφει ένα νέο αντίγραφο του bean.

Παράδειγμα διαμόρφωσης bean με περιοχή ορατότητας prototype:

@Configuration
public class AppConfig {

    @Bean
    @Scope("prototype") // Ορίζουμε την περιοχή ορατότητας `prototype`
    public MyPrototypeBean myPrototypeBean() {
        return new MyPrototypeBean();
    }
}

Παράδειγμα λήψης bean από το ApplicationContext:

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        MyPrototypeBean bean1 = context.getBean(MyPrototypeBean.class);
        MyPrototypeBean bean2 = context.getBean(MyPrototypeBean.class);

        System.out.println(bean1 == bean2); // Για singleton θα επιστρέψει true, για prototype θα επιστρέψει false

        context.close();
    }
}