Spring Bean继承
【摘要】 Spring Bean继承 Spring Bean 的定义中可以包含很多配置信息,例如构造方法参数、属性值。子 Bean 既可以继承父 Bean 的配置数据,也可以根据需要重写或添加属于自己的配置信息。 继承方法在Spring XML配置中,通过子Bean的parent属性来指定需要继承的父Bean <!--父Bean--> <bean id="parentBean" class="org....
Spring Bean 的定义中可以包含很多配置信息,例如构造方法参数、属性值。子 Bean 既可以继承父 Bean 的配置数据,也可以根据需要重写或添加属于自己的配置信息。
继承方法
<!--父Bean-->
<bean id="parentBean" class="org.example.ParentBean" >
<property name="stuId" value="1"></property>
<property name="stuName" value="张三"></property>
</bean>
<!--子Bean-->
<bean id="childBean" class="org.example.ChildBean" parent="parentBean"></bean>
代码示例:
-
Animal类(父bean)
package org.parentDemo; /** * 父Bean */ public class Animal { private String name; private Integer age; @Override public String toString() { return "Animal{" + "name='" + name + '\'' + ", age=" + age + '}'; } public void setName(String name) { System.out.println("Animal setName:" + name); this.name = name; } public void setAge(Integer age) { System.out.println("Animal setAge:" + age); this.age = age; } }
-
Dog类(子bean)
package org.parentDemo; /** * 子Bean */ public class Dog { private String name; private Integer age; private String call; @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + ", call='" + call + '\'' + '}'; } public void setName(String name) { System.out.println("Dog setName:" + name); this.name = name; } public void setAge(Integer age) { System.out.println("Dog setAge:" + age); this.age = age; } public void setCall(String call) { System.out.println("Dog setCall:" + call); this.call = call; } }
-
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--> <bean id="animal" class="org.parentDemo.Animal"> <property name="name" value="动物"/> <property name="age" value="10"/> </bean> <!--子Bean--> <bean id="dog" class="org.parentDemo.Dog" parent="animal"> <property name="name" value="阿黄"/> <property name="age" value="12"/> <property name="call" value="汪汪汪!"/> </bean> </beans>
-
Main方法
package org.parentDemo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("parentBeans.xml"); Dog dog=(Dog) context.getBean("dog"); System.out.println(dog); } }
-
运行结果
Animal setName:动物 Animal setAge:10 Dog setName:阿黄 Dog setAge:12 Dog setCall:汪汪汪! Dog{name='阿黄', age=12, call='汪汪汪!'}
Bean定义模板
如果父Bean的abstract属性值为true,则表明这个Bean是抽象的.这个抽象的父Bean只能作为模板被子Bean继承,不能被实例化,也不能被其他Bean引用,更不能在代码中根据getBean()方法获取,否则会返回错误。
在父Bean的定义中,可选择指定class属性。如果父Bean定义没有指定class属性,那么这个父Bean的abstract属性必须为true。
代码示例:
将parentBeans的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-->
<bean id="animal" abstract="true">
<property name="name" value="动物"/>
<property name="age" value="10"/>
</bean>
<!--子Bean-->
<bean id="dog" class="org.parentDemo.Dog" parent="animal">
<property name="name" value="阿黄"/>
<property name="age" value="12"/>
<property name="call" value="汪汪汪!"/>
</bean>
</beans>
运行结果: 通过控制台输出可以看出,在 Spring 启动时,并没有实例化 animal。
Dog setName:阿黄
Dog setAge:12
Dog setCall:汪汪汪!
Dog{name='阿黄', age=12, call='汪汪汪!'}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)