本例子源於:W3CSchool,在此作記錄
bean 定義可以包含很多的配置信息,包括構造函數的參數,屬性值,容器的具體信息例如初始化方法,靜態工廠方法名,等等。
子 bean 的定義繼承父定義的配置數據。子定義可以根據需要重寫一些值,或者添加其他值。
Spring Bean 定義的繼承與 Java 類的繼承無關,但是繼承的概念是一樣的。你可以定義一個父 bean 的定義作為模板和其他子 bean 就可以從父 bean 中繼承所需的配置。
當你使用基於 XML 的配置元數據時,通過使用父屬性,指定父 bean 作為該屬性的值來表明子 bean 的定義。
其實這個繼承和java繼承是差不多一樣的理解,你可以在子類中重寫父類的屬性,如果沒有重寫就默認繼承父類的,自己照着例子做一般,順便做一下自己的筆記,總比看一遍下來好!
bu duo bibi,zhi jie kan dai ma
HelloIndia.java
package com.how2java.w3cschool.inherit; public class HelloIndia { private String message1; private String message2; private String message3; public void setMessage1(String message1) { this.message1 = message1; } public void setMessage2(String message2) { this.message2 = message2; } public void setMessage3(String message3) { this.message3 = message3; } public void getMessage1() { System.out.println("India message is:" + message1); } public void getMessage2() { System.out.println("India message is :" + message2); } public void getMessage3() { System.out.println("India message is:" + message3); } }
HelloWorld.java
package com.how2java.w3cschool.inherit; public class HelloWorld { private String message1; private String message2; public void getMessage1() { System.out.println("World message is:" + message1); } public void setMessage1(String message1) { this.message1 = message1; } public void getMessage2() { System.out.println("World message is:" + message2); } public void setMessage2(String message2) { this.message2 = message2; } }
MainApp.java
package com.how2java.w3cschool.inherit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("BeanInherit.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.getMessage1(); objA.getMessage2(); HelloIndia objB = (HelloIndia) context.getBean("helloIndia"); objB.getMessage1(); objB.getMessage2(); objB.getMessage3(); } }
BeanInherit.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id ="helloWorld" class ="com.how2java.w3cschool.inherit.HelloWorld">
<property name="message1" value="Hello World!"/>
<property name="message2" value="Hello Second World!"/>
</bean>
<bean id ="helloIndia" class ="com.how2java.w3cschool.inherit.HelloIndia" parent="helloWorld">
<property name ="message1" value ="Hello India"/>
<property name ="message3" value ="Namaste India"/>
</bean>
</beans>
在這個例子中
<bean id ="helloIndia" class ="com.how2java.w3cschool.inherit.HelloIndia" parent="helloWorld">
指定了1 helloIndia這個bean的父bean是HelloWorld,並且接下來的這兩句指定了子bean“重寫”了父bean的getmessage1和getmessage3這個兩個方法,(value的值其實是傳給setmessage1和setmessage3這兩個方法的)
<property name ="message1" value ="Hello India"/>
<property name ="message3" value ="Namaste India"/>
因此結果可以猜到getmessage1和getmessage3的結果以子bean的為准,而getmessage2的結果繼承了父bean的
輸出結果如下: