Spring基础10——Bean之间关系
1.前言
不同的Bean之间存在两种关系:继承和依赖,这里的继承与java中的继承不同,它指的是配置上的继承。
2.继承bean配置
Spring允许继承bean的配置,被继承的bean成为父bean,继承这个父bean的Bean称为子bean,继承bean主要有以下几个特点:
1)子Bean从父Bean中继承配置,包括Bean的属性配置
2)子Bean也可以覆盖从父Bean继承过来的配置,如父bean设置name为zhangsan,子Bean中可以把name的值覆盖为Lisi.
3)父Bean可以作为配置模板,也可以作为Bean实例,若只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个Bean并不是<bean>元素里的所有元素都会被继承,比如autowire,abstract等
4)也可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstract必须设置为true。
5) 一个abstract属性为true的bean是不会被容器实例化的,它是一个抽象Bean。
具体配置文件:
<!--抽象bean不能被IOC容器实例化,只用来被继承配置 abstract="true",如果一个bean没有指定class那么它必须是一个抽象bean-->
<bean id="address" class="com.wzy.autowire.Address" p:city="BeiJing" p:street="HuangLongGuan" abstract="true"/> <!--bean配置的继承:当两个bean的配置几乎一样,使用bean的parent属性继承哪个bean的配置-->
<bean id="address2" p:street="WuDaoKou" parent="address"/> <bean id="car" class="com.wzy.autowire.Car" p:brand="AUDI" p:price="300000"/>
3.依赖Bean配置
Spring允许用户通过depends-on属性设定Bean前置依赖的bean,前置依赖的bean会在本Bean实例化之前创建好。如果前置依赖于多个Bean,则可以通过逗号、空格的方式配置Bean的名称。
具体配置文件:
<!--要求在配置Person时,必须有一个关联的car!换句话说person这个bean依赖于Car这个bean-->
<bean id="person" class="com.wzy.autowire.Person" p:address-ref="address2" p:name="wzy" depends-on="car"/>
总结:depends-on适用于表面上看起来两个bean之间没有使用属性之类的强连接的bean,但是两个bean又确实存在前后依赖关系的情况,使用了depends-on的时候,依赖他人的bean是先于被依赖bean销毁的,相比于ref属性,ref表示的bean是与当前bean之间是有关联的,是需要注入当前bean的属性中的,而depends-on是将两个bean进行强关联,来保证创建和销毁的顺序。
Spring基础10——Bean之间关系的更多相关文章
- Spring初学之bean之间的关系和bean的作用域
一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- Spring -- Bean自己主动装配&Bean之间关系&Bean的作用域
对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...
- Spring基础篇——bean的自动化装配
上篇博文讲Spring的IOC容器时说道,虽然容器功能强大,但容器本身只是个空壳,需要我们主动放入装配对象,并告诉它对象之间的协作关系,然后容器才能按照我们的指示发挥它的魔力,完成装配bean的使命. ...
- Spring基础14——Bean的生命周期
1.IOC容器中的Bean的生命周期方法 SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务.SpringIOC容器对Bean的生命周期进行管理 ...
- Spring基础11——Bean的作用域
1.Bean的作用域种类 Spring中的bean的作用域分为四种:singleton.prototype.session.request,后两种很少使用,下面我们主要来学习前两种 2.singlet ...
- spring bean之间关系
ByeService.java package com.service; public class ByeService { public String sayBye() { return " ...
- Spring基础09——Bean的自动装配
1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...
- Spring基础(7) : Bean的名字
1.普通bean是用id标志,context.getBean时传入名称即可获得. <bean id="p" class="com.Person"/> ...
- Spring基础(4) : bean重写
@Configuration public class Config1 { @Bean() public Person getP(){ Person p = new Person(); p.setNa ...
随机推荐
- Mybatis 中在xxx.mapper书写模糊查询
1.在mybatis中,书写sql,有时候会有一些不细心,如: <!-- 首页商品 关键字搜索--> <select id="getGoodsByLikeTitle&quo ...
- 通过构造器配置Bean
public class Role { private Log id; private String roleName; private String note; public Role(String ...
- 安装telnet服务
一.安装telnet1.检测telnet-server的rpm包是否安装 [root@localhost ~]# rpm -qa telnet-server 若无输入内容,则表示没有安装.出于安全考虑 ...
- AAAI 2019 分析
AAAI 2019 分析 Google Scholar 订阅 CoKE : Word Sense Induction Using Contextualized Knowledge Embeddings ...
- Python locals() 的陷阱
转载自https://segmentfault.com/a/1190000012724861 在工作中, 有时候会遇到一种情况: 动态地进行变量赋值, 不管是局部变量还是全局变量, 在我们绞尽脑汁的时 ...
- jmeter之报告输出(html)
在使用jmeter进行测试时,我们需要生成相应的测试报告,jmeter3.0之后有自带的测试报告. 在测试报告的格式和输出内容不满足需求时,我们可以根据需要去修改其配置文件(jmeter.proper ...
- 系统分析与设计HW7
XX 建模练习 要求: 练习文档编写 选择一个你喜欢的 移动App 或 其中某业务 参考 Asg_RH 文档格式 编写软件描述 文档要包含一个业务的完整过程 建模要求包括(用例图.XX业务或用例的活动 ...
- Java连接Hive使用Zookeeper的方式
Java连接Hive的方式就是通过JDBC的方式来连接,URL为jdbc:hive2://host:port/db;principal=X@BIGDATA.COM等,这种方式是直接连接HiveServ ...
- 机器学习实战-Logistics回归
Logistics回归:实战,有两个特征X0,X1.100个样本,进行Logistics回归 1.导入数据 def load_data_set(): """ 加载数据集 ...
- 应用安全 - Java Web 应用 - Confluence - 漏洞汇总
CVE-2019-3395 Date: -- 类型: SSRF 影响范围: Confluence 1.*.*.*.*.3.*.*.4.*.*.5.*.* Confluence 6.0.*.1.*.6. ...