bean定义的继承 - Spring Framework reference 2.0.5 参考手册中文版
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch03s06.html
3.6. bean定义的继承
在bean定义中包含了大量的配置信息,其中包括容器相关的信息(比如初始化方法、静态工厂方法名等等)以及构造器参数和属性值。子bean定义就是从父bean定义继承配置数据的bean定义。它可以覆盖父bean的一些值,或者添加一些它需要的值。使用父/子bean定义的形式可以节省很多的输入工作。实际上,这就是一种模板形式。
当以编程的方式使用BeanFactory
时,子bean定义用ChildBeanDefinition
类表示。大多数用户从来不需要以这个方式使用它们,而是以类似XmlBeanFactory
中的声明方式去配置bean定义。当使用基于XML的配置元数据时,给'parent'
属性指定值,意味着子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定义没有指定class属性,它将使用父bean定义的class属性,当然也可以覆盖它。在后面一种情况中,子bean的class属性值必须同父bean兼容,也就是说它必须接受父bean的属性值。
一个子bean定义可以从父bean继承构造器参数值、属性值以及覆盖父bean的方法,并且可以有选择地增加新的值。如果指定了init-method,destroy-method和/或静态
factory-method,它们就会覆盖父bean相应的设置。
剩余的设置将总是从子bean定义处得到:依赖、自动装配模式、依赖检查、singleton、作用域和延迟初始化。
注意在上面的例子中,我们使用abstract属性显式地将父bean定义标记为抽象的。 下面是个父bean定义并没有指定class属性的例子,其中父bean必须显式地标上abstract
:
<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是不完整的,而且还被显式标记为抽象的
,因而它无法得到自己的实例。抽象
bean定义可作为子bean定义的模板。若要尝试单独使用这样的父bean(比如将它作为其他bean的ref属性而引用,或者直接使用这个父bean的id作为参数调用getBean()
方法),将会导致错误。同样地,容器内部的preInstantiateSingletons()
方法会完全忽略abstract的bean定义。
注意
默认情况下,ApplicationContext
(不是BeanFactory
)会预实例化所有singleton的bean。因此很重要的一点是:如果你只想把一个(父)bean定义当作模板使用,而它又指定了class属性,那么你就得将'abstract'属性设置为'true',否则应用上下文将会(试着)预实例化抽象
bean。
parent的作用就是减少代码量。当有几个bean需要一些相同的属性时,可将相同的部分提出所见代码。
例如:
<bean name="txProxyFactoryBean" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>org.cain.spring.transaction.IUserService</value>
</list>
</property>
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean name="proxyUserService" parent="txProxyFactoryBean">
<property name="target" ref="UserService" />
</bean>
<bean name="UserService" class="org.cain.spring.transaction.UserService" >
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
parent bean需要把abstract属性设置为true。 在proxy里没有定义target属性,所以一定要在bean里加上 abstract="true"
bean定义的继承 - Spring Framework reference 2.0.5 参考手册中文版相关推荐
- 使用ProxyFactoryBean创建AOP代理 - Spring Framework reference 2.0.5 参考手册中文版
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch07s05.html 7.5. 使用ProxyFactoryBean创建AOP代 ...
- Spring Framework Reference Documentation手册官网下载地址
之前在国内资源网站遇见很多Spring Framework Reference Documentation 开发手册下载的,居然都要资源点之类的,而且几乎都是英语(截止到2016/06/15,较新版本 ...
- Spring Framework 5.3.0正式发布,在云原生路上继续发力
不是井里没有水,而是你挖的不够深.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号 ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至: https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc ...
- 【Spring】Spring Framework Reference Documentation中文版18
Part VI. The Web This part of the reference documentation covers Spring Framework's support for the ...
- Spring Bean 定义继承
转载自 Spring Bean 定义继承 Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的 ...
- 【Spring】Spring Bean 定义继承
Spring Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定 ...
- Spring的bean定义 2 : 通用bean定义逻辑 -- AbstractBeanDefinition
概述 AbstractBeanDefinition是最终全功能BeanDefinition实现类的基类,也就是这些类的共同属性和公共逻辑实现. AbstractBeanDefinition中并没有太复 ...
- 零配置 之 Spring注解实现Bean定义
转载自 零配置 之 12.3 注解实现Bean定义 --跟我学spring3 12.3 注解实现Bean定义 12.3.1 概述 前边介绍的Bean定义全是基于XML方式定义配置元数据,且在[1 ...
最新文章
- Linux下通过gettimeofday函数获取程序段执行时间
- 【大牛云集】悉尼科技大学ReLER实验室介绍
- wget指定目录下载以及其它的使用方式
- c++ 读文件_Linux文件(文件夹)详解
- 百度浏览器支持html5,百度手机浏览器完美驾驭HTML5
- 【转】从源码分析PreparedStatement是如何防止SQL注入的?
- tensorflow综合示例5:图象分割
- Java EE 8中的MVC 1.0:使用Facelets入门
- linux 文件中搜索字符串命令 grep
- 1115 Counting Nodes in a BST(甲级)
- idea的总部_雷普索尔- YPF总部
- 《iOS 9 开发指南》——第6章,第6.7节iOS 9控件的属性
- VxWorks任务调度
- 因子分析累计贡献率_spss教程:因子分析
- Linux 教程: (Linux基础+命令大全)
- 一篇文章带你登顶 MacBook高效工作环境配置
- matlab与vrep联合仿真,MATALB与VREP联合仿真
- 计算机时间单位,时间单位换算表与计算机单位换算
- ios开发调用系统相机(照片/视频)
- 手机RAM ROM TF
热门文章
- 【数据结构与算法】之深入解析“二叉树的后序遍历”的求解思路与算法示例
- Spark is not running in local mode, therefore the checkpoint directory must not be on the local……
- Django 模型 —— 字段类型
- 《数据库原理与应用》(第三版) 第4章SQL Server 2012基础 习题参考答案
- 并发编程——线程——Thread对象的属性和方法
- 树莓派AI视觉云台——4、树莓派的登录控制方式
- 大数据WEB阶段(十九)Threadlocal
- ROS自定义地图(CAD、手绘等)
- CCS5.5环境下使用clock()函数测试程序段运行时间
- LeetCode 190. Reverse Bits (算32次即可)