Spring - Bean Định nghĩa Kế thừa

Định nghĩa bean có thể chứa rất nhiều thông tin cấu hình, bao gồm các đối số của phương thức khởi tạo, giá trị thuộc tính và thông tin dành riêng cho vùng chứa như phương thức khởi tạo, tên phương thức nhà máy tĩnh, v.v.

Định nghĩa bean con kế thừa dữ liệu cấu hình từ định nghĩa cha. Định nghĩa con có thể ghi đè một số giá trị hoặc thêm các giá trị khác nếu cần.

Kế thừa định nghĩa Spring Bean không liên quan gì đến kế thừa lớp Java nhưng khái niệm kế thừa thì giống nhau. Bạn có thể xác định một định nghĩa bean mẹ như một khuôn mẫu và các bean con khác có thể kế thừa cấu hình bắt buộc từ bean mẹ.

Khi bạn sử dụng siêu dữ liệu cấu hình dựa trên XML, bạn chỉ ra định nghĩa bean con bằng cách sử dụng parent , chỉ định bean cha làm giá trị của thuộc tính này.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse đang hoạt động và thực hiện các bước sau để tạo một ứng dụng Spring -

Các bước Sự miêu tả
1 Tạo một dự án với tên SpringExample và tạo một gói com.tutorialspoint trongsrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Spring bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Ví dụ về Spring Hello World .
3 Tạo các lớp Java HelloWorld , HelloIndiaMainApp trong gói com.tutorialspoint .
4 Tạo tệp cấu hình Đậu Beans.xml trongsrc thư mục.
5 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng như được giải thích bên dưới.

Sau đây là tệp cấu hình Beans.xmlnơi chúng tôi đã định nghĩa bean "helloWorld" có hai thuộc tính message1message2 . Đậu "helloIndia" tiếp theo đã được xác định là con của bean "helloWorld" bằng cách sử dụngparentthuộc tính. Các kế thừa đậu con message2 tài sản như nguyên trạng và ghi đè message1 bất động sản và giới thiệu thêm một tài sản 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>

Đây là nội dung của HelloWorld.java tập tin -

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

Đây là nội dung của HelloIndia.java tập tin -

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

Sau đây là nội dung của MainApp.java tập tin -

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

Khi bạn đã hoàn tất việc tạo các tệp cấu hình nguồn và bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

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

Nếu bạn quan sát ở đây, chúng tôi đã không chuyển message2 trong khi tạo bean "helloIndia", nhưng nó đã được chuyển do Kế thừa Định nghĩa Bean.

Mẫu định nghĩa Bean

Bạn có thể tạo một mẫu định nghĩa Bean, có thể được sử dụng bởi các định nghĩa bean con khác mà không cần tốn nhiều công sức. Trong khi xác định Mẫu Định nghĩa Bean, bạn không nên chỉ địnhclass thuộc tính và nên chỉ định abstract và nên chỉ định thuộc tính trừu tượng có giá trị là true như được hiển thị trong đoạn mã sau -

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

Không thể khởi tạo bean mẹ một mình vì nó chưa hoàn chỉnh và nó cũng được đánh dấu rõ ràng là trừu tượng . Khi một định nghĩa trừu tượng như thế này, nó chỉ có thể được sử dụng như một định nghĩa bean mẫu thuần túy dùng như một định nghĩa cha cho các định nghĩa con.