Spring - มรดกความหมายของถั่ว

นิยาม bean สามารถมีข้อมูลคอนฟิกูเรชันจำนวนมากรวมถึงอาร์กิวเมนต์ตัวสร้างค่าคุณสมบัติและข้อมูลเฉพาะคอนเทนเนอร์เช่นวิธีการเริ่มต้นชื่อวิธีการโรงงานแบบคงที่และอื่น ๆ

นิยาม child bean สืบทอดข้อมูลคอนฟิกูเรชันจากนิยามพาเรนต์ นิยามลูกสามารถแทนที่ค่าบางค่าหรือเพิ่มค่าอื่น ๆ ได้ตามต้องการ

การสืบทอดนิยาม Spring Bean ไม่มีส่วนเกี่ยวข้องกับการสืบทอดคลาส Java แต่แนวคิดการสืบทอดนั้นเหมือนกัน คุณสามารถกำหนดนิยาม parent bean เป็นเทมเพลตและ child bean อื่น ๆ สามารถสืบทอดคอนฟิกูเรชันที่ต้องการจาก parent bean

เมื่อคุณใช้ข้อมูลเมตาของคอนฟิกูเรชันแบบ XML คุณระบุนิยามลูกบีนโดยใช้ parent แอตทริบิวต์ระบุถั่วแม่เป็นค่าของแอตทริบิวต์นี้

ตัวอย่าง

ให้เรามี Eclipse IDE ที่ใช้งานได้และทำตามขั้นตอนต่อไปนี้เพื่อสร้างแอปพลิเคชัน Spring -

ขั้นตอน คำอธิบาย
1 สร้างโปรเจ็กต์ด้วยชื่อSpringExampleและสร้างแพ็คเกจcom.tutorialspointภายใต้ไฟล์src โฟลเดอร์ในโครงการที่สร้างขึ้น
2 เพิ่มไลบรารี Spring ที่จำเป็นโดยใช้ตัวเลือกเพิ่ม JAR ภายนอกตามที่อธิบายไว้ในบทตัวอย่าง Spring Hello World
3 สร้างคลาส Java HelloWorld , HelloIndiaและMainAppภายใต้แพ็คเกจcom.tutorialspoint
4 สร้างไฟล์คอนฟิกูเรชัน Beans Beans.xmlภายใต้ไฟล์src โฟลเดอร์
5 ขั้นตอนสุดท้ายคือการสร้างเนื้อหาของไฟล์ Java และไฟล์ Bean Configuration ทั้งหมดและเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

ต่อไปนี้คือไฟล์กำหนดค่า Beans.xmlที่เรากำหนดไว้ "helloWorld" ถั่วซึ่งมีสองคุณสมบัติmessage1และmessage2 ถั่ว "helloIndia" ถัดไปถูกกำหนดให้เป็นลูกของถั่ว "helloWorld" โดยใช้parentแอตทริบิวต์ เด็กถั่วสืบทอดmessage2คุณสมบัติตามที่เป็นอยู่และการแทนที่message1ทรัพย์สินและแนะนำอีกหนึ่งคุณสมบัติmessage3

<?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>

นี่คือเนื้อหาของ HelloWorld.java ไฟล์ -

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);
   }
}

นี่คือเนื้อหาของ HelloIndia.java ไฟล์ -

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);
   }
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ MainApp.java ไฟล์ -

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();
   }
}

เมื่อคุณสร้างไฟล์การกำหนดค่าซอร์สและบีนเสร็จแล้วให้เราเรียกใช้แอปพลิเคชัน หากทุกอย่างเรียบร้อยดีกับแอปพลิเคชันของคุณแอปพลิเคชันของคุณจะพิมพ์ข้อความต่อไปนี้ -

World Message1 : Hello World!
World Message2 : Hello Second World!
India Message1 : Hello India!
India Message2 : Hello Second World!
India Message3 : Namaste India!

หากคุณสังเกตที่นี่เราไม่ได้ส่งผ่าน message2 ในขณะที่สร้าง "helloIndia" bean แต่มันผ่านไปได้เนื่องจากการสืบทอดความหมายของถั่ว

เทมเพลตคำจำกัดความของถั่ว

คุณสามารถสร้างเทมเพลตคำจำกัดความ Bean ซึ่งสามารถใช้โดยคำจำกัดความลูกถั่วอื่น ๆ ได้โดยไม่ต้องออกแรงมาก ในขณะที่กำหนด Bean Definition Template คุณไม่ควรระบุไฟล์class แอตทริบิวต์และควรระบุ abstract แอตทริบิวต์และควรระบุแอตทริบิวต์นามธรรมด้วยค่า true ดังแสดงในข้อมูลโค้ดต่อไปนี้ -

<?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>

ถั่วผู้ปกครองไม่สามารถ instantiated ในตัวเองเพราะมันเป็นที่ไม่สมบูรณ์และยังมีการทำเครื่องหมายอย่างชัดเจนเป็นนามธรรม เมื่อคำจำกัดความเป็นนามธรรมเช่นนี้จะใช้ได้เฉพาะในฐานะนิยามแม่แบบบีนบริสุทธิ์ที่ทำหน้าที่เป็นคำนิยามหลักสำหรับนิยามลูก