Sobes.tech
Middle

Mi történik, ha megpróbálod ugyanazt a bean-t lekérni az ApplicationContext-ben?

sobes.tech MI

Válasz az MI-től

ApplicationContext alapértelmezés szerint ugyanarra a példányra mutató hivatkozást ad vissza, mivel a Springben az összes bean alapértelmezett láthatósági területe a singleton.

Ha a bean más láthatósági területtel van konfigurálva, például prototype, akkor minden kérésnél az ApplicationContext új példányt hoz létre és ad vissza.

Példa egy prototype láthatósági területtel rendelkező bean konfigurációjára:

@Configuration
public class AppConfig {

    @Bean
    @Scope("prototype") // Megadjuk a `prototype` láthatósági területet
    public MyPrototypeBean myPrototypeBean() {
        return new MyPrototypeBean();
    }
}

Példa bean lekérésére az ApplicationContext-ből:

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 esetén true, prototype esetén false

        context.close();
    }
}