持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
前言
学过java的应该都知道java中的继承,而我们学习的Spring中也有继承,只不过与Java中的继承有所不同,这篇文章带你学习Spring的继承。
Spring继承概念
- Java中的继承:是类层面的继承,子类继承父类的结构信息。
- Spring中的继承:是对象层面的继承,子对象继承父对象的属性值。所以,在Spring中,不同类的对象之间也可以相互继承。
如何实现Spring继承
在子对象的bean标签中加入parent属性即可,而parent的属性值则为需要继承父对象的bean的id。
我们用代码来实现一个简单的Spring继承:
1.先创建一个Animal的类
package com.xyj;
import lombok.Data;
@Data
public class Animal {
private String name;
private int age;
}
2.创建一个Cat的类
package com.xyj;
import lombok.Data;
@Data
public class Cat {
private String name;
private int age;
private String color;
}
3.创建animal的bean并对成员变量进行赋值
<bean id="animal" class="com.xyj.Animal">
<property name="name" value="snow"></property>
<property name="age" value="1"></property>
</bean>
4.创建cat的bean并用parent属性继承animal的bean
<bean id="cat" class="com.xyj.Cat" parent="animal">
<property name="color" value="white"></property>
</bean>
5.获取cat对象并打印
Cat cat = (Cat) applicationContext.getBean("cat");
System.out.println(cat);
打印结果
Cat(name=snow, age=1, color=white)
这里我们可以看到我们cat作为子对象继承了父对象animal的成员变量的值,而且cat有animal不具有的color成员变量,说明子对象可以在父对象的基础上进行扩展。
那如果子对象对对父对象已经赋值的属性再进行赋值会怎样呢?
1.子对象对父对象已赋值的属性再进行赋值
<bean id="cat" class="com.xyj.Cat" parent="animal">
<property name="name" value="rain"></property>
<property name="age" value="2"></property>
<property name="color" value="white"></property>
</bean>
2.获取cat对象并打印
Cat cat = (Cat) applicationContext.getBean("cat");
System.out.println(cat);
打印结果
Cat(name=rain, age=2, color=white)
这时我们会看到子对象的属性值会对父对象属性值进行覆盖。
如果子对象中不定义父对象中已有的属性又会怎么样呢?
我们去掉Cat类中的name属性进行运行,此时会抛出一个异常:
Invalid property 'name' of bean class [com.xyj.Cat]: Bean property 'name' is not writable or has an invalid setter method. Did you mean 'age'?
所以Spring继承的条件是:子类必须至少包含父类的所有属性,并且属性的名称及其类型都必须一样。
Spring的继承就先介绍到这里了。