Middle+
Spring-də iki Singleton yaratmaq mümkündürmü?
sobes.tech Süni İntellekt
AI-dan cavab
Bəli, mümkündür:
-
Fərqli kontekstlər: Hər Spring konteksti (məsələn, iki
AnnotationConfigApplicationContext) öz binalar dəstini idarə edəcək, o cümlədən singletonları. Hər kontekstin öz singleton nümunəsi olacaq.// Singleton bina public class MySingleton { private static int counter = 0; private int instanceId; public MySingleton() { instanceId = ++counter; } public int getInstanceId() { return instanceId; } }// Bina konfiqurasiyası import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MySingleton mySingleton() { return new MySingleton(); } }// Fərqli kontekstlərin istifadəsi import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context1 = new AnnotationConfigApplicationContext(AppConfig.class); MySingleton singleton1 = context1.getBean(MySingleton.class); System.out.println("Singleton 1 from context 1, ID: " + singleton1.getInstanceId()); // Çıxış: 1 ApplicationContext context2 = new AnnotationConfigApplicationContext(AppConfig.class); MySingleton singleton2 = context2.getBean(MySingleton.class); System.out.println("Singleton 2 from context 2, ID: " + singleton2.getInstanceId()); // Çıxış: 2 } } -
Fərqli bina ID-ləri (əgər bina bir neçə dəfə müəyyən edilibsə): Eyni sinif bir kontekstdə fərqli bina ID-ləri ilə qeydiyyatdan keçibsə, Spring hər ID üçün ayrıca singleton yaradacaq. Bu, tam olaraq "bu" sinifin iki singletonu deyil, daha çox iki fərqli bina, hər biri singleton sahəsinə malik və eyni sinifin tətbiqindən istifadə edir.
// Fərqli ID-lərlə konfiqurasiya import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class DifferentIdConfig { @Bean(name = "singletonA") public MySingleton mySingletonA() { return new MySingleton(); } @Bean(name = "singletonB") public MySingleton mySingletonB() { return new MySingleton(); } }// Fərqli ID-lərlə bina istifadəsi import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class MainDifferentId { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(DifferentIdConfig.class); MySingleton singletonA = context.getBean("singletonA", MySingleton.class); MySingleton singletonB = context.getBean("singletonB", MySingleton.class); System.out.println("Singleton A ID: " + singletonA.getInstanceId()); // Çıxış: 1 System.out.println("Singleton B ID: " + singletonB.getInstanceId()); // Çıxış: 2 } }
Qeyd etmək lazımdır ki, Spring-də Singleton ən çox istifadə olunan və standart yanaşma, bir ApplicationContext daxilində müəyyən edilmiş bir sinifin bir nümunəsidir.*