`
lushuaiyin
  • 浏览: 675847 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring配置中parent和abstract作用

 
阅读更多

以下是转载别人的文章

关于spring中的bean定义,parent属性是什么意思?
1.
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>


2.
<bean id="carnetMgr" parent="txProxyTemplate">
<1property name="target">
<bean class="ecustoms.carnet.app.biz.CarnetMgr">
<property name="extensionHistoryDAO" ref="extensionHistoryDAO"/>
<property name="stockTransactionDAO" ref="stockTransactionDAO"/>
<property name="carnetDAO" ref="carnetDAO"/>
</bean>
</property>
</bean>

表示继承的父类
如果有很多继承同一个父类的BEAN
那么在配置文件中实例那些BEAN时候可以省略掉父类已经注入的属性

bean定义继承父bean定义,它可以覆盖父bean的一些值,或者它需要的值。

那么在配置文件中实例那些BEAN时候可以省略掉父类已经注入的属性


&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Spring 定义:abstract="true"(转http://blog.163.com/yangyanninhao@126/blog/static/239900292007101863043493/) .
分类: 其它 2010-12-14 16:43 361人阅读 评论(0) 收藏 举报
Spring 定义:abstract="true"
Spring 2007-11-18 18:30:43 阅读94 评论1 字号:大中小 订阅

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。


&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Spring整理4 -- 公共属性的注入

如何将公共的注入定义描述出来?

* 通过<bean>标签定义公共的属性,指定abstract=true

* 具有相同属性的类在<bean>标签中指定其parent属性

例如:一个对象有三个属性分别为:id、name、password,另一个对象有四个属性为id、name、loginpass

例子代码:

Bean1.java

public class Bean1 {
private int id;
private String name;
private String password;

Bean2.java

public class Bean2 {
private int id;
private String name;
private String loginpass;

applicationContext.xml:

<bean id="beanAbstract" abstract="true">
<property name="id" value="1"/>
<property name="name" value="Jack"/>
</bean>
<bean id="bean3" class="spring.Bean1" parent="beanAbstract">
<!-- 可以覆盖父类赋予的值 -->
<property name="name" value="Tom"/>
<property name="password" value="123"/>
</bean>
<bean id="bean4" class="spring.Bean2" parent="beanAbstract">
<property name="loginpass" value="123"/>
</bean>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics