首先先引入继承Bean配置相关概念
● Spring 允许继承bean的配置,被继承bean称为父bean.继承这个父Bean的Bean称为子Dean。
● 子Bean从父Bean中继承配置,包括Bean的属性配置。
● 子Bean也可以 覆盖 从父Bean继承过来的配置,父Bean可以作为配置模板,也可以作为Bean实例. 若只想把父Bean作为模板,可以设置的abstract属性为true,这样Spring将不会实例化这个Bean。
● 并不是元素里的所有属性都会被继承,比如: autowire,abstract等.。
● 也可以忽略父Bean的class属性,让子Bean指定自己的类,而
共享相同的属性配置.但此时abstract 必须设为true。
那么这些概念是什么意思,下面小编将进行举例说明和解释
1.继承
1.1创建父类Animal
public class Animal {
private String name;
private String run;
private int sleep;
... ( set() get() toString() )
1.2创建Cat类继承Animal类
public class Cat extends Animal {
}
1.3创建springXML配置文件
<?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:http="http://www.springframework.org/schema/c"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="animal" class="cn.itcast.CSDN.domain.Animal"
p:name="Cat" p:run="I can skip ..." p:sleep="10"></bean>
</beans>
1.4测试实体类打印
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-application.xml");
Animal animal = ctx.getBean(Animal.class);
System.out.println(animal);
输出结果:Animal{name=‘Cat’, run=‘I can skip …’, sleep=10}
1.5bean中的abstract标签的使用,表明该类是抽象类,既然是抽象类,那就是不可以被实例化的,我们在前面bean的基础上添加abstract属性,并且设置对应的布尔值
<bean id="animal" class="cn.itcast.CSDN.domain.Animal"
p:name="Cat" p:run="I can skip ..." p:sleep="10"
abstract="true"></bean>
注意:如果在测试的过程中不需要这个属性但是却忘记注释掉了,会抛异常,看到这个异常就要联想到自己哪里可能没有注释掉
No qualifying bean of type 'cn.itcast.CSDN.domain.Animal' available
1.6 添加一个Bean,类型指向Cat,并且使用parent标签指向Animal
<bean id="cat" class="cn.itcast.CSDN.domain.Cat" parent="animal"></bean>
//执行并且打印
Animal cat = ctx.getBean(Cat.class);
System.out.println(cat);
Cat cat2 = ctx.getBean(Cat.class);
System.out.println(cat2);
测试输出结果:Cat{name=‘Cat’, run=‘I can skip …’, sleep=10}
Cat{name=‘Cat’, run=‘I can skip …’, sleep=10}
注意:CatBean这里仅仅是继承了Animal,小编并没有设置任何属性任何值,所以XML文件继承方式和JAVA类的继承方式是一致的
2.抽象bean不指向Class属性
2.1.创建AnimalBean
<?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:http="http://www.springframework.org/schema/c"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="animal" abstract="true"></bean>
</beans>
2.2 创建CatBean继承AnimalBean
<bean id="cat2" class="cn.itcast.CSDN.domain.Cat"
p:name="cat" p:sleep="20" p:run="I can run too ... "
parent="animal"></bean>
然后后面使用方式都是一致的,小编这里就不作多的说明了,如果小编有什么说错的地方,欢迎大家指正。