İlkbahar - Fasulye Kapsülleri
Bir <bean> tanımlarken, o fasulye için bir kapsam bildirme seçeneğiniz vardır. Örneğin, Spring'i her ihtiyaç duyulduğunda yeni bir fasulye örneği oluşturmaya zorlamak için, bean'in kapsam özniteliğini şöyle beyan etmelisiniz:prototype. Benzer şekilde, Spring'in her ihtiyaç duyulduğunda aynı bean örneğini döndürmesini istiyorsanız, bean'ın kapsam özniteliğini olarak beyan etmelisiniz.singleton.
Spring Framework, aşağıdaki beş kapsamı destekler; bunlardan üçü yalnızca web uyumlu bir ApplicationContext kullanıyorsanız kullanılabilir.
Sr.No. | Kapsam ve Açıklama |
---|---|
1 | singleton Bu, fasulye tanımını Spring IoC kabı başına tek bir örneğe kapsamaktadır (varsayılan). |
2 | prototype Bu, herhangi bir sayıda nesne örneğine sahip olmak için tek bir fasulye tanımını kapsar. |
3 | request Bu, bir HTTP isteğine bir fasulye tanımını kapsar. Yalnızca web'e duyarlı bir Spring ApplicationContext bağlamında geçerlidir. |
4 | session Bu, bir HTTP oturumunun bean tanımını kapsar. Yalnızca web'e duyarlı bir Spring ApplicationContext bağlamında geçerlidir. |
5 | global-session Bu, genel bir HTTP oturumu için bir bean tanımını kapsar. Yalnızca web'e duyarlı bir Spring ApplicationContext bağlamında geçerlidir. |
Bu bölümde, ilk iki kapsam hakkında tartışacağız ve kalan üçü, web'e duyarlı Spring ApplicationContext hakkında tartıştığımızda tartışılacaktır.
Singleton kapsamı
Bir kapsam singleton olarak ayarlanmışsa, Spring IoC konteyneri bu fasulye tanımıyla tanımlanan nesnenin tam olarak bir örneğini oluşturur. Bu tek örnek, bu tür tekli çekirdeklerin bir önbelleğinde saklanır ve bu adlandırılmış fasulye için tüm sonraki istekler ve başvurular, önbelleğe alınan nesneyi döndürür.
Varsayılan kapsam her zaman tekildir. Ancak, bir fasulyenin yalnızca bir örneğine ihtiyacınız olduğunda,scope mülkiyet singleton fasulye yapılandırma dosyasında, aşağıdaki kod parçacığında gösterildiği gibi -
<!-- A bean definition with singleton scope -->
<bean id = "..." class = "..." scope = "singleton">
<!-- collaborators and configuration for this bean go here -->
</bean>
Misal
Çalışan bir Eclipse IDE'ye sahip olalım ve bir Spring uygulaması oluşturmak için aşağıdaki adımları atalım -
Adımlar | Açıklama |
---|---|
1 | SpringExample adıyla bir proje oluşturun ve altında bir com.tutorialspoint paketi oluşturun .src oluşturulan projedeki klasör. |
2 | Bahar Merhaba Dünya Örneği bölümünde açıklandığı gibi Harici JAR Ekle seçeneğini kullanarak gerekli Bahar kitaplıklarını ekleyin . |
3 | Com.tutorialspoint paketi altında HelloWorld ve MainApp Java sınıfları oluşturun . |
4 | Beans yapılandırma dosyasını Beans.xml altında oluşturun.src Klasör. |
5 | Son adım, tüm Java dosyalarının ve Bean Yapılandırma dosyasının içeriğini oluşturmak ve aşağıda açıklandığı gibi uygulamayı çalıştırmaktır. |
İşte içeriği HelloWorld.java dosya -
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
Aşağıdakilerin içeriği MainApp.java dosya -
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();
}
}
Yapılandırma dosyası aşağıdadır Beans.xml singleton kapsamı için gerekli -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton">
</bean>
</beans>
Kaynak ve bean yapılandırma dosyalarını oluşturmayı tamamladığınızda uygulamayı çalıştırmamıza izin verin. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır -
Your Message : I'm object A
Your Message : I'm object A
Prototip kapsamı
Kapsam prototipe ayarlanmışsa, Spring IoC konteyneri o belirli fasulye için her talep yapıldığında nesnenin yeni bir fasulye örneğini oluşturur. Kural olarak, tüm devlet-dolu çekirdekler için prototip kapsamını ve devletsiz çekirdekler için tekli kapsamı kullanın.
Bir prototip kapsamı tanımlamak için, scope mülkiyet prototype fasulye yapılandırma dosyasında, aşağıdaki kod parçacığında gösterildiği gibi -
<!-- A bean definition with prototype scope -->
<bean id = "..." class = "..." scope = "prototype">
<!-- collaborators and configuration for this bean go here -->
</bean>
Misal
Eclipse IDE'yi yerinde çalıştıralım ve bir Spring uygulaması oluşturmak için aşağıdaki adımları takip edelim -
Adımlar | Açıklama |
---|---|
1 | SpringExample adıyla bir proje oluşturun ve altında bir com.tutorialspoint paketi oluşturun .src oluşturulan projedeki klasör. |
2 | Bahar Merhaba Dünya Örneği bölümünde açıklandığı gibi Harici JAR Ekle seçeneğini kullanarak gerekli Bahar kitaplıklarını ekleyin . |
3 | Com.tutorialspoint paketi altında HelloWorld ve MainApp Java sınıfları oluşturun . |
4 | Beans yapılandırma dosyasını Beans.xml altında oluşturun.src Klasör. |
5 | Son adım, tüm Java dosyalarının ve Bean Yapılandırma dosyasının içeriğini oluşturmak ve aşağıda açıklandığı gibi uygulamayı çalıştırmaktır. |
İşte içeriği HelloWorld.java dosya
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
Aşağıdakilerin içeriği MainApp.java dosya -
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
objA.setMessage("I'm object A");
objA.getMessage();
HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
objB.getMessage();
}
}
Yapılandırma dosyası aşağıdadır Beans.xml prototip kapsamı için gerekli -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype">
</bean>
</beans>
Kaynak ve bean yapılandırma dosyalarını oluşturmayı tamamladığınızda uygulamayı çalıştırmamıza izin verin. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır -
Your Message : I'm object A
Your Message : null