必要条件:1、子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性。

2、父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工厂实例化该bean

注:好多人将parent指向的类说是子类继承了父类,其实说法不正确,正确的说法应该是子bean父bean而不是子类父类,因为如果子bean指定的类已经继承了其他的类,那么在这里一样可以有一个父bean,(如果真像大家说的那样那不成多重继承了吗)

1、如果父bean有class属性,而子bean没有,那么子bean的class就和父bean相同 例如:

 <beans>
...
<bean id="testProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true"> //********(1)
<property name="transactionManager" >
<ref bean="transactionManager"/>
</property>
<property name="proxyTargetClass" value="true" /> <property name="transactionAttributes">
<props>
<prop key="*insert*">PROPAGATION_REQUIRED</prop>
<prop key="*select*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean> <bean id="test" parent="testProxy">
<property name="target">
<ref bean="testit"/> //******(2)
</property>
</bean>
</beans>

  为了解决代码的低重用,我在testProxy里没有定义target属性,targe属性t的定义放在了外面一个bean里,这个bean继承了testProxy(parent),这样bean中parent中已注入的属性不需要再注入,在子bean中只需要注入还没有注入的属性即可!注意:也只能注入

TransactionProxyFactoryBean

中有的属性,重复了覆盖,但是不能注入其他任何属性

2、如果父bean没有定义class属性,子bean必须定义class属性,这时候父bean实际上仅仅是一个纯模版或抽象bean,仅仅充当子定义的父定义。若要尝

 <beans>
<bean id="parentBean">
<property name="name"><value>parent</value></property>
<property name="age"><value>1</value></property>
</bean>
<bean id="sunBean" class="SunBean"
parent="parentBean" init-method="initialize">
<property name="name"><value>override</value></property>
</bean>

  试单独使用这样的parent bean(比如将它作为其他bean的ref属性而引用,或者直接使用这个parent bean的id调用getBean()方法),将会导致一个错误。这个父bean的功能也就是为了减少配置的书写而采用的,举例如下,如果有n个bean都要配置m个相同的属性,如果不采用父bean概念,将要配置这m个属性n次,采用父bean方式将这共同的m个属性配置在父bean中,而在这n个bean中都增加一个parent属性 指向那个bean就可以。(这里的m个属性也要满足必要条件,都在子bean对应的类中定义)

spring bean parent属性详解的更多相关文章

  1. Spring Bean生命周期详解

    对象生命周期:创建(实例化----初始化)---使用----销毁,而在Spring中,Bean对象周期当然遵从这一过程,但是Spring提供了许多对外接口,允许开发者对三个过程(实例化.初始化.销毁) ...

  2. spring配置文件各个属性详解

    一.引用外部属性文件 <bean id="propertyConfigurer" class="org.springframework.beans.factory. ...

  3. Spring - <bean parent="xxx" 属性>

    总结 必要条件: 1.子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性. 2.父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工 ...

  4. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)

    上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...

  5. Spring中的@Transactional(rollbackFor = Exception.class)属性详解

    序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法: 异常 如下图所示,我们都 ...

  6. coding++:Spring中的@Transactional(rollbackFor = Exception.class)属性详解

    异常: 如下图所示,我们都知道 Exception 分为 运行时异常 RuntimeException 和 非运行时异常. error 是一定会回滚的. 如果不对运行时异常进行处理,那么出现运行时异常 ...

  7. Spring Batch(4): Job详解

    Spring Batch(4): Job详解 2016-03-26 18:46 870人阅读 评论(1) 收藏 举报  分类: Spring(6)  版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  8. Spring IoC createBean 方法详解

    前言 本篇文章主要分析 Spring IoC 的 createBean() 方法的流程,以及 bean 的生命周期. 下面是一个大致的流程图: 正文 AbstractAutowireCapableBe ...

  9. Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现

    我们在前文中已经介绍了SpringAOP的切面实现和创建动态代理的过程,那么动态代理是如何工作的呢?本文主要介绍Cglib动态代理的案例和SpringAOP实现的原理.@pdai Spring框架系列 ...

随机推荐

  1. codevs 1014 装箱问题 2001年NOIP全国联赛普及组

    题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若 ...

  2. POJ 2425 A Chess Game 博弈论 sg函数

    http://poj.org/problem?id=2425 典型的sg函数,建图搜sg函数预处理之后直接求每次游戏的异或和.仍然是因为看不懂题目卡了好久. 这道题大概有两个坑, 1.是搜索的时候vi ...

  3. HDU 6035 Colorful Tree (树形DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6035 [题目大意] 给出一颗树,一条路径的价值为其上点权的种类数,求路径总价值 [题解] 我们计算 ...

  4. BZOJ 4756 [Usaco2017 Jan]Promotion Counting(线段树合并)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4756 [题目大意] 给出一棵树,对于每个节点,求其子树中比父节点大的点个数 [题解] ...

  5. java 的环境搭建

    java.JDK 的搭建__本人是在360里下载的.也可以去其它的网站. java.jdk官网地址下载: https://download.oracle.com 二.也可以下载地址:http://do ...

  6. 检测是否为n的因子 Exercise07_06

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:检测是否为n的因子 * */ public class Exercise07_06 { public static void ...

  7. 微信小程序-微信自动退款(Java后台)

    微信小程序-微信自动退款 1.首先分享 微信自动退款接口: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4 微信付款 代码案例 ...

  8. [bzoj1014](JSOI2008)火星人 prefix (Splay维护哈希)

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀. 比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 ...

  9. GG同步到sqlserver报错一例 Invalid date format

    在将Oracle表同步到sqlserver时,在sqlserver端应用数据时,可能会遇到这个报错. 2014-05-17 17:20:24 WARNING OGG-01154 SQL error - ...

  10. llvm之旅第一站 - 编译及简单使用 LLVM 图解

    http://www.nagain.com/activity/article/4/ http://blog.csdn.net/snsn1984/article/details/8593380