继承

这里说的继承和java的继承是不一样的,不是父类子类。但思想很相似,是父bean和子bean

1、父bean是一个实例时。它本身是一个完整的bean

2、父bean是模板,抽象bean,不能被实例化,只是来被继承。

当遇到一个类要实例化出很多相似的bean对象时,如下,看起来是不是很不简洁

1     <bean id="address1" class="com.guigu.spring.autowire.Address"
2 p:city="BeiJing" p:street="yihuan"></bean>
3 <bean id="address2" class="com.guigu.spring.autowire.Address"
4 p:city="BeiJing" p:street="erhuan"></bean>

方法① 两个bean除了p:street不一样,其他都一样。可以把一个作为父bean,其它的继承这个bean

1      <bean id="address1" class="com.guigu.spring.autowire.Address"
2 p:city="BeiJing" p:street="yihuan"></bean>
3 <bean id="address2" p:street="erhuan" parent="address1"></bean>
4 // address2等价于:
5 // <bean id="address2"" class="com.guigu.spring.autowire.Address"
6 // p:city="BeiJing" p:street="erhuan"></bean>

这里,第二个就继承了第一个bean,用parent属性,只写自己独有的属性或要覆盖的属性即可。

方法②把相同属性提取出来,做一个抽象bean,专门用来继承

1 <bean id="address1" class="com.guigu.spring.autowire.Address"
2 p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
3 <bean id="address2" p:street="erhuan" parent="address1"></bean>

这样,address2也继承了address1。address1设置了abstract="true",就不能实例化,否则抛异常。

也可以写成这样:

1  <bean id="address1" p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
2 <bean id="address2" class="com.guigu.spring.autowire.Address" p:street="erhuan" parent="address1"></bean>

和上面的不同就是把class属性拿出去了。当很多不是同一个类的bean要继承父bean时,就要这样,在子bean写自己所在的class。

这样写还有一点是,这个父bean一定不能实例化,因为它没有class属性,实例化会跑异常。那就一定要写abstract属性,让spring不实例化它。

     依赖---depends-on

用Person类的例子

 1 public class Person {
2 private String name;
3 private Car car;
4
5 public String getName() {
6 return name;
7 }
8 public void setName(String name) {
9 this.name = name;
10 }
11 public Car getCar() {
12 return car;
13 }
14 public void setCar(Car car) {
15 this.car = car;
16 }
17 @Override
18 public String toString() {
19 return "Person [name=" + name + ", car=" + car + "]";
20 }
21 }

有一个属性Car没有配置,那实例化后,它就是null。

1  <bean id="person" class="com.guigu.spring.autowire.Person"
2 p:name="Evan"></bean>

有时,我们需要让某个属性必须存在,就像必填项一样。 用depends-on 依赖

1   <bean id="person" class="com.guigu.spring.autowire.Person"
2 p:name="Evan" depends-on="car"></bean>

这样表示,实例化person一定要依赖car,没有配置car会抛异常

1  <bean id="car" class="com.guigu.spring.autowire.Car" p:brand="Audi" p:price="200000"></bean>
2 <bean id="person" class="com.guigu.spring.autowire.Person"
3 p:name="Evan" depends-on="car"></bean>

这样,依赖的car存在,就可以正常实例化了

bean之间的关系:继承、依赖的更多相关文章

  1. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系

    XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...

  3. 3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/

    1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 -& ...

  4. Spring Bean之间的关系

    bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...

  5. Bean之间的关系

    Bean之间主要有继承和依赖的关系,这里的继承并不是我们面向对象里面所提到的继承. 继承 我们先来创建一个新的配置文件beans-relation.xml <bean id="addr ...

  6. 峰Spring4学习(5)bean之间的关系和bean的作用范围

    一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; priv ...

  7. Spring学习--Bean 之间的关系

    Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...

  8. Spring初学之bean之间的关系和bean的作用域

    一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  9. XML配置里的Bean自动装配与Bean之间的关系

    需要在<bean>的autowire属性里指定自动装配的模式 byType(根据类型自动装配) byName(根据名称自动装配) constructor(通过构造器自动装配) 名字须与属性 ...

  10. Spring_自动装配 & bean之间的关系 & bean的作用域

    1.自动装配 beans-autowire.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

随机推荐

  1. 【linux】学习4

    文件压缩: gzip :压缩   解压缩 zcat: 读取压缩文件 gzip text1  :压缩text1 得到 text1.gz 原文件不见了 gzip -c text1 > text1.g ...

  2. 【mysql】利用Navicat for MySQL的使用

    1. 查看sql语句 如果忘记了某个SQL语句怎么写,可以利用Navicat for MySQL的历史日志来查看 在Navicat for MySQL中,直接对数据库进行想要的操作,然后点击工具-&g ...

  3. Xcode找不到模拟器

    今天新建的工程,突然发现模拟器找不到了,之前遇到过忘记怎么解决了,于是再次记录下解决方法. 首先说下问什么找不到模拟器了,原因就是之前运行的版本和现在xcode的版本不同(的确,我从 Xcode7.3 ...

  4. iOS应用架构谈(一):架构设计的方法论

    当我们讨论客户端应用架构的时候,我们在讨论什么? 其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情: 简单来说就是调API,展示页面,然后跳转到别的地方再调API,再展示页面. 那这有什么好 ...

  5. 【SSO单点系列】(1):CAS4.0 环境的搭建

    一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 二.环境要求 博主的环境如下: win8.1 64 ...

  6. DB2 Z/os Load utility 使用

    Use the LOAD online utility to load one or more tables of a table space. The LOAD utility loads reco ...

  7. Java -- String、StringBuffer、StringBuilder

    原文:http://blog.csdn.net/kingzone_2008/article/details/9220691 String:不可变. StringBuffer(JDK1.0):可变,线程 ...

  8. JVM的内存分配与垃圾回收策略

    自动内存管理机制主要解决了两个问题:给对象分配内存以及回收分配给对象的内存. >>垃圾回收的区域 前面的笔记中整理过虚拟机运行数据区,再看一下这个区域: 注意在这个Runtime Data ...

  9. Android中libs目录下armeabi和armeabi-v7a的区别

    armeabi默认选项,支持基于 ARM* v5TE 的设备支持软浮点运算(不支持硬件辅助的浮点计算)支持所有 ARM* 设备 armeabi-v7a支持基于 ARM* v7 的设备支持硬件 FPU ...

  10. 【翻译五】java-中断机制

    Interrupts An interrupt is an indication to a thread that it should stop what it is doing and do som ...