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。

===============
http://semimadtech.ycool.com/post.4315511.html

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 参考手册中文版相关推荐

  1. 使用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代 ...

  2. Spring Framework Reference Documentation手册官网下载地址

    之前在国内资源网站遇见很多Spring Framework Reference Documentation 开发手册下载的,居然都要资源点之类的,而且几乎都是英语(截止到2016/06/15,较新版本 ...

  3. Spring Framework 5.3.0正式发布,在云原生路上继续发力

    不是井里没有水,而是你挖的不够深.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号 ...

  4. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至: https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc ...

  5. 【Spring】Spring Framework Reference Documentation中文版18

    Part VI. The Web This part of the reference documentation covers Spring Framework's support for the ...

  6. Spring Bean 定义继承

    转载自  Spring Bean 定义继承 Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的 ...

  7. 【Spring】Spring Bean 定义继承

    Spring Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定 ...

  8. Spring的bean定义 2 : 通用bean定义逻辑 -- AbstractBeanDefinition

    概述 AbstractBeanDefinition是最终全功能BeanDefinition实现类的基类,也就是这些类的共同属性和公共逻辑实现. AbstractBeanDefinition中并没有太复 ...

  9. 零配置 之 Spring注解实现Bean定义

    转载自  零配置 之 12.3 注解实现Bean定义 --跟我学spring3 12.3  注解实现Bean定义 12.3.1  概述 前边介绍的Bean定义全是基于XML方式定义配置元数据,且在[1 ...

最新文章

  1. Linux下通过gettimeofday函数获取程序段执行时间
  2. 【大牛云集】悉尼科技大学ReLER实验室介绍
  3. wget指定目录下载以及其它的使用方式
  4. c++ 读文件_Linux文件(文件夹)详解
  5. 百度浏览器支持html5,百度手机浏览器完美驾驭HTML5
  6. 【转】从源码分析PreparedStatement是如何防止SQL注入的?
  7. tensorflow综合示例5:图象分割
  8. Java EE 8中的MVC 1.0:使用Facelets入门
  9. linux 文件中搜索字符串命令 grep
  10. 1115 Counting Nodes in a BST(甲级)
  11. idea的总部_雷普索尔- YPF总部
  12. 《iOS 9 开发指南》——第6章,第6.7节iOS 9控件的属性
  13. VxWorks任务调度
  14. 因子分析累计贡献率_spss教程:因子分析
  15. Linux 教程: (Linux基础+命令大全)
  16. 一篇文章带你登顶 MacBook高效工作环境配置
  17. matlab与vrep联合仿真,MATALB与VREP联合仿真
  18. 计算机时间单位,时间单位换算表与计算机单位换算
  19. ios开发调用系统相机(照片/视频)
  20. 手机RAM ROM TF

热门文章

  1. 【数据结构与算法】之深入解析“二叉树的后序遍历”的求解思路与算法示例
  2. Spark is not running in local mode, therefore the checkpoint directory must not be on the local……
  3. Django 模型 —— 字段类型
  4. 《数据库原理与应用》(第三版) 第4章SQL Server 2012基础 习题参考答案
  5. 并发编程——线程——Thread对象的属性和方法
  6. 树莓派AI视觉云台——4、树莓派的登录控制方式
  7. 大数据WEB阶段(十九)Threadlocal
  8. ROS自定义地图(CAD、手绘等)
  9. CCS5.5环境下使用clock()函数测试程序段运行时间
  10. LeetCode 190. Reverse Bits (算32次即可)