spring bean parent属性详解
必要条件: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属性详解的更多相关文章
- Spring Bean生命周期详解
对象生命周期:创建(实例化----初始化)---使用----销毁,而在Spring中,Bean对象周期当然遵从这一过程,但是Spring提供了许多对外接口,允许开发者对三个过程(实例化.初始化.销毁) ...
- spring配置文件各个属性详解
一.引用外部属性文件 <bean id="propertyConfigurer" class="org.springframework.beans.factory. ...
- Spring - <bean parent="xxx" 属性>
总结 必要条件: 1.子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性. 2.父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工 ...
- Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...
- Spring中的@Transactional(rollbackFor = Exception.class)属性详解
序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法: 异常 如下图所示,我们都 ...
- coding++:Spring中的@Transactional(rollbackFor = Exception.class)属性详解
异常: 如下图所示,我们都知道 Exception 分为 运行时异常 RuntimeException 和 非运行时异常. error 是一定会回滚的. 如果不对运行时异常进行处理,那么出现运行时异常 ...
- Spring Batch(4): Job详解
Spring Batch(4): Job详解 2016-03-26 18:46 870人阅读 评论(1) 收藏 举报 分类: Spring(6) 版权声明:本文为博主原创文章,未经博主允许不得转载 ...
- Spring IoC createBean 方法详解
前言 本篇文章主要分析 Spring IoC 的 createBean() 方法的流程,以及 bean 的生命周期. 下面是一个大致的流程图: 正文 AbstractAutowireCapableBe ...
- Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现
我们在前文中已经介绍了SpringAOP的切面实现和创建动态代理的过程,那么动态代理是如何工作的呢?本文主要介绍Cglib动态代理的案例和SpringAOP实现的原理.@pdai Spring框架系列 ...
随机推荐
- poj 2739(筛法求素数)
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21613 ...
- CSS 笔记——文本字体
5. 文本字体 -> 文本 (1)text-indent 基本语法 text-indent : length 语法取值 length : 百分比数字 | 由浮点数字和单位标识符组成的长度值,允许 ...
- HDU 6052 To my boyfriend(悬线法)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6052 [题目大意] 给出一个数字矩阵,求子矩阵期望数字种数 [题解] 我们统计[x,y]为其所表示 ...
- 【Tarjan】【LCA】【动态规划】【推导】hdu6065 RXD, tree and sequence
划分出来的每个区间的答案,其实就是连续两个的lca的最小值. 即5 2 3 4 这个区间的答案是min(dep(lca(5,2)),dep(lca(2,3),dep(lca(3,4)))). 于是dp ...
- 【贪心+优先队列】POJ3190-Stall Reservations
[题目大意] 给出每个奶牛挤奶的时间,同一时间同一畜栏内不会有两头奶牛挤奶,问至少要多少个畜栏. [思路] 将奶牛按照挤奶开始的时间进行升序排序,再用一个小顶堆维护每一个畜栏当前的挤奶结束时间.对于当 ...
- spring quartz 配置
quartz简介 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务.任务调度本身涉及到多线程 ...
- String.format("%0"+length+"d", arr)中的%0和"d"分别代表什么
public static void main(String[] args) { int a = 8; String s = String.format("%04d", a); S ...
- 粗览Activiti Modeler操作和源代码
Activiti Model Editor组件 我的 了解ActivitiExplorer及其Vaadin实现方式博文里提到ActivitiExplorer使用的是Vaadin架构,但是Activit ...
- easyui-textbox input输入框的一种取值方式
1.html文件 <td> <input id="clientPhone" type="text" name="clientPhon ...
- PHP常用库函数介绍+常见疑难问题解答
来源:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/19/3086858.html 虽然PHP在整体功能上不如Java强大,但相比PHP而言 ...