java bean】bean的继承"/>
【java bean】bean的继承
如果两个bean定义比较类似,那么我们可以选择将其中一个bean继承自另外一个bean,然后在此基础上添加或者重写标签,增加复用性。
为了演示,我们定义两个类
人类:
public class People
{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +'}';}
}
老师类:
public class Teacher
{private String name;private int salary;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}@Overridepublic String toString() {return "Teacher{" +"name='" + name + '\'' +", salary=" + salary +'}';}
}
可以看到两个类属性比较相似,老师类只是多了一个薪水属性,所以我们定义bean的时候没必要两个都一一定义,老师类的bean可以继承人类,然后在此基础上再定义一个薪水属性。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><bean id="people" class="upc.yqs.People"><property name="name" value="a people"></property></bean><bean id="teacher1" class="upc.yqs.Teacher" parent="people"><property name="salary" value="5000"></property></bean><bean id="teacher2" class="upc.yqs.Teacher" parent="people"><property name="name" value="a teacher"></property><property name="salary" value="7000"></property></bean>
</beans>
可以看到teacher1和teacher2都继承了people,teacher1新增了一个salary属性,由于没重写name属性,所以name就沿用了people的name。teacher2不仅新增了salary属性,还重写了name。
接下来写一个测试方法:
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class InheritTest
{ApplicationContext context;@Beforepublic void getContext() {context = new ClassPathXmlApplicationContext("people_and_teacher.xml");}@Testpublic void InheritTest(){People people=(People) context.getBean("people");Teacher teacher1=(Teacher) context.getBean("teacher1");Teacher teacher2=(Teacher) context.getBean("teacher2");System.out.println(people);System.out.println(teacher1);System.out.println(teacher2);}
}
输出结果:
People{name='a people'}
Teacher{name='a people', salary=5000}
Teacher{name='a teacher', salary=7000}
说到继承,如果有多个bean都有很多共同的标签,那么我们可以定义一个模板bean,专门用来当模板,如果想要定义模板bean的话,我们要设置abstract=“true”,表示这个bean是抽象的,这和java中的抽象类很相似。如果一个bean被定义为抽象的,那么spring就不会实例化它了,而是忽略它。
比如这样:
<bean id="teacher_template" class="upc.yqs.People" abstract="true"><property name="name" value="teacher"></property>
</bean>
更多推荐
【java bean】bean的继承
发布评论