继承

这里说的继承和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. 【leetcode】Spiral Matrix(middle)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  2. Hibernate双向一对一对象关系模型映射

    一个员工一辆车:one-to-one 实现一:让汽车表中的外键唯一 create table emp ( eid int primary key auto_increment, ename varch ...

  3. August 17th 2016 Week 34th Wednesday

    Life is painting a picture, not doing a sum. 生活就像是绘画,而不是做算术. I am too serious about digits. All what ...

  4. oracle 监控

    sqlplus "/as sysdba" .监控当前数据库谁在运行什么SQL语句 SELECT osuser, username, sql_text from v$session ...

  5. NYOJ题目839合并

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAKgCAIAAADmrHcoAAAgAElEQVR4nO3dO1LsOheG4X8S5AyE2A

  6. NYOJ之喷水装置(一)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsUAAAJvCAIAAAAcLjvHAAAgAElEQVR4nO3drXLjzNaG4e8kzH0gof

  7. java 中的一个项目如何做到访问另一个项目的一个方法 或者 页面

    两种方法:1.将一个项目打成jar包,第二个项目进行导入该jar包,就可以使用第一个项目里的类方法属性等2.将第一个项目发布出去,然后第二个项目调用,所谓发布出去就是开发远程接口,允许其他人调用.

  8. 设计模式学习之桥接模式(Bridge,结构型模式)(15)

    参考地址:http://terrylee.cnblogs.com/archive/2006/02/24/336652.html 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化, ...

  9. 【JAVA网络流之浏览器与服务器模拟】

    一.模拟服务器获取浏览器请求http信息 代码: package p06.TCPTransferImitateServer.p01.ImitateServer; import java.io.IOEx ...

  10. 验证备份前设置CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF; 的区别

    关于rman的,环境: oracle 10.2.0 rman nocatalog方式 1.首先设置 CONFIGURE CONTROLFILE AUTOBACKUP ON; 然后进行数据库全备份 RM ...