Spring IOC 之Bean定义的继承
一个Bean的定义可以包含大量的配置信息,包括构造器参数、属性值以及容器规范信息,比如初始化方法、静态工厂方法名字等等。一子bean的定义可以从父bean的定义中继承配置数据信息。子bean定义可以覆盖一些值只要需要也可以增加其他的值。使用父bean定义和子bean定义可以接受大量的类型说明。实际上,这也是一种形式的模板。
如果你在程序中使用一个ApplicationContext接口,子bean定义就是通过ChildBeanDefinition类来表示的。大部分用户不会在这个级别来处理它们,它们会在比如ClassPathXMLApplicationContext这样的类中进行配置bean的声明。当你使用基于XML的配置信息,你通过使用parent属性来表示一个子bean,通过这个属性可以指明父bean的值。
<bean id="inheritedTestBean" abstract="true"
class="org.springframework.beans.TestBean">
<property name="name" value="parent"/>
<property name="age" value="1"/>
</bean>
<bean id="inheritsWithDifferentClass"
class="org.springframework.beans.DerivedTestBean"
parent="inheritedTestBean" init-method="initialize">
<property name="name" value="override"/>
<!-- the age property value of 1 will be inherited from parent -->
</bean>
如果一个子bean的定义中什么都没有指明的话,那么它就会使用父bean的定义,但是也它可以覆盖父类。在后一种的情形中,子bean类必须和父bean是兼容的,也即是说,它必须接受父bean的属性值。
一个子bean从父bean中继承了构造器参数值、属性值可以覆盖父的方法也可以根据需要选择区增加心得之。任何你指明的的初始化方法、销毁方法或者是静态工厂方法设置都会覆盖相关的父类设置。
剩下的设置就会直接从之类中获取:depends on、awire mode、dependency check、singlethon、scope、lazy init。
前面的例子明确的标记了父bean定义是一个抽象类通过使用abstruct属性。如果父定义没有指明一个类、这个表明bean定义是一个abstruct是必须的,正如下面一样:
<bean id="inheritedTestBeanWithoutClass" abstract="true">
<property name="name" value="parent"/>
<property name="age" value="1"/>
</bean>
<bean id="inheritsWithClass" class="org.springframework.beans.DerivedTestBean"
parent="inheritedTestBeanWithoutClass" init-method="initialize">
<property name="name" value="override"/>
<!-- age will inherit the value of 1 from the parent bean definition-->
</bean>
父bean不能够被自己实例化因为它是不完整的而且它被显示的标记为abstruct。当一个bean定义像这样是abstruct的,它作为一个充当子定义的父定义的纯净的模板是可复用的。如果试着去使用这个abstruct父bean,通过引用它作为其他bean的属性或者使用父bean的id显示的调用getBean()就会返回一个错误,相似的是,容器的内部的preInstantiateSingletons()方法会忽略那些定义为abstract的bean的定义。
注意:ApplicationContext默认情况会下提前实例化所有的单例。也就是说,如果你有一个打算用来作为一个模板的bean定义而且这个定义指明了一个类,你必须确认abstract属性时true,要不然的话ApplicationContext会提前实例化这个 abstract的bean。
Spring IOC 之Bean定义的继承的更多相关文章
- 使用Spring IoC进行Bean装配
Spring概述 Spring的设计严格遵从的OCP(开闭原则),保证对修改的关闭,也就是外部无法改变spring内部的运行流程:提供灵活的扩展接口,也就是可以通过extends,implements ...
- [译]11-spring bean定义的继承
spring中bean的定义包含很多信息,如,构造器参数.property指定的依赖项.初始化方法.工厂类和工厂方法等. 如果spring容器的中每个bean都重复声明这些属性,是非常烦人也是十分低效 ...
- 品Spring:负责bean定义注册的两个“排头兵”
别看Spring现在玩的这么花,其实它的“筹码”就两个,“容器”和“bean定义”. 只有先把bean定义注册到容器里,后续的一切可能才有可能成为可能. 所以在进阶的路上如果要想走的顺畅些,彻底搞清楚 ...
- Spring(五)之Bean定义继承和依赖注入
一.Bean定义继承 bean定义可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,例如初始化方法,静态工厂方法名称等. 子bean定义从父定义继承配置数据.子定义可以根据需要覆盖某些 ...
- Spring IOC之Bean 概述
1.Bean概述 一个Spring IOC容器管理一个或者多个bean.这些bean是根据你提供给容器的配置数据信息创建的,例如XML形式的的定义. 在容器内部,这些bean的定义表示为BeanDef ...
- Spring IOC 之Bean作用域
当你创建一个bean定义的时候,你创建了一份通过那种bean定义的bean的创建类的真正实力的处方.bean的定义是一个处方 的想法是很重要的的.因为这意味着,对于一个类你可以创建很多对象实例从一个单 ...
- Spring IOC的Bean对象
---恢复内容开始--- 在Spring IOC模块中Bean是非常重要的.在这里我想给大家讲讲关于Bean对象实例化的三种注入方式: 首先,我先讲一下关于Bean对象属性值的两种注入方式:set注入 ...
- 品Spring:实现bean定义时采用的“先进生产力”
前景回顾 当我们把写好的业务代码交给Spring之后,Spring都会做些什么呢? 仔细想象一下,再稍微抽象一下,Spring所做的几乎全部都是: “bean的实例化,bean的依赖装配,bean的初 ...
- spring IOC装配Bean(注解方式)
1 Spring的注解装配Bean (1) Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean (2) Spring的框架中提供了与@Componen ...
随机推荐
- Class撑起了OOP世界的天。Class类是OO的基本单元,OO的世界都是通过一个一个的类协作完成的,提高软件的重用性、灵活性和扩展性(转)
引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的“社会”关系,从而让我们抛弃书上的那些死记硬背的概 ...
- Eclipse+Maven创webapp工程
1.开启eclipse,右键new-->other,例如以下图找到maven project. 选择maven project,点击next 2.选择maven project后.显示创建mav ...
- git-push(1) Manual Page
git-push(1) Manual Page NAME git-push - Update remote refs along with associated objects SYNOPSIS gi ...
- Code digest
private void travelDir(String filepath) { String threadName = Thread.currentThread().toString(); log ...
- POJ 3934 Queue(DP)
Queue Description Linda is a teacher in ACM kindergarten. She is in charge of n kids. Because the di ...
- debian(wheezy) chrome beta 38.0.2x.xxx Shockwave Flash was crashed 该解决方案崩溃.
版本号chrome beta升级到38.0.2x.xxx什么时候, flash他挂了. 调试 ./libpepflashplayer.so: /lib/x86_64-linux-gnu/libc.so ...
- Android Volley 之自己定义Request
转载标明出处:http://blog.csdn.net/lmj623565791/article/details/24589837 今天群里一哥们须要自己定义Volley的Request的样例,于是产 ...
- Log4jdbc demo
package log4jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import org.junit.Te ...
- Android SDCard Mount 流程分析
前段时间对Android 的SDCard unmount 流程进行了几篇简短的分析,由于当时只是纸上谈兵,没有实际上的跟进,可能会有一些误导人或者小错误.今天重新梳理了头绪,针对mount的流程再重新 ...
- 他的第一个NDK的Demo
DEMO下载链接: http://download.csdn.net/detail/logicsboy/7535409 首先给你们恶补下啥是NDK:(我从百度Copy的) NDK全称:Native D ...