从0到1学J2EE第十三天——Spring中bean的继承

J2EE 一零 1年前 (2017-12-18) 393次浏览 0个评论

1.bean 的继承是什么?

bean 的继承是一个或者多个 bean 获得另外一个 bean 的值、属性等,子 bean 可以覆盖父 bean 的值。

2.为什么要进行 bean 的继承?

通过继承可以将共用的属性及值放到同一个父 Bean,可以减少代码量,提高效率,在避免多个 Bean 有重复共同的值或配置方面非常有用。

3.如何实现 bean 的继承?

3.1 正常继承

正常继承,父 bean 可以实例化,意思即为子 bean 可以覆盖父 bean 的值。ozdata 是父 bean,ozdatajc 是子 bean,ozdatajc 从 ozdata 那里继承了 name 属性和值“一零”,因此在输出结果时通过调用子 bean 即实现了所有信息的输出。

inConfig.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"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
    <bean id="ozdata" class="pers.onezero.jicheng.ozJich">
    	<property name="name" value="一零"/>
    </bean>
    <bean id="ozdatajc" parent="ozdata" >
    	<property name="year" value="2017" />
    	<property name="job" value="JAVA 开发工程师"/>
    </bean>
</beans>

输出结果如下:

3.2 抽象继承

继承抽象,基础模板不能实例化,实现该效果需要在 bean 中添加属性 abstract=”true”。如果要对 bean 进行实例化,在运行时则会提示报错!

inConfigAbstract.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"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
    <bean id="ozdataAb" class="pers.onezero.jicheng.ozJich" abstract="true">
    	<property name="name" value="零一"/>
    </bean>
    <bean id="ozdatajcAb" parent="ozdataAb">
    	<property name="year" value="2018"/>
    	<property name="job" value="JAVA 全栈开发工程师"/>
    </bean>
</beans>

执行结果:

错误的实例化操作:

ozJich jich = (ozJich)context.getBean("ozdataAb");
jich.printJich();

此时指向的 bean 是抽象设置的父 bean,会出现如下错误提示:

Exception in thread "main" org.springframework.beans.factory.BeanIsAbstractException: Error creating bean with name 'ozdatajcAb': Bean definition is abstract
	at org.springframework.beans.factory.support.AbstractBeanFactory.checkMergedBeanDefinition(AbstractBeanFactory.java:1271)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:281)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
	at pers.onezero.jicheng.testJich.main(testJich.java:17)

3.3 纯继承模板

纯继承模板,目的是实现相同属性共享。以上三种方式都可以实现子 bean 属性对父 bean 属性的覆盖。

inConfigChunjc.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"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
    <bean id="ozdataChun" abstract="true">
    	<property name="name" value="零零一" />
    </bean>
    <bean id="ozdatajcChun" parent="ozdataChun" class="pers.onezero.jicheng.ozJich" 
       init-method="printJich" destroy-method="cleanUp">
    	<property name="year" value="2018"/>
    	<property name="job" value="JAVA 架构师"/>
    </bean>
</beans>

执行结果:

注:

a.在本次中用了多个 xml 配置文件,因此注意利用一个主配置文件将其余文件引入。

BeanConfig.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"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
	
    <import resource="inConfig.xml"/>
    <import resource="inConfigAbstract.xml" />
    <import resource="inConfigChunjc.xml"/>
</beans>

b.本次文件的目录结构如下,ozjcInter.java 是接口文件,ozJich 是主文件,testJich 是执行文件。

c.本文的相关源码的github 地址


爱码星 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:从 0 到 1 学 J2EE 第十三天——Spring 中 bean 的继承
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到