bean之间的关系:继承、依赖
继承
这里说的继承和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之间的关系:继承、依赖的更多相关文章
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系
XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...
- 3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/
1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 -& ...
- Spring Bean之间的关系
bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...
- Bean之间的关系
Bean之间主要有继承和依赖的关系,这里的继承并不是我们面向对象里面所提到的继承. 继承 我们先来创建一个新的配置文件beans-relation.xml <bean id="addr ...
- 峰Spring4学习(5)bean之间的关系和bean的作用范围
一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; priv ...
- Spring学习--Bean 之间的关系
Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...
- Spring初学之bean之间的关系和bean的作用域
一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- XML配置里的Bean自动装配与Bean之间的关系
需要在<bean>的autowire属性里指定自动装配的模式 byType(根据类型自动装配) byName(根据名称自动装配) constructor(通过构造器自动装配) 名字须与属性 ...
- Spring_自动装配 & bean之间的关系 & bean的作用域
1.自动装配 beans-autowire.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
随机推荐
- 【linux】学习4
文件压缩: gzip :压缩 解压缩 zcat: 读取压缩文件 gzip text1 :压缩text1 得到 text1.gz 原文件不见了 gzip -c text1 > text1.g ...
- 【mysql】利用Navicat for MySQL的使用
1. 查看sql语句 如果忘记了某个SQL语句怎么写,可以利用Navicat for MySQL的历史日志来查看 在Navicat for MySQL中,直接对数据库进行想要的操作,然后点击工具-&g ...
- Xcode找不到模拟器
今天新建的工程,突然发现模拟器找不到了,之前遇到过忘记怎么解决了,于是再次记录下解决方法. 首先说下问什么找不到模拟器了,原因就是之前运行的版本和现在xcode的版本不同(的确,我从 Xcode7.3 ...
- iOS应用架构谈(一):架构设计的方法论
当我们讨论客户端应用架构的时候,我们在讨论什么? 其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情: 简单来说就是调API,展示页面,然后跳转到别的地方再调API,再展示页面. 那这有什么好 ...
- 【SSO单点系列】(1):CAS4.0 环境的搭建
一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 二.环境要求 博主的环境如下: win8.1 64 ...
- 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 ...
- Java -- String、StringBuffer、StringBuilder
原文:http://blog.csdn.net/kingzone_2008/article/details/9220691 String:不可变. StringBuffer(JDK1.0):可变,线程 ...
- JVM的内存分配与垃圾回收策略
自动内存管理机制主要解决了两个问题:给对象分配内存以及回收分配给对象的内存. >>垃圾回收的区域 前面的笔记中整理过虚拟机运行数据区,再看一下这个区域: 注意在这个Runtime Data ...
- Android中libs目录下armeabi和armeabi-v7a的区别
armeabi默认选项,支持基于 ARM* v5TE 的设备支持软浮点运算(不支持硬件辅助的浮点计算)支持所有 ARM* 设备 armeabi-v7a支持基于 ARM* v7 的设备支持硬件 FPU ...
- 【翻译五】java-中断机制
Interrupts An interrupt is an indication to a thread that it should stop what it is doing and do som ...