子 Bean 的定义继承父定义的配置数据。Spring Bean 定义的继承与 Java 类的继承无关,但是继承的概念是一样的。你可以定义一个父 bean 的定义作为模板和其他子 bean 就可以从父 bean 中继承所需的配置。通过使用父属性,指定父 bean 作为该属性的值来表明子 bean 的定义
案例代码:
Person.java
package com.baklib.custom;public class Person {private String name;private String action;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAction() {return action;}public void setAction(String action) {this.action = action;}public void doAction(){System.out.println(this.getName()+"的动作是"+this.getAction());}}
Buyer.java
package com.baklib.custom;public class Buyer {private String name;private String action;private String carType;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAction() {return action;}public void setAction(String action) {this.action = action;}public String getCarType() {return carType;}public void setCarType(String carType) {this.carType = carType;}public void doAction(){System.out.println(this.getName()+"的动作是"+this.getAction());}public void buyCar(){System.out.println(this.getName()+this.getAction()+this.getCarType());}}
MainApp.java
package com.baklib.custom;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");Person person = (Person) context.getBean("person");person.doAction();Buyer buyer = (Buyer) context.getBean("buyer");buyer.doAction();buyer.buyCar();}}
配置文件 Beans.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="person" class="com.baklib.custom.Person"><property name="name" value="张三" /><property name="action" value="什么都不做" /></bean><bean id="buyer" class="com.baklib.custom.Buyer" parent="person"><property name="action" value="购买" /><property name="carType" value="小轿车" /></bean></beans>
编写完以上代码,就可以运行这个程序,运行结束后,可以在控制台看到下面的信息
张三的动作是什么都不做张三的动作是购买张三购买小轿车
Bean 定义模板
定义一个 Bean 定义模板时,需要指定带 true 值的抽象属性
案例代码:
只需修改MainApp.java和Beans.xml
MainApp.java
package com.baklib.custom;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");Buyer buyer = (Buyer) context.getBean("buyer");buyer.doAction();buyer.buyCar();}}
配置文件 Beans.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义抽象 Bean 模板 --><bean id="beanTemplate" abstract="true"><property name="name" value="张三" /><property name="action" value="什么都不做" /><property name="carType" value="小轿车" /></bean><bean id="buyer" class="com.baklib.custom.Buyer" parent="beanTemplate"><property name="action" value="购买" /><property name="carType" value="小轿车" /></bean></beans>
编写完以上代码,就可以运行这个程序,运行结束后,可以在控制台看到下面的信息
张三的动作是购买张三购买小轿车
