Spring学习记录(四)---bean之间的关系:继承、依赖
继承
这里说的继承和java的继承是不一样的,不是父类子类。但思想很相似,是父bean和子bean
1、父bean是一个实例时。它本身是一个完整的bean
2、父bean是模板,抽象bean,不能被实例化,只是来被继承。
当遇到一个类要实例化出很多相似的bean对象时,如下,看起来是不是很不简洁
<bean id="address1" class="com.guigu.spring.autowire.Address"
p:city="BeiJing" p:street="yihuan"></bean>
<bean id="address2" class="com.guigu.spring.autowire.Address"
p:city="BeiJing" p:street="erhuan"></bean>
方法① 两个bean除了p:street不一样,其他都一样。可以把一个作为父bean,其它的继承这个bean
<bean id="address1" class="com.guigu.spring.autowire.Address"
p:city="BeiJing" p:street="yihuan"></bean>
<bean id="address2" p:street="erhuan" parent="address1"></bean>
// address2等价于:
// <bean id="address2"" class="com.guigu.spring.autowire.Address"
// p:city="BeiJing" p:street="erhuan"></bean>
这里,第二个就继承了第一个bean,用parent属性,只写自己独有的属性或要覆盖的属性即可。
方法②把相同属性提取出来,做一个抽象bean,专门用来继承
<bean id="address1" class="com.guigu.spring.autowire.Address"
p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
<bean id="address2" p:street="erhuan" parent="address1"></bean>
这样,address2也继承了address1。address1设置了abstract="true",就不能实例化,否则抛异常。
也可以写成这样:
<bean id="address1" p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
<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类的例子
public class Person {
private String name;
private Car car;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", car=" + car + "]";
}
}
有一个属性Car没有配置,那实例化后,它就是null。
<bean id="person" class="com.guigu.spring.autowire.Person"
p:name="Evan"></bean>
有时,我们需要让某个属性必须存在,就像必填项一样。 用depends-on 依赖
<bean id="person" class="com.guigu.spring.autowire.Person"
p:name="Evan" depends-on="car"></bean>
这样表示,实例化person一定要依赖car,没有配置car会抛异常
<bean id="car" class="com.guigu.spring.autowire.Car" p:brand="Audi" p:price="200000"></bean>
<bean id="person" class="com.guigu.spring.autowire.Person"
p:name="Evan" depends-on="car"></bean>
这样,依赖的car存在,就可以正常实例化了
Spring学习记录(四)---bean之间的关系:继承、依赖的更多相关文章
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/
1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 -& ...
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- Spring学习记录(八)---Bean的生命周期
之前说过,在调用下面时,就创建了容器和对象 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml&quo ...
- Spring学习记录(五)---bean的作用域scope
作用域:singleton:单例,整个应用中只创建一个实例(默认) prototype:原型,每次注入时都新建一个实例 session:会话,每个会话创建一个实例 request:请求,每个请求创建一 ...
- Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系
XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...
- Spring学习--Bean 之间的关系
Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...
- 我的Spring学习记录(四)
虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...
- Spring基础——在 IOC 容器中 Bean 之间的关系
一.在 Spring IOC 容器中 Bean 之间存在继承和依赖关系. 需要注意的是,这个继承和依赖指的是 bean 的配置之间的关系,而不是指实际意义上类与类之间的继承与依赖,它们不是一个概念. ...
随机推荐
- Daily Scrum Meeting ——ThirdDay(Beta)12.11
一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展(check-in) 1.欢迎界面的优化,从模糊到清楚 2.新增主界面背景 3.新增注册背景 4.参与者侧 ...
- leanote个人版安装
https://github.com/leanote/leanote/wiki/Leanote-%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB% ...
- Html 基础介绍 基础标签
<head> <!-- 设置编码格式 --> <meta charset="UTF-8"> <!-- 设置作者 --> <me ...
- NAIPC-2016
A. Fancy Antiques 爆搜+剪枝. #include <bits/stdc++.h> using namespace std ; typedef pair < int ...
- 工厂模式(Factory)
一.分类 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式主要分为三个,简单工厂模式(Simple Factory)/ 工厂方法模式(Fac ...
- 【翻译svg教程 】svg 的坐标系统
http://tutorials.jenkov.com/svg/svg-coordinate-system.html svg的坐标系统(和大多数计算机绘图的坐标系统)和数学中绘图系统有点不一样 数学/ ...
- appium过程中的问题
1.在eclipse中点击Genymotion Virtual Device Manager ,选择虚拟设备,点击start后,无反应. 解决方法:Help/Install New Softwa ...
- Win32 OpenProcess打开进程失败,返回5无权限操作
Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...
- #iOS问题记录#动态Html加载本地CSS和JS文件
所谓动态Html,指代码中组合生成的html字符串: 若需要加载本地CSS,图片,JS文件,则, 1,需要文件的全路径: 2,需要"file:///"标志: 例如: //获取文件全 ...
- Spring MVC的配置文件(XML)的几个经典案列
1.既然是配置文件版的,那配置文件自然是必不可少,且应该会很复杂,那我们就以一个一个的来慢慢分析这些个经典案列吧! 01.实现Controller /* * 控制器 */ public class M ...