Spring Bean 定义的继承与 Java 类的继承无关,但是继承的概念是一样的。你可以定义一个父 bean 的定义作为模板和其他子 bean 就可以从父 bean 中继承所需的配置。
先给出demo
HelloChian.java
package com.yc2;
public class HelloChian {
private String massage1;
private String massage2;
private String massage3;
public void setMassage1(String massage1) {
this.massage1 = massage1;
}
public void setMassage2(String massage2) {
this.massage2 = massage2;
}
public void setMassage3(String massage3) {
this.massage3 = massage3;
}
public void getMassage1() {
System.out.println("chian massage1:"+massage1);
}
public void getMassage2() {
System.out.println("chian massage2:"+massage2);
}
public void getMassage3() {
System.out.println("chian massage3:"+massage3);
}
}
HelloSpring2.java
package com.yc2;
public class HelloSpring2{
private String massage1;
private String massage2;
public void getMassage1() {
System.out.println("your massage1:"+massage1);
}
public void getMassage2() {
System.out.println("your massage2:"+massage2);
}
public void setMassage1(String massage1) {
this.massage1 = massage1;
}
public void setMassage2(String massage2) {
this.massage2 = massage2;
}
}
Bean2.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-3.0.xsd">
<!--【scope】 spring bean的“作用域”设置属性 【singleton】 为default的 在loc 容器中就是单例存在的 -->
<!-- HelloSpring2 -->
<bean id="helloSpring2" class="com.yc2.HelloSpring2" scope="singleton">
<property name="massage1" value="Hello Spring massage1!"/>
<property name="massage2" value="Hello Spring massage2!"/>
</bean>
<bean id="helloChian" class="com.yc2.HelloChian" parent="helloSpring2">
<property name="massage1" value="Hello Chian massage1!"/>
<property name="massage3" value="Hello Chian massage3!"/>
</bean>
</beans>
测试类 MainApp2.java
package com.yc2;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp2 {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Bean2.xml");
HelloChian helloChian = (HelloChian) context.getBean("helloChian");
helloChian.getMassage1();
helloChian.getMassage2();
helloChian.getMassage3();
}
}
运行结果:
可以看到 "helloChian" bean 他继承了 "helloSpring2" bean 在不设置 helloChian中的 massage2 时,它的属性自动就继承了 helloSpring2 中的 massage2。 虽然 massage1 也有继承 只是 可以被用来重写!