spring bean 继承

问题描述---为什么Bean配置需要能够继承?

在Spring Ico容器里配置Bean时,可能存在这样一种情况:多个Bean的配置有一部分是相同的,如果在每个Bean里都进行配置,就会显得很麻烦。

相同的配置往往有两种情况:1.多个Bean需要注入相同的Bean;2.多个<bean>元素的属性相同。

解决方案

将多个Bean相同的部分抽象为一个Bean,然后让这多个Bean继承它。

实现案例

[java] view plain copy

print?

  1. class Dao{
  2. public void daoM(){
  3. System.out.println("doaM");
  4. }
  5. }
  6. class ServiceA {
  7. private Dao dao;
  8. public void setDao(Dao dao) {
  9. this.dao = dao;
  10. }
  11. public void serviceA_M(){
  12. dao.daoM();
  13. }
  14. }
  15. class ServiceB {
  16. private Dao dao;
  17. public void setDao(Dao dao) {
  18. this.dao = dao;
  19. }
  20. public void serviceB_M(){
  21. dao.daoM();
  22. }
  23. }

Bean配置

[html] view plain copy

print?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <bean id="dao" class="com.zzj.test.Dao"></bean>
  7. <bean id="service" abstract="true">
  8. <property name="dao">
  9. <ref bean="dao"/>
  10. </property>
  11. </bean>
  12. <bean id="serviceA" class="com.zzj.test.ServiceA" parent="service"></bean>
  13. <bean id="serviceB" class="com.zzj.test.ServiceB" parent="service"></bean>
  14. </beans>

注:抽象出来的bean并未指定class。

测试

[java] view plain copy

print?

  1. public static void main(String[] args) {
  2. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  3. ServiceA serviceA = (ServiceA) context.getBean("serviceA");
  4. serviceA.serviceA_M();
  5. ServiceB serviceB = (ServiceB) context.getBean("serviceB");
  6. serviceB.serviceB_M();
  7. }

总结

父Bean可以作为配置模板,也可以作为Bean实例。不过,如果只想把父Bean作为不实例化的模板,那么必须把abstract属性设为true,这样spring将不会实例化这个Bean。

注意:

1.并不是所有在父<bean>元素里定义的属性都会被继承。例如,autowire和dependency-check属性就不能被继承。

2.Bean配置的继承不是类的继承,它们之间没有任何关系。

转自:http://blog.csdn.net/zhangzeyuaaa/article/details/22583681

时间: 2024-12-31 03:34:49

spring bean 继承的相关文章

半夜思考之查漏补缺 , Spring 中的 Bean 继承机制

这里的继承 , 不是 Java 中的继承 , 下面就总结下 Bean继承与Java继承的区别: Spring 中的子类 Bean 和父 Bean 可以是不同类型 , 但是 Java 中的继承则可保证子类是一种特殊的父类 ; Spring 中 Bean 的继承时实例之间的关系 , 因此主要表现为参数值的延续 ; 而 Java 中的继承是类之间的关系 , 主要表现为方法和属性的延续 ; Spring 中的子 Bean 不可作为父 Bean 使用 , 不具备多态性 ; 而 Java 中的子类实例完全可

spring bean之间的关系:继承;依赖

概要: ' 继承Bean配置 Spring同意继承bean的配置,被继承的bean称为父bean.继承这个父Bean的Bean称为子Bean 子Bean从父Bean中继承配置,包含Bean的属性配置 子Bean也能够覆盖从父Bean继承过来的配置 父Bean能够作为配置模版,也能够作为Bean实例,若仅仅想把父Bean作为模版,能够配置<bean>的abstract属性为true.这样Spring将不会实例化这个Bean 并非<bean>元素里的全部属性都会被继承.比方:autow

【Bean继承】Spring中的抽象bean以及bean继承

通过指定abstract="true",来声明一个bean为抽象bean,可被继承: <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi

Spring Bean配置

Spring 是什么 •Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. •Spring 是一个 IOC(DI) 和 AOP 容器框架. –轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API –依赖注入(DI --- dependency injection.IOC) –面向切面编程(AOP --- aspect oriented programm

Spring Bean之间的关系

bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括bean的属性配置 子bean也可以覆盖从父bean继承过来的配置 父bean可以作为配置模版,也可以作为bean实例,若只想把父bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个bean 并不是<bean>元素里的所有属性都会被继

Spring Bean的生命周期(非常详细)

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册. 转载请注明地址 http://www.cnblogs.com/zrtqsk/p/3735273.html,谢谢. 一.生命周期流程图: Spri

【转】Spring Bean属性解析

转载自:http://wenku.baidu.com/view/30c7672cb4daa58da0114ae2.html Bean所以属性一览: <bean id="beanId"(1) name="beanName"(2) class="beanClass"(3) parent="parentBean"(4) abstract="true | false"(5) singleton="t

Spring8:一些常用的Spring Bean扩展接口

前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格遵循了OCP----开闭原则,即: 1.保证对修改关闭,即外部无法修改Spring整个运作的流程 2.提供对扩展开放,即可以通过继承.实现Spring提供的众多抽象类与接口来改变类加载的行为 开卷有益,阅读Spring源码(无需每个类都看得很细,大体流程能梳理出来即可)对于个人水平的提升是帮助非常大

Spring Bean的生命周期(非常详细)(转载)

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册. 转载请注明地址 http://www.cnblogs.com/zrtqsk/p/3735273.html,谢谢. 一.生命周期流程图: Spri