Bahar - Fasulye Tanımı Kalıtımı
Bir fasulye tanımı, yapıcı bağımsız değişkenleri, özellik değerleri ve başlatma yöntemi, statik fabrika yöntemi adı vb. Gibi kapsayıcıya özgü bilgiler dahil olmak üzere birçok yapılandırma bilgisi içerebilir.
Bir alt fasulye tanımı, yapılandırma verilerini bir üst tanımdan devralır. Çocuk tanımı, gerektiğinde bazı değerleri geçersiz kılabilir veya diğerlerini ekleyebilir.
Spring Bean tanım kalıtımının Java sınıfı kalıtımla ilgisi yoktur, ancak kalıtım kavramı aynıdır. Bir ana çekirdek tanımını bir şablon olarak tanımlayabilirsiniz ve diğer alt fasulyeler, gerekli yapılandırmayı ana fasulyeden devralabilir.
XML tabanlı yapılandırma meta verilerini kullandığınızda, bir alt fasulye tanımını belirtirsiniz. parent öznitelik, bu özniteliğin değeri olarak ana fasulyeyi belirtir.
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 , HelloIndia 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. |
Yapılandırma dosyası aşağıdadır Beans.xmlBurada message1 ve message2 olmak üzere iki özelliğe sahip "merhabaDünya" fasulyesini tanımladık . Sonraki "merhabaHindistan" fasulyesi kullanılarak "merhabaDünya" fasulyesinin çocuğu olarak tanımlandıparentöznitelik. Alt fasulye, message2 özelliğini olduğu gibi devralır ve message1 özelliğini geçersiz kılar ve bir tane daha message3 özelliği sunar .
<?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">
<property name = "message1" value = "Hello World!"/>
<property name = "message2" value = "Hello Second World!"/>
</bean>
<bean id ="helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "helloWorld">
<property name = "message1" value = "Hello India!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
</beans>
İşte içeriği HelloWorld.java dosya -
package com.tutorialspoint;
public class HelloWorld {
private String message1;
private String message2;
public void setMessage1(String message){
this.message1 = message;
}
public void setMessage2(String message){
this.message2 = message;
}
public void getMessage1(){
System.out.println("World Message1 : " + message1);
}
public void getMessage2(){
System.out.println("World Message2 : " + message2);
}
}
İşte içeriği HelloIndia.java dosya -
package com.tutorialspoint;
public class HelloIndia {
private String message1;
private String message2;
private String message3;
public void setMessage1(String message){
this.message1 = message;
}
public void setMessage2(String message){
this.message2 = message;
}
public void setMessage3(String message){
this.message3 = message;
}
public void getMessage1(){
System.out.println("India Message1 : " + message1);
}
public void getMessage2(){
System.out.println("India Message2 : " + message2);
}
public void getMessage3(){
System.out.println("India Message3 : " + message3);
}
}
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.getMessage1();
objA.getMessage2();
HelloIndia objB = (HelloIndia) context.getBean("helloIndia");
objB.getMessage1();
objB.getMessage2();
objB.getMessage3();
}
}
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 -
World Message1 : Hello World!
World Message2 : Hello Second World!
India Message1 : Hello India!
India Message2 : Hello Second World!
India Message3 : Namaste India!
Burada gözlemlediyseniz, "helloIndia" fasulyesini oluştururken mesaj2'yi iletmedik, ancak Bean Tanımı Devralması nedeniyle geçti.
Fasulye Tanım Şablonu
Çok fazla çaba harcamadan diğer çocuk fasulye tanımları tarafından kullanılabilecek bir Bean tanımı şablonu oluşturabilirsiniz. Bir Bean Tanım Şablonu tanımlarken,class öznitelik ve belirtmeli abstract özniteliği ve soyut özniteliği bir değerle belirtmelidir true aşağıdaki kod parçacığında gösterildiği gibi -
<?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 = "beanTeamplate" abstract = "true">
<property name = "message1" value = "Hello World!"/>
<property name = "message2" value = "Hello Second World!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
<bean id = "helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "beanTeamplate">
<property name = "message1" value = "Hello India!"/>
<property name = "message3" value = "Namaste India!"/>
</bean>
</beans>
Ana fasulye, eksik olduğu için kendi başına örneklenemez ve ayrıca açıkça soyut olarak işaretlenmiştir . Bir tanım bu şekilde soyut olduğunda, yalnızca çocuk tanımları için bir ana tanım olarak hizmet eden saf bir şablon fasulye tanımı olarak kullanılabilir.