Learn Spring - Bean配置继承(配置重用)
Posted
关于Bean配置继承
为了Bean配置的复用,Spring中有Bean配置继承的概念。通过parent属性标识从哪个Bean继承配置信息。类似于面向对象里的概念,子Bean可以覆盖父Bean的配置。还可以设置Bean配置的 abstract属性为true,将该Bean设置为一个模板,其它Bean继承它的模板配置。类似于Java中的抽象类,abstract的Bean不允许实例化。
Example
目录结构

Code
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-3.0.xsd">
<bean id = "helloWorld" class = "me.coolcodes.HelloWorld">
<property name = "message1" value = "Message1"/>
<property name = "message2" value = "Message2"/>
</bean>
<bean id="helloSpring" class="me.coolcodes.HelloSpring" parent="helloWorld">
<property name = "message3" value = "Message3"/>
<property name = "message4" value="Message4"></property>
</bean>
</beans>
helloSpring继承了helloWorld的配置(即message1 和 message2)
HelloWorld.java
package me.coolcodes;
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 Message : " + message1);
}
public void getMessage2(){
System.out.println("World Message : " + message2);
}
}
HelloSpring.java
package me.coolcodes;
public class HelloSpring {
private String message1;
private String message2;
private String message3;
private String message4;
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 setMessage4(String message){
this.message4 = message;
}
public void getMessage1(){
System.out.println("Spring Message : " + message1);
}
public void getMessage2(){
System.out.println("Spring Message : " + message2);
}
public void getMessage3(){
System.out.println("Spring Message : " + message3);
}
public void getMessage4(){
System.out.println("Spring Message : " + message4);
}
}
Main.java
package me.coolcodes;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
HelloSpring objB = (HelloSpring) context.getBean("helloSpring");
objA.getMessage1();
objA.getMessage2();
objB.getMessage1();
objB.getMessage2();
objB.getMessage3();
objB.getMessage4();
}
}
分别输出HelloWorld的message1 和 message2。HelloSpring的message1、message2、message3、message4。
结果

HelloSpring的message1和message2的值继承自HelloWorld。